1e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes/*
2e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Licensed to the Apache Software Foundation (ASF) under one or more
3e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
4e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * this work for additional information regarding copyright ownership.
5e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
6e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * (the "License"); you may not use this file except in compliance with
7e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * the License.  You may obtain a copy of the License at
8e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
9e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes *
11e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * Unless required by applicable law or agreed to in writing, software
12e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
13e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * See the License for the specific language governing permissions and
15e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes * limitations under the License.
16e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes */
17e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
18e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespackage tests.support;
19e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
20e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.ByteArrayInputStream;
21e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.ByteArrayOutputStream;
22e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.File;
23e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.FileOutputStream;
24e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.IOException;
25e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.io.InputStream;
26e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.net.JarURLConnection;
27e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.net.MalformedURLException;
28e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.net.URL;
29e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport java.util.Hashtable;
30e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
31e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughesimport tests.support.resource.Support_Resources;
32e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
33e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughespublic class Support_GetLocal {
34e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
35e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	static Hashtable<String, File> cache = new Hashtable<String, File>(20);
36e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
37e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static File getLocalFile(String url) throws IOException,
38e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			MalformedURLException {
39e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		url = Support_Resources.RESOURCE_PACKAGE + url;
40e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		File temp = cache.get(url);
41e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		if (temp == null) {
42e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			InputStream in = Support_GetLocal.class.getResourceAsStream(url);
43e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			temp = File.createTempFile("hyts_local", ".tmp", null);
44e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			temp.deleteOnExit();
45e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			FileOutputStream out = new FileOutputStream(temp);
46e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			int result;
47e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			byte[] buf = new byte[4096];
48e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			while ((result = in.read(buf)) != -1) {
49e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes                out.write(buf, 0, result);
50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            }
51e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			in.close();
52e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			out.close();
53e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			cache.put(url, temp);
54e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
55e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return temp;
56e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
57e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
58e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static File getExternalLocalFile(String url) throws IOException,
59e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			MalformedURLException {
60e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		File temp = cache.get(url);
61e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		if (temp == null) {
62e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			InputStream in = new URL(url).openStream();
63e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			temp = File.createTempFile("hyts_local", ".tmp", null);
64e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			temp.deleteOnExit();
65e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			FileOutputStream out = new FileOutputStream(temp);
66e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			int result;
67e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			byte[] buf = new byte[4096];
68e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			while ((result = in.read(buf)) != -1) {
69e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes                out.write(buf, 0, result);
70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            }
71e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			in.close();
72e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			out.close();
73e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			cache.put(url, temp);
74e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		}
75e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return temp;
76e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
78e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	static ByteArrayInputStream getStream(String url) throws IOException,
79e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes			MalformedURLException {
80e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		InputStream in = new URL(url).openStream();
81e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		ByteArrayOutputStream out = new ByteArrayOutputStream(256);
82e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		int result;
83e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		byte[] buf = new byte[256];
84e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		while ((result = in.read(buf)) != -1) {
85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            out.write(buf, 0, result);
86e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes        }
87e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return new ByteArrayInputStream(out.toByteArray());
88e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
89e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
90e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static File createTempFile(String suffix) throws IOException {
91e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return File.createTempFile("hyts_", suffix, null);
92e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
93e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
94e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	public static JarURLConnection getJarURLConnection() throws IOException {
95e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		JarURLConnection con1 = null;
96e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		File file = getLocalFile("hyts_att.jar");
97e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		URL fUrl1 = new URL("jar:file:" + file.getPath() + "!/");
98e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		con1 = (JarURLConnection) fUrl1.openConnection();
99e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes		return con1;
100e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes	}
101e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes}