aboutsummaryrefslogtreecommitdiff
path: root/src/com/ibm/icu/impl/ICUData.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/ibm/icu/impl/ICUData.java')
-rw-r--r--src/com/ibm/icu/impl/ICUData.java113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/com/ibm/icu/impl/ICUData.java b/src/com/ibm/icu/impl/ICUData.java
new file mode 100644
index 0000000..b47b278
--- /dev/null
+++ b/src/com/ibm/icu/impl/ICUData.java
@@ -0,0 +1,113 @@
+/*
+ *******************************************************************************
+ * Copyright (C) 2004-2009, International Business Machines Corporation and *
+ * others. All Rights Reserved. *
+ *******************************************************************************
+ *
+ * Created on Feb 4, 2004
+ *
+ */
+package com.ibm.icu.impl;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.MissingResourceException;
+
+/**
+ * Provides access to ICU data files as InputStreams. Implements security checking.
+ */
+public final class ICUData {
+ /*
+ * Return a URL to the ICU resource names resourceName. The
+ * resource name should either be an absolute path, or a path relative to
+ * com.ibm.icu.impl (e.g., most likely it is 'data/foo'). If required
+ * is true, throw an MissingResourceException instead of returning a null result.
+ */
+ public static boolean exists(final String resourceName) {
+ URL i = null;
+ if (System.getSecurityManager() != null) {
+ i = AccessController.doPrivileged(new PrivilegedAction<URL>() {
+ public URL run() {
+ return ICUData.class.getResource(resourceName);
+ }
+ });
+ } else {
+ i = ICUData.class.getResource(resourceName);
+ }
+ return i != null;
+ }
+
+ private static InputStream getStream(final Class<?> root, final String resourceName, boolean required) {
+ InputStream i = null;
+
+ if (System.getSecurityManager() != null) {
+ i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
+ public InputStream run() {
+ return root.getResourceAsStream(resourceName);
+ }
+ });
+ } else {
+ i = root.getResourceAsStream(resourceName);
+ }
+
+ if (i == null && required) {
+ throw new MissingResourceException("could not locate data " +resourceName, root.getPackage().getName(), resourceName);
+ }
+ return i;
+ }
+
+ private static InputStream getStream(final ClassLoader loader, final String resourceName, boolean required) {
+ InputStream i = null;
+ if (System.getSecurityManager() != null) {
+ i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
+ public InputStream run() {
+ return loader.getResourceAsStream(resourceName);
+ }
+ });
+ } else {
+ i = loader.getResourceAsStream(resourceName);
+ }
+ if (i == null && required) {
+ throw new MissingResourceException("could not locate data", loader.toString(), resourceName);
+ }
+ return i;
+ }
+
+ public static InputStream getStream(ClassLoader loader, String resourceName){
+ return getStream(loader,resourceName, false);
+ }
+
+ public static InputStream getRequiredStream(ClassLoader loader, String resourceName){
+ return getStream(loader, resourceName, true);
+ }
+
+ /*
+ * Convenience override that calls getStream(ICUData.class, resourceName, false);
+ */
+ public static InputStream getStream(String resourceName) {
+ return getStream(ICUData.class, resourceName, false);
+ }
+
+ /*
+ * Convenience method that calls getStream(ICUData.class, resourceName, true).
+ */
+ public static InputStream getRequiredStream(String resourceName) {
+ return getStream(ICUData.class, resourceName, true);
+ }
+
+ /*
+ * Convenience override that calls getStream(root, resourceName, false);
+ */
+ public static InputStream getStream(Class<?> root, String resourceName) {
+ return getStream(root, resourceName, false);
+ }
+
+ /*
+ * Convenience method that calls getStream(root, resourceName, true).
+ */
+ public static InputStream getRequiredStream(Class<?> root, String resourceName) {
+ return getStream(root, resourceName, true);
+ }
+}