2 *******************************************************************************
3 * Copyright (C) 2004-2009, International Business Machines Corporation and *
4 * others. All Rights Reserved. *
5 *******************************************************************************
7 * Created on Feb 4, 2004
10 package com.ibm.icu.impl;
12 import java.io.InputStream;
14 import java.security.AccessController;
15 import java.security.PrivilegedAction;
16 import java.util.MissingResourceException;
19 * Provides access to ICU data files as InputStreams. Implements security checking.
21 public final class ICUData {
23 * Return a URL to the ICU resource names resourceName. The
24 * resource name should either be an absolute path, or a path relative to
25 * com.ibm.icu.impl (e.g., most likely it is 'data/foo'). If required
26 * is true, throw an MissingResourceException instead of returning a null result.
28 public static boolean exists(final String resourceName) {
30 if (System.getSecurityManager() != null) {
31 i = AccessController.doPrivileged(new PrivilegedAction<URL>() {
33 return ICUData.class.getResource(resourceName);
37 i = ICUData.class.getResource(resourceName);
42 private static InputStream getStream(final Class<?> root, final String resourceName, boolean required) {
45 if (System.getSecurityManager() != null) {
46 i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
47 public InputStream run() {
48 return root.getResourceAsStream(resourceName);
52 i = root.getResourceAsStream(resourceName);
55 if (i == null && required) {
56 throw new MissingResourceException("could not locate data " +resourceName, root.getPackage().getName(), resourceName);
61 private static InputStream getStream(final ClassLoader loader, final String resourceName, boolean required) {
63 if (System.getSecurityManager() != null) {
64 i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
65 public InputStream run() {
66 return loader.getResourceAsStream(resourceName);
70 i = loader.getResourceAsStream(resourceName);
72 if (i == null && required) {
73 throw new MissingResourceException("could not locate data", loader.toString(), resourceName);
78 public static InputStream getStream(ClassLoader loader, String resourceName){
79 return getStream(loader,resourceName, false);
82 public static InputStream getRequiredStream(ClassLoader loader, String resourceName){
83 return getStream(loader, resourceName, true);
87 * Convenience override that calls getStream(ICUData.class, resourceName, false);
89 public static InputStream getStream(String resourceName) {
90 return getStream(ICUData.class, resourceName, false);
94 * Convenience method that calls getStream(ICUData.class, resourceName, true).
96 public static InputStream getRequiredStream(String resourceName) {
97 return getStream(ICUData.class, resourceName, true);
101 * Convenience override that calls getStream(root, resourceName, false);
103 public static InputStream getStream(Class<?> root, String resourceName) {
104 return getStream(root, resourceName, false);
108 * Convenience method that calls getStream(root, resourceName, true).
110 public static InputStream getRequiredStream(Class<?> root, String resourceName) {
111 return getStream(root, resourceName, true);