• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package tests.support.resource;
19 
20 import java.io.File;
21 import java.io.FileNotFoundException;
22 import java.io.FileOutputStream;
23 import java.io.IOException;
24 import java.io.InputStream;
25 import java.net.MalformedURLException;
26 import java.net.URISyntaxException;
27 import java.net.URL;
28 
29 import tests.support.Support_Configuration;
30 
31 public class Support_Resources {
32 
33     public static final String RESOURCE_PACKAGE = "/tests/resources/";
34 
35     public static final String RESOURCE_PACKAGE_NAME = "tests.resources";
36 
getStream(String name)37     public static InputStream getStream(String name) {
38         // System.err.println("getResourceAsStream(" + RESOURCE_PACKAGE + name + ")");
39         return Support_Resources.class.getResourceAsStream(RESOURCE_PACKAGE + name);
40     }
41 
getURL(String name)42     public static String getURL(String name) {
43         String folder = null;
44         String fileName = name;
45         File resources = createTempFolder();
46         int index = name.lastIndexOf("/");
47         if (index != -1) {
48             folder = name.substring(0, index);
49             name = name.substring(index + 1);
50         }
51         copyFile(resources, folder, name);
52         URL url = null;
53         String resPath = resources.toString();
54         if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') {
55             resPath = resPath.substring(1);
56         }
57         try {
58             url = new URL("file:/" + resPath + "/" + fileName);
59         } catch (MalformedURLException e) {
60             throw new RuntimeException(e);
61         }
62         return url.toString();
63     }
64 
createTempFolder()65     public static File createTempFolder() {
66         File folder = null;
67         try {
68             folder = File.createTempFile("hyts_resources", "", null);
69             folder.delete();
70             folder.mkdirs();
71         } catch (IOException e) {
72             throw new RuntimeException(e);
73         }
74         folder.deleteOnExit();
75         return folder;
76     }
77 
copyFile(File root, String folder, String file)78     public static void copyFile(File root, String folder, String file) {
79         File f;
80         if (folder != null) {
81             f = new File(root.toString() + "/" + folder);
82             if (!f.exists()) {
83                 f.mkdirs();
84                 f.deleteOnExit();
85             }
86         } else {
87             f = root;
88         }
89 
90         String src = folder == null ? file : folder + "/" + file;
91         InputStream in = Support_Resources.getStream(src);
92         try {
93             File dst = new File(f.toString() + "/" + file);
94             copyLocalFileTo(dst, in);
95         } catch (Exception e) {
96             throw new RuntimeException("copyFile failed: root=" + root + " folder=" + folder + " file=" + file + " (src=" + src + ")", e);
97         }
98     }
99 
createTempFile(String suffix)100     public static File createTempFile(String suffix) throws IOException {
101         return File.createTempFile("hyts_", suffix, null);
102     }
103 
copyLocalFileTo(File dest, InputStream in)104     public static void copyLocalFileTo(File dest, InputStream in) throws IOException {
105         if (!dest.exists()) {
106             FileOutputStream out = new FileOutputStream(dest);
107             int result;
108             byte[] buf = new byte[4096];
109             while ((result = in.read(buf)) != -1) {
110                 out.write(buf, 0, result);
111             }
112             in.close();
113             out.close();
114             dest.deleteOnExit();
115         }
116     }
117 
getExternalLocalFile(String url)118     public static File getExternalLocalFile(String url) throws IOException, MalformedURLException {
119         File resources = createTempFolder();
120         InputStream in = new URL(url).openStream();
121         File temp = new File(resources.toString() + "/local.tmp");
122         copyLocalFileTo(temp, in);
123         return temp;
124     }
125 
getResourceURL(String resource)126     public static String getResourceURL(String resource) {
127         return "http://" + Support_Configuration.TestResources + resource;
128     }
129 
130     /**
131      * Util method to load resource files
132      *
133      * @param name - name of resource file
134      * @return - resource input stream
135      */
getResourceStream(String name)136     public static InputStream getResourceStream(String name) {
137         InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(name);
138         if (is == null) {
139             throw new RuntimeException("Failed to load resource: " + name);
140         }
141         return is;
142     }
143 
144     /**
145      * Util method to get absolute path to resource file
146      *
147      * @param name - name of resource file
148      * @return - path to resource
149      */
getAbsoluteResourcePath(String name)150     public static String getAbsoluteResourcePath(String name) {
151         URL url = ClassLoader.getSystemClassLoader().getResource(name);
152         if (url == null) {
153             throw new RuntimeException("Failed to load resource: " + name);
154         }
155 
156         try {
157             return new File(url.toURI()).getAbsolutePath();
158         } catch (URISyntaxException e) {
159             throw new RuntimeException("Failed to load resource: " + name);
160         }
161     }
162 }
163