28 package com.sun.javatest;
29
30 import java.io.File;
31 import java.io.IOException;
32 import java.io.InputStream;
33 import java.net.MalformedURLException;
34 import java.net.URL;
35 import java.net.URLClassLoader;
36 import java.security.AccessController;
37 import java.security.PrivilegedAction;
38 import java.util.Enumeration;
39 import java.util.Locale;
40 import java.util.ResourceBundle;
41 import java.util.StringTokenizer;
42 import java.util.Vector;
43
44 import com.sun.javatest.util.DynamicArray;
45
46 public class ResourceLoader {
47
48 public static Enumeration getResources(String name, Class ownClass) throws IOException {
49 URL extResource = getExtResource(name, null);
50 if (extResource != null) {
51 Vector<URL> r = new Vector<>();
52 r.add(extResource);
53 return r.elements();
54 }
55 return ownClass.getClassLoader().getResources(name);
56 }
57
58 public static InputStream getResourceAsStream(final String name, final Class ownClass) {
59 URL url = getExtResource(name, ownClass);
60 try {
61 if (url != null) {
62 return url.openStream();
63 } else {
64 InputStream is = AccessController.doPrivileged(
65 new PrivilegedAction<InputStream>() {
66 @Override
67 public InputStream run() {
68 return ownClass.getResourceAsStream(name);
69 }
70 });
71 return is;
72 }
73 } catch (IOException e) {
74 return null;
75 }
76 }
77
78 public static File getResourceFile(String name, Class ownClass) {
79 File f = getExtResourceFile(name, ownClass);
80 if (f != null) {
81 return f;
82 } else {
83 return new File(ownClass.getResource(name).getFile());
84 }
85 }
86
87 public static URL getExtUrl(File filename) {
88 URL url;
89 File f = filename;
90 try {
91 if (!f.isAbsolute()) {
92 f = new File(ResourceLoader.getExt().getAbsoluteFile(),
93 filename.getPath());
94 }
95
96 url = f.toURI().toURL();
97 } catch (MalformedURLException e2) {
98 url = null;
99 } // catch
100
101 return url;
102 }
103
104 private static URL getExtResource(String name, Class ownClass) {
105 URL ret = null;
106 File rf = getExtResourceFile(name, ownClass);
107 if (rf != null) {
108 try {
109 ret = rf.toURI().toURL();
110 } catch (MalformedURLException ex) {
111 // it's ok
112 }
113 }
114 return ret;
115 }
116
117 private static File getExtResourceFile(String name, Class ownClass) {
118 if (ext != null) {
119 String relName;
120 if (ownClass == null) {
121 relName = name;
122 } else {
123 relName = resolveName(name, ownClass);
124 }
125
126 File resFile = new File(getExt(), relName);
127 if (resFile.exists()) {
128 return resFile;
129 }
130 }
131 return null;
132 }
133
134
135 // get from java.lang.Class with minimal changes
136 private static String resolveName(String name, Class baseClass) {
137 if (name == null || baseClass == null) {
138 return name;
139 }
140
141 if (!name.startsWith("/")) {
142 String baseName = baseClass.getName();
143 int index = baseName.lastIndexOf('.');
144 if (index != -1) {
145 name = baseName.substring(0, index).replace('.', '/')
146 +"/"+name;
147 }
148 } else {
149 name = name.substring(1);
150 }
151 return name;
152 }
153
154 private static final String EXT_DIR_NAME = "jtExt";
155 private static File ext = null;
156
|
28 package com.sun.javatest;
29
30 import java.io.File;
31 import java.io.IOException;
32 import java.io.InputStream;
33 import java.net.MalformedURLException;
34 import java.net.URL;
35 import java.net.URLClassLoader;
36 import java.security.AccessController;
37 import java.security.PrivilegedAction;
38 import java.util.Enumeration;
39 import java.util.Locale;
40 import java.util.ResourceBundle;
41 import java.util.StringTokenizer;
42 import java.util.Vector;
43
44 import com.sun.javatest.util.DynamicArray;
45
46 public class ResourceLoader {
47
48 public static Enumeration<URL> getResources(String name, Class<?> ownClass) throws IOException {
49 URL extResource = getExtResource(name, null);
50 if (extResource != null) {
51 Vector<URL> r = new Vector<>();
52 r.add(extResource);
53 return r.elements();
54 }
55 return ownClass.getClassLoader().getResources(name);
56 }
57
58 public static InputStream getResourceAsStream(final String name, final Class<?> ownClass) {
59 URL url = getExtResource(name, ownClass);
60 try {
61 if (url != null) {
62 return url.openStream();
63 } else {
64 InputStream is = AccessController.doPrivileged(
65 new PrivilegedAction<InputStream>() {
66 @Override
67 public InputStream run() {
68 return ownClass.getResourceAsStream(name);
69 }
70 });
71 return is;
72 }
73 } catch (IOException e) {
74 return null;
75 }
76 }
77
78 public static File getResourceFile(String name, Class<?> ownClass) {
79 File f = getExtResourceFile(name, ownClass);
80 if (f != null) {
81 return f;
82 } else {
83 return new File(ownClass.getResource(name).getFile());
84 }
85 }
86
87 public static URL getExtUrl(File filename) {
88 URL url;
89 File f = filename;
90 try {
91 if (!f.isAbsolute()) {
92 f = new File(ResourceLoader.getExt().getAbsoluteFile(),
93 filename.getPath());
94 }
95
96 url = f.toURI().toURL();
97 } catch (MalformedURLException e2) {
98 url = null;
99 } // catch
100
101 return url;
102 }
103
104 private static URL getExtResource(String name, Class<?> ownClass) {
105 URL ret = null;
106 File rf = getExtResourceFile(name, ownClass);
107 if (rf != null) {
108 try {
109 ret = rf.toURI().toURL();
110 } catch (MalformedURLException ex) {
111 // it's ok
112 }
113 }
114 return ret;
115 }
116
117 private static File getExtResourceFile(String name, Class<?> ownClass) {
118 if (ext != null) {
119 String relName;
120 if (ownClass == null) {
121 relName = name;
122 } else {
123 relName = resolveName(name, ownClass);
124 }
125
126 File resFile = new File(getExt(), relName);
127 if (resFile.exists()) {
128 return resFile;
129 }
130 }
131 return null;
132 }
133
134
135 // get from java.lang.Class with minimal changes
136 private static String resolveName(String name, Class<?> baseClass) {
137 if (name == null || baseClass == null) {
138 return name;
139 }
140
141 if (!name.startsWith("/")) {
142 String baseName = baseClass.getName();
143 int index = baseName.lastIndexOf('.');
144 if (index != -1) {
145 name = baseName.substring(0, index).replace('.', '/')
146 +"/"+name;
147 }
148 } else {
149 name = name.substring(1);
150 }
151 return name;
152 }
153
154 private static final String EXT_DIR_NAME = "jtExt";
155 private static File ext = null;
156
|