]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/core/src/com/ibm/icu/impl/ICUData.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / core / src / com / ibm / icu / impl / ICUData.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 2004-2009, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  *\r
7  * Created on Feb 4, 2004\r
8  *\r
9  */\r
10 package com.ibm.icu.impl;\r
11 \r
12 import java.io.InputStream;\r
13 import java.net.URL;\r
14 import java.security.AccessController;\r
15 import java.security.PrivilegedAction;\r
16 import java.util.MissingResourceException;\r
17 \r
18 /**\r
19  * Provides access to ICU data files as InputStreams.  Implements security checking.\r
20  */\r
21 public final class ICUData {\r
22     /*\r
23      * Return a URL to the ICU resource names resourceName.  The\r
24      * resource name should either be an absolute path, or a path relative to\r
25      * com.ibm.icu.impl (e.g., most likely it is 'data/foo').  If required\r
26      * is true, throw an MissingResourceException instead of returning a null result.\r
27      */\r
28     public static boolean exists(final String resourceName) {\r
29         URL i = null;\r
30         if (System.getSecurityManager() != null) {\r
31             i = AccessController.doPrivileged(new PrivilegedAction<URL>() {\r
32                     public URL run() {\r
33                         return ICUData.class.getResource(resourceName);\r
34                     }\r
35                 });\r
36         } else {\r
37             i = ICUData.class.getResource(resourceName);\r
38         }\r
39         return i != null;\r
40     }\r
41         \r
42     private static InputStream getStream(final Class<?> root, final String resourceName, boolean required) {\r
43         InputStream i = null;\r
44         \r
45         if (System.getSecurityManager() != null) {\r
46             i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {\r
47                     public InputStream run() {\r
48                         return root.getResourceAsStream(resourceName);\r
49                     }\r
50                 });\r
51         } else {\r
52             i = root.getResourceAsStream(resourceName);\r
53         }\r
54 \r
55         if (i == null && required) {\r
56             throw new MissingResourceException("could not locate data " +resourceName, root.getPackage().getName(), resourceName);\r
57         }\r
58         return i;\r
59     }\r
60 \r
61     private static InputStream getStream(final ClassLoader loader, final String resourceName, boolean required) {\r
62         InputStream i = null;\r
63         if (System.getSecurityManager() != null) {\r
64             i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {\r
65                     public InputStream run() {\r
66                         return loader.getResourceAsStream(resourceName);\r
67                     }\r
68                 });\r
69         } else {\r
70             i = loader.getResourceAsStream(resourceName);\r
71         }\r
72         if (i == null && required) {\r
73             throw new MissingResourceException("could not locate data", loader.toString(), resourceName);\r
74         }\r
75         return i;\r
76     }\r
77     \r
78     public static InputStream getStream(ClassLoader loader, String resourceName){\r
79         return getStream(loader,resourceName, false);   \r
80     }\r
81 \r
82     public static InputStream getRequiredStream(ClassLoader loader, String resourceName){\r
83         return getStream(loader, resourceName, true);\r
84     }\r
85 \r
86     /*\r
87      * Convenience override that calls getStream(ICUData.class, resourceName, false);\r
88      */\r
89     public static InputStream getStream(String resourceName) {\r
90         return getStream(ICUData.class, resourceName, false);\r
91     }\r
92         \r
93     /*\r
94      * Convenience method that calls getStream(ICUData.class, resourceName, true).\r
95      */\r
96     public static InputStream getRequiredStream(String resourceName) {\r
97         return getStream(ICUData.class, resourceName, true);\r
98     }\r
99 \r
100     /*\r
101      * Convenience override that calls getStream(root, resourceName, false);\r
102      */\r
103     public static InputStream getStream(Class<?> root, String resourceName) {\r
104         return getStream(root, resourceName, false);\r
105     }\r
106     \r
107     /*\r
108      * Convenience method that calls getStream(root, resourceName, true).\r
109      */\r
110     public static InputStream getRequiredStream(Class<?> root, String resourceName) {\r
111         return getStream(root, resourceName, true);\r
112     }\r
113 }\r