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