2 *******************************************************************************
\r
3 * Copyright (C) 2004-2009, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 * Created on Feb 4, 2004
\r
10 package com.ibm.icu.impl;
\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
19 * Provides access to ICU data files as InputStreams. Implements security checking.
\r
21 public final class ICUData {
\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
28 public static boolean exists(final String resourceName) {
\r
30 if (System.getSecurityManager() != null) {
\r
31 i = AccessController.doPrivileged(new PrivilegedAction<URL>() {
\r
33 return ICUData.class.getResource(resourceName);
\r
37 i = ICUData.class.getResource(resourceName);
\r
42 private static InputStream getStream(final Class<?> root, final String resourceName, boolean required) {
\r
43 InputStream i = null;
\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
52 i = root.getResourceAsStream(resourceName);
\r
55 if (i == null && required) {
\r
56 throw new MissingResourceException("could not locate data " +resourceName, root.getPackage().getName(), resourceName);
\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
70 i = loader.getResourceAsStream(resourceName);
\r
72 if (i == null && required) {
\r
73 throw new MissingResourceException("could not locate data", loader.toString(), resourceName);
\r
78 public static InputStream getStream(ClassLoader loader, String resourceName){
\r
79 return getStream(loader,resourceName, false);
\r
82 public static InputStream getRequiredStream(ClassLoader loader, String resourceName){
\r
83 return getStream(loader, resourceName, true);
\r
87 * Convenience override that calls getStream(ICUData.class, resourceName, false);
\r
89 public static InputStream getStream(String resourceName) {
\r
90 return getStream(ICUData.class, resourceName, false);
\r
94 * Convenience method that calls getStream(ICUData.class, resourceName, true).
\r
96 public static InputStream getRequiredStream(String resourceName) {
\r
97 return getStream(ICUData.class, resourceName, true);
\r
101 * Convenience override that calls getStream(root, resourceName, false);
\r
103 public static InputStream getStream(Class<?> root, String resourceName) {
\r
104 return getStream(root, resourceName, false);
\r
108 * Convenience method that calls getStream(root, resourceName, true).
\r
110 public static InputStream getRequiredStream(Class<?> root, String resourceName) {
\r
111 return getStream(root, resourceName, true);
\r