001package org.gbif.api.model.pipelines;
002
003import java.io.Serializable;
004import java.util.Arrays;
005import java.util.HashSet;
006import java.util.Set;
007import java.util.stream.Collectors;
008
009/** Enum to represent the pipelines internal interpretation type steps. */
010public interface InterpretationType extends Serializable {
011
012  String name();
013
014  String all();
015
016  enum RecordType implements InterpretationType {
017    ALL,
018    // Raw
019    VERBATIM,
020    // Core types
021    IDENTIFIER,
022    EVENT_IDENTIFIER,
023    IDENTIFIER_ABSENT,
024    METADATA,
025    BASIC,
026    CLUSTERING,
027    TEMPORAL,
028    LOCATION,
029    TAXONOMY,
030    MULTI_TAXONOMY,
031    GRSCICOLL,
032    EVENT,
033    // Extension types
034    IMAGE,
035    MULTIMEDIA,
036    AUDUBON,
037    MEASUREMENT_OR_FACT,
038    AMPLIFICATION,
039    DNA_DERIVED_DATA,
040    // Specific
041    LOCATION_FEATURE,
042    // Tables,
043    // Remeber to add mapping to org.gbif.pipelines.core.utils.DwcaExtensionTermUtils
044    // and org.gbif.pipelines.ingest.utils.HdfsViewAvroUtils
045    OCCURRENCE,
046    MEASUREMENT_OR_FACT_TABLE,
047    IDENTIFICATION_TABLE,
048    RESOURCE_RELATIONSHIP_TABLE,
049    AMPLIFICATION_TABLE,
050    CLONING_TABLE,
051    GEL_IMAGE_TABLE,
052    LOAN_TABLE,
053    MATERIAL_SAMPLE_TABLE,
054    PERMIT_TABLE,
055    PREPARATION_TABLE,
056    PRESERVATION_TABLE,
057    GERMPLASM_MEASUREMENT_SCORE_TABLE,
058    GERMPLASM_MEASUREMENT_TRAIT_TABLE,
059    GERMPLASM_MEASUREMENT_TRIAL_TABLE,
060    GERMPLASM_ACCESSION_TABLE,
061    EXTENDED_MEASUREMENT_OR_FACT_TABLE,
062    CHRONOMETRIC_AGE_TABLE,
063    REFERENCE_TABLE,
064    IDENTIFIER_TABLE,
065    AUDUBON_TABLE,
066    IMAGE_TABLE,
067    MULTIMEDIA_TABLE,
068    DNA_DERIVED_DATA_TABLE;
069
070    @Override
071    public String all() {
072      return ALL.name();
073    }
074
075    public static Set<RecordType> getAllInterpretation() {
076      return new HashSet<>(
077        Arrays.asList(
078          VERBATIM,
079          // Core types
080          METADATA,
081          IDENTIFIER_ABSENT,
082          CLUSTERING,
083          BASIC,
084          TEMPORAL,
085          LOCATION,
086          TAXONOMY,
087          MULTI_TAXONOMY,
088          GRSCICOLL,
089          // Extension types
090          IMAGE,
091          MULTIMEDIA,
092          AUDUBON,
093          MEASUREMENT_OR_FACT,
094          AMPLIFICATION,
095          DNA_DERIVED_DATA,
096          // Specific
097          LOCATION_FEATURE,
098          OCCURRENCE));
099    }
100
101    public static Set<String> getAllInterpretationAsString() {
102      return getAllInterpretation().stream().map(RecordType::name).collect(Collectors.toSet());
103    }
104
105    public static Set<String> getAllValidatorInterpretationAsString() {
106      Set<String> set = getAllInterpretationAsString();
107      set.add(IDENTIFIER.name());
108      set.remove(IDENTIFIER_ABSENT.name());
109      return set;
110    }
111
112    public static Set<RecordType> getAllTables() {
113      return new HashSet<>(
114        Arrays.asList(
115          OCCURRENCE,
116          MEASUREMENT_OR_FACT_TABLE,
117          IDENTIFICATION_TABLE,
118          RESOURCE_RELATIONSHIP_TABLE,
119          AMPLIFICATION_TABLE,
120          CLONING_TABLE,
121          GEL_IMAGE_TABLE,
122          LOAN_TABLE,
123          MATERIAL_SAMPLE_TABLE,
124          PERMIT_TABLE,
125          PREPARATION_TABLE,
126          PRESERVATION_TABLE,
127          GERMPLASM_MEASUREMENT_SCORE_TABLE,
128          GERMPLASM_MEASUREMENT_TRAIT_TABLE,
129          GERMPLASM_MEASUREMENT_TRIAL_TABLE,
130          GERMPLASM_ACCESSION_TABLE,
131          EXTENDED_MEASUREMENT_OR_FACT_TABLE,
132          CHRONOMETRIC_AGE_TABLE,
133          REFERENCE_TABLE,
134          IDENTIFIER_TABLE,
135          AUDUBON_TABLE,
136          IMAGE_TABLE,
137          MULTIMEDIA_TABLE,
138          DNA_DERIVED_DATA_TABLE));
139    }
140  }
141}