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    GRSCICOLL,
031    EVENT,
032    // Extension types
033    IMAGE,
034    MULTIMEDIA,
035    AUDUBON,
036    MEASUREMENT_OR_FACT,
037    AMPLIFICATION,
038    DNA_DERIVED_DATA,
039    // Specific
040    LOCATION_FEATURE,
041    // Tables,
042    // Remeber to add mapping to org.gbif.pipelines.core.utils.DwcaExtensionTermUtils
043    // and org.gbif.pipelines.ingest.utils.HdfsViewAvroUtils
044    OCCURRENCE,
045    MEASUREMENT_OR_FACT_TABLE,
046    IDENTIFICATION_TABLE,
047    RESOURCE_RELATIONSHIP_TABLE,
048    AMPLIFICATION_TABLE,
049    CLONING_TABLE,
050    GEL_IMAGE_TABLE,
051    LOAN_TABLE,
052    MATERIAL_SAMPLE_TABLE,
053    PERMIT_TABLE,
054    PREPARATION_TABLE,
055    PRESERVATION_TABLE,
056    GERMPLASM_MEASUREMENT_SCORE_TABLE,
057    GERMPLASM_MEASUREMENT_TRAIT_TABLE,
058    GERMPLASM_MEASUREMENT_TRIAL_TABLE,
059    GERMPLASM_ACCESSION_TABLE,
060    EXTENDED_MEASUREMENT_OR_FACT_TABLE,
061    CHRONOMETRIC_AGE_TABLE,
062    REFERENCE_TABLE,
063    IDENTIFIER_TABLE,
064    AUDUBON_TABLE,
065    IMAGE_TABLE,
066    MULTIMEDIA_TABLE,
067    DNA_DERIVED_DATA_TABLE;
068
069    @Override
070    public String all() {
071      return ALL.name();
072    }
073
074    public static Set<RecordType> getAllInterpretation() {
075      return new HashSet<>(
076        Arrays.asList(
077          VERBATIM,
078          // Core types
079          METADATA,
080          IDENTIFIER_ABSENT,
081          CLUSTERING,
082          BASIC,
083          TEMPORAL,
084          LOCATION,
085          TAXONOMY,
086          GRSCICOLL,
087          // Extension types
088          IMAGE,
089          MULTIMEDIA,
090          AUDUBON,
091          MEASUREMENT_OR_FACT,
092          AMPLIFICATION,
093          DNA_DERIVED_DATA,
094          // Specific
095          LOCATION_FEATURE,
096          OCCURRENCE));
097    }
098
099    public static Set<String> getAllInterpretationAsString() {
100      return getAllInterpretation().stream().map(RecordType::name).collect(Collectors.toSet());
101    }
102
103    public static Set<String> getAllValidatorInterpretationAsString() {
104      Set<String> set = getAllInterpretationAsString();
105      set.add(IDENTIFIER.name());
106      set.remove(IDENTIFIER_ABSENT.name());
107      return set;
108    }
109
110    public static Set<RecordType> getAllTables() {
111      return new HashSet<>(
112        Arrays.asList(
113          OCCURRENCE,
114          MEASUREMENT_OR_FACT_TABLE,
115          IDENTIFICATION_TABLE,
116          RESOURCE_RELATIONSHIP_TABLE,
117          AMPLIFICATION_TABLE,
118          CLONING_TABLE,
119          GEL_IMAGE_TABLE,
120          LOAN_TABLE,
121          MATERIAL_SAMPLE_TABLE,
122          PERMIT_TABLE,
123          PREPARATION_TABLE,
124          PRESERVATION_TABLE,
125          GERMPLASM_MEASUREMENT_SCORE_TABLE,
126          GERMPLASM_MEASUREMENT_TRAIT_TABLE,
127          GERMPLASM_MEASUREMENT_TRIAL_TABLE,
128          GERMPLASM_ACCESSION_TABLE,
129          EXTENDED_MEASUREMENT_OR_FACT_TABLE,
130          CHRONOMETRIC_AGE_TABLE,
131          REFERENCE_TABLE,
132          IDENTIFIER_TABLE,
133          AUDUBON_TABLE,
134          IMAGE_TABLE,
135          MULTIMEDIA_TABLE,
136          DNA_DERIVED_DATA_TABLE));
137    }
138  }
139}