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
358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static Hashtable<String, File> cache = new Hashtable<String, File>(20);
36e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static File getLocalFile(String url) throws IOException,
388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            MalformedURLException {
398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        url = Support_Resources.RESOURCE_PACKAGE + url;
408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        File temp = cache.get(url);
418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        if (temp == null) {
428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            InputStream in = Support_GetLocal.class.getResourceAsStream(url);
438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            temp = File.createTempFile("hyts_local", ".tmp", null);
448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            temp.deleteOnExit();
458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            FileOutputStream out = new FileOutputStream(temp);
468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            int result;
478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            byte[] buf = new byte[4096];
488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            while ((result = in.read(buf)) != -1) {
49e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes                out.write(buf, 0, result);
50e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            }
518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            in.close();
528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            out.close();
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            cache.put(url, temp);
548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return temp;
568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
57e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static File getExternalLocalFile(String url) throws IOException,
598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            MalformedURLException {
608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        File temp = cache.get(url);
618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        if (temp == null) {
628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            InputStream in = new URL(url).openStream();
638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            temp = File.createTempFile("hyts_local", ".tmp", null);
648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            temp.deleteOnExit();
658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            FileOutputStream out = new FileOutputStream(temp);
668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            int result;
678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            byte[] buf = new byte[4096];
688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            while ((result = in.read(buf)) != -1) {
69e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes                out.write(buf, 0, result);
70e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            }
718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            in.close();
728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            out.close();
738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            cache.put(url, temp);
748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        }
758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return temp;
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
77e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
788d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    static ByteArrayInputStream getStream(String url) throws IOException,
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            MalformedURLException {
808d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        InputStream in = new URL(url).openStream();
818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        ByteArrayOutputStream out = new ByteArrayOutputStream(256);
828d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        int result;
838d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        byte[] buf = new byte[256];
848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        while ((result = in.read(buf)) != -1) {
85e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes            out.write(buf, 0, result);
86e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes        }
878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return new ByteArrayInputStream(out.toByteArray());
888d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
89e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
908d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static File createTempFile(String suffix) throws IOException {
918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return File.createTempFile("hyts_", suffix, null);
928d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
93e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes
948d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    public static JarURLConnection getJarURLConnection() throws IOException {
958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        JarURLConnection con1 = null;
968d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        File file = getLocalFile("hyts_att.jar");
978d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        URL fUrl1 = new URL("jar:file:" + file.getPath() + "!/");
988d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        con1 = (JarURLConnection) fUrl1.openConnection();
998d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        return con1;
1008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath    }
101e98fbf8686c5289bf03fe5c3de7ff82d3a77104dElliott Hughes}