Home | History | Annotate | Download | only in util
      1 package org.unicode.cldr.util;
      2 
      3 import java.util.Locale;
      4 
      5 /**
      6  * A simple class representing an enumeration of possible CLDR coverage levels. Levels may change in the future.
      7  *
      8  * @author davis
      9  *
     10  */
     11 public enum Level {
     12     UNDETERMINED(0, "none", 0), CORE(10, "G4", 100),
     13     // POSIX(20, "G4", 100),
     14     // MINIMAL(30, "G3.5", 90),
     15     BASIC(40, "G3", 80), MODERATE(60, "G2", 70), MODERN(80, "G1", 50), COMPREHENSIVE(100, "G0", 2);
     16     //OPTIONAL(101, "optional", 1);
     17 
     18     @Deprecated
     19     public static final Level POSIX = BASIC;
     20     @Deprecated
     21     public static final Level MINIMAL = BASIC;
     22     @Deprecated
     23     public static final Level OPTIONAL = COMPREHENSIVE;
     24 
     25     private final byte level;
     26     private final String altName;
     27     private final int value;
     28 
     29     private static final Level[] VALUES = values();
     30 
     31     /**
     32      * returns value ranging from 100 (core) to 1 (optional). Most clients want getLevel instead.
     33      *
     34      * @return
     35      */
     36     public int getValue() {
     37         return value;
     38     }
     39 
     40     private Level(int i, String altName, int value) {
     41         this.level = ((byte) i);
     42         this.altName = altName;
     43         this.value = value;
     44     }
     45 
     46     public static Level get(String name) {
     47         try {
     48             return Level.valueOf(name.toUpperCase(Locale.ENGLISH));
     49         } catch (RuntimeException e) {
     50             for (Level level : VALUES) {
     51                 if (name.equalsIgnoreCase(level.altName)) {
     52                     return level;
     53                 }
     54             }
     55             if (name.equalsIgnoreCase("POSIX")) {
     56                 return POSIX;
     57             } else if (name.equalsIgnoreCase("MINIMAL")) {
     58                 return MINIMAL;
     59             } else if (name.equalsIgnoreCase("OPTIONAL")) {
     60                 return OPTIONAL;
     61             }
     62             return UNDETERMINED;
     63         }
     64     }
     65 
     66     public String toString() {
     67         return this.name().toLowerCase();
     68     }
     69 
     70     // public int compareTo(Level o) {
     71     // int otherLevel = ((Level) o).level;
     72     // return level < otherLevel ? -1 : level > otherLevel ? 1 : 0;
     73     // }
     74 
     75     static final StandardCodes sc = StandardCodes.make();
     76 
     77     public static int getDefaultWeight(String organization, String desiredLocale) {
     78         Level level = sc.getLocaleCoverageLevel(organization, desiredLocale);
     79         if (level.compareTo(Level.MODERATE) >= 0) {
     80             return 4;
     81         }
     82         return 1;
     83     }
     84 
     85     /**
     86      * This is the numeric value used in the coverage level XML.
     87      *
     88      * @return range from 10 (core) to 100 (comprehensive).
     89      */
     90     public byte getLevel() {
     91         return level;
     92     }
     93 
     94     public static Level fromLevel(int level) {
     95         for (Level result : Level.values()) {
     96             if (level == result.level) {
     97                 return result;
     98             }
     99         }
    100 
    101         if (level == 20) {
    102             return Level.POSIX;
    103         } else if (level == 30) {
    104             return Level.MINIMAL;
    105         } else if (level == 101) {
    106             return Level.OPTIONAL;
    107         }
    108         throw new IllegalArgumentException(String.valueOf(level));
    109     }
    110 
    111     public static Level fromString(String source) {
    112         return Level.get(source);
    113     }
    114 }