Index: src/main/java/org/gbif/api/vocabulary/Kingdom.java =================================================================== --- src/main/java/org/gbif/api/vocabulary/Kingdom.java (revision 1152) +++ src/main/java/org/gbif/api/vocabulary/Kingdom.java (working copy) @@ -15,11 +15,14 @@ */ package org.gbif.api.vocabulary; +import java.util.Map; + +import com.google.common.collect.ImmutableMap; + /** * A simple enumeration of all kingdoms found in the GBIF Backbone Taxonomy and also Catalogue of Life. */ public enum Kingdom { - INCERTAE_SEDIS('I'), ANIMALIA('A'), ARCHAEA('R'), @@ -30,6 +33,34 @@ PROTOZOA('Z'), VIRUSES('V'); + // Enable fast lookup by the constant NUB IDs + public static final Map NUB_INDEX = + new ImmutableMap.Builder() + .put(0, INCERTAE_SEDIS) + .put(1, ANIMALIA) + .put(2, ARCHAEA) + .put(3, BACTERIA) + .put(4, CHROMISTA) + .put(5, FUNGI) + .put(6, PLANTAE) + .put(7, PROTOZOA) + .put(8, VIRUSES) + .build(); + + // Enable fast lookup by the abbreviation + public static final Map ABBREV_INDEX = + new ImmutableMap.Builder() + .put('I', INCERTAE_SEDIS) + .put('A', ANIMALIA) + .put('R', ARCHAEA) + .put('B', BACTERIA) + .put('C', CHROMISTA) + .put('F', FUNGI) + .put('P', PLANTAE) + .put('Z', PROTOZOA) + .put('V', VIRUSES) + .build(); + private final char abbrev; /** @@ -40,12 +71,7 @@ * @return the matching kingdom or null */ public static Kingdom byNubUsageId(Integer usageID) { - for (Kingdom term : Kingdom.values()) { - if (term.nubUsageID().equals(usageID)) { - return term; - } - } - return null; + return ABBREV_INDEX.get(usageID); } /** @@ -54,13 +80,7 @@ * @return the kingdom or null. */ public static Kingdom byChar(char kingdomAbbrev) { - kingdomAbbrev = Character.toUpperCase(kingdomAbbrev); - for (Kingdom term : Kingdom.values()) { - if (term.abbrev == kingdomAbbrev) { - return term; - } - } - return null; + return ABBREV_INDEX.get(Character.toUpperCase(kingdomAbbrev)); } Kingdom(char abbrev) {