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