1/* 2 ******************************************************************************* 3 * Copyright (C) 2004-2009, International Business Machines Corporation and * 4 * others. All Rights Reserved. * 5 ******************************************************************************* 6 * 7 * Created on Feb 4, 2004 8 * 9 */ 10package com.ibm.icu.impl; 11 12import java.io.InputStream; 13import java.net.URL; 14import java.security.AccessController; 15import java.security.PrivilegedAction; 16import java.util.MissingResourceException; 17 18/** 19 * Provides access to ICU data files as InputStreams. Implements security checking. 20 */ 21public final class ICUData { 22 /* 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. 27 */ 28 public static boolean exists(final String resourceName) { 29 URL i = null; 30 if (System.getSecurityManager() != null) { 31 i = AccessController.doPrivileged(new PrivilegedAction<URL>() { 32 public URL run() { 33 return ICUData.class.getResource(resourceName); 34 } 35 }); 36 } else { 37 i = ICUData.class.getResource(resourceName); 38 } 39 return i != null; 40 } 41 42 private static InputStream getStream(final Class<?> root, final String resourceName, boolean required) { 43 InputStream i = null; 44 45 if (System.getSecurityManager() != null) { 46 i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() { 47 public InputStream run() { 48 return root.getResourceAsStream(resourceName); 49 } 50 }); 51 } else { 52 i = root.getResourceAsStream(resourceName); 53 } 54 55 if (i == null && required) { 56 throw new MissingResourceException("could not locate data " +resourceName, root.getPackage().getName(), resourceName); 57 } 58 return i; 59 } 60 61 private static InputStream getStream(final ClassLoader loader, final String resourceName, boolean required) { 62 InputStream i = null; 63 if (System.getSecurityManager() != null) { 64 i = AccessController.doPrivileged(new PrivilegedAction<InputStream>() { 65 public InputStream run() { 66 return loader.getResourceAsStream(resourceName); 67 } 68 }); 69 } else { 70 i = loader.getResourceAsStream(resourceName); 71 } 72 if (i == null && required) { 73 throw new MissingResourceException("could not locate data", loader.toString(), resourceName); 74 } 75 return i; 76 } 77 78 public static InputStream getStream(ClassLoader loader, String resourceName){ 79 return getStream(loader,resourceName, false); 80 } 81 82 public static InputStream getRequiredStream(ClassLoader loader, String resourceName){ 83 return getStream(loader, resourceName, true); 84 } 85 86 /* 87 * Convenience override that calls getStream(ICUData.class, resourceName, false); 88 */ 89 public static InputStream getStream(String resourceName) { 90 return getStream(ICUData.class, resourceName, false); 91 } 92 93 /* 94 * Convenience method that calls getStream(ICUData.class, resourceName, true). 95 */ 96 public static InputStream getRequiredStream(String resourceName) { 97 return getStream(ICUData.class, resourceName, true); 98 } 99 100 /* 101 * Convenience override that calls getStream(root, resourceName, false); 102 */ 103 public static InputStream getStream(Class<?> root, String resourceName) { 104 return getStream(root, resourceName, false); 105 } 106 107 /* 108 * Convenience method that calls getStream(root, resourceName, true). 109 */ 110 public static InputStream getRequiredStream(Class<?> root, String resourceName) { 111 return getStream(root, resourceName, true); 112 } 113} 114