1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html#License 3 /* 4 ******************************************************************************* 5 * Copyright (C) 2012-2014, International Business Machines 6 * Corporation and others. All Rights Reserved. 7 ******************************************************************************* 8 * CollationRoot.java, ported from collationroot.h/.cpp 9 * 10 * C++ version created on: 2012dec17 11 * created by: Markus W. Scherer 12 */ 13 14 package com.ibm.icu.impl.coll; 15 16 import java.io.IOException; 17 import java.nio.ByteBuffer; 18 import java.util.MissingResourceException; 19 20 import com.ibm.icu.impl.ICUBinary; 21 import com.ibm.icu.impl.ICUData; 22 23 /** 24 * Collation root provider. 25 */ 26 public final class CollationRoot { // purely static 27 private static final CollationTailoring rootSingleton; 28 private static final RuntimeException exception; 29 getRoot()30 public static final CollationTailoring getRoot() { 31 if(exception != null) { 32 throw exception; 33 } 34 return rootSingleton; 35 } getData()36 public static final CollationData getData() { 37 CollationTailoring root = getRoot(); 38 return root.data; 39 } getSettings()40 static final CollationSettings getSettings() { 41 CollationTailoring root = getRoot(); 42 return root.settings.readOnly(); 43 } 44 45 static { // Corresponds to C++ load() function. 46 CollationTailoring t = null; 47 RuntimeException e2 = null; 48 try { 49 ByteBuffer bytes = ICUBinary.getRequiredData("coll/ucadata.icu"); 50 CollationTailoring t2 = new CollationTailoring(null); CollationDataReader.read(null, bytes, t2)51 CollationDataReader.read(null, bytes, t2); 52 // Keep t=null until after the root data has been read completely. 53 // Otherwise we would set a non-null root object if the data reader throws an exception. 54 t = t2; 55 } catch(IOException e) { 56 e2 = new MissingResourceException( 57 "IOException while reading CLDR root data", 58 "CollationRoot", ICUData.ICU_BUNDLE + "/coll/ucadata.icu"); 59 } catch(RuntimeException e) { 60 e2 = e; 61 } 62 rootSingleton = t; 63 exception = e2; 64 } 65 } 66