package org.gbif.occurrence.parsing.xml.rules;
import org.gbif.api.vocabulary.OccurrenceSchemaType;
import org.gbif.occurrence.constants.PrioritizedPropertyNameEnum;
import org.gbif.occurrence.model.Identification;
import org.gbif.occurrence.model.ImageRecord;
import org.gbif.occurrence.model.LinkRecord;
import java.io.IOException;
import java.net.URL;
import java.util.Properties;
import org.apache.commons.digester.Digester;
public class Abcd206RuleSet extends AbstractRuleSet {
private final String mappingFile = "mapping/indexMapping_abcd_2_0_6.properties";
public Abcd206RuleSet() throws IOException {
mappingProps = new Properties();
URL url = ClassLoader.getSystemResource(mappingFile);
mappingProps.load(url.openStream());
}
@Override
public String getNamespaceURI() {
//TODO: should this be the real xml namespace and not just a flat string?
return OccurrenceSchemaType.ABCD_2_0_6.toString();
}
@Override
public void addRuleInstances(Digester digester) {
super.addRuleInstances(digester);
// abcd simple fields
addNonNullMethod(digester, "catalogueNumber", "setCatalogueNumber", 1);
addNonNullParam(digester, "catalogueNumber", 0);
addNonNullMethod(digester, "altitudePrecision", "setAltitudePrecision", 1);
addNonNullParam(digester, "altitudePrecision", 0);
addNonNullMethod(digester, "depthPrecision", "setDepthPrecision", 1);
addNonNullParam(digester, "depthPrecision", 0);
addNonNullMethod(digester, "locality", "setLocality", 1);
addNonNullParam(digester, "locality", 0);
addNonNullMethod(digester, "geodeticDatum", "setGeodeticDatum", 1);
addNonNullParam(digester, "geodeticDatum", 0);
addNonNullMethod(digester, "collectorsFieldNumber", "setCollectorsFieldNumber", 1);
addNonNullParam(digester, "collectorsFieldNumber", 0);
addNonNullPrioritizedProperty(digester, "country", PrioritizedPropertyNameEnum.COUNTRY, 3);
addNonNullPrioritizedProperty(digester, "collectorName", PrioritizedPropertyNameEnum.COLLECTOR_NAME, 3);
addNonNullPrioritizedProperty(digester, "latitude", PrioritizedPropertyNameEnum.LATITUDE, 2);
addNonNullPrioritizedProperty(digester, "longitude", PrioritizedPropertyNameEnum.LONGITUDE, 2);
addNonNullPrioritizedProperty(digester, "dateCollected", PrioritizedPropertyNameEnum.DATE_COLLECTED, 3);
// possibly many identifications
String pattern = mappingProps.getProperty("idElement");
if (pattern != null) {
pattern = pattern.trim();
digester.addObjectCreate(pattern, Identification.class);
digester.addSetNext(pattern, "addIdentification");
addNonNullMethod(digester, "idPreferred", "setPreferredAsString", 1);
addNonNullParam(digester, "idPreferred", 0);
addNonNullMethod(digester, "idGenus", "setGenus", 1);
addNonNullParam(digester, "idGenus", 0);
addNonNullMethod(digester, "idGenus", "setGenus", 1);
addNonNullParam(digester, "idGenus", 0);
addNonNullMethod(digester, "idScientificName", "setScientificName", 1);
addNonNullParam(digester, "idScientificName", 0);
addNonNullPrioritizedProperty(digester, "idDateIdentified", PrioritizedPropertyNameEnum.ID_DATE_IDENTIFIED, 2);
addNonNullPrioritizedProperty(digester, "idIdentifierName", PrioritizedPropertyNameEnum.ID_IDENTIFIER_NAME, 2);
// possibly many higher taxons for every identification
addNonNullMethod(digester, "higherTaxonElement", "addHigherTaxon", 2);
addNonNullParam(digester, "higherTaxonRank", 0);
addNonNullParam(digester, "higherTaxonName", 1);
}
// possibly many images
pattern = mappingProps.getProperty("imageElement");
if (pattern != null) {
pattern = pattern.trim();
digester.addObjectCreate(pattern, ImageRecord.class);
digester.addSetNext(pattern, "addImage");
addNonNullMethod(digester, "imageType", "setRawImageType", 1);
addNonNullParam(digester, "imageType", 0);
addNonNullMethod(digester, "imageDescription", "setDescription", 1);
addNonNullParam(digester, "imageDescription", 0);
addNonNullMethod(digester, "imageUrl", "setUrl", 1);
addNonNullParam(digester, "imageUrl", 0);
addNonNullMethod(digester, "imagePageUrl", "setPageUrl", 1);
addNonNullParam(digester, "imagePageUrl", 0);
addNonNullPrioritizedProperty(digester, "imageRights", PrioritizedPropertyNameEnum.IMAGE_RIGHTS, 2);
}
// possibly many links
pattern = mappingProps.getProperty("linkElement");
if (pattern != null) {
pattern = pattern.trim();
digester.addObjectCreate(pattern, LinkRecord.class);
digester.addSetNext(pattern, "addLink");
addNonNullMethod(digester, "linkUrl", "setUrl", 1);
addNonNullParam(digester, "linkUrl", 0);
}
}
}