/*
* Copyright 2011 Global Biodiversity Information Facility (GBIF)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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 java.io.IOException;
import java.net.URL;
import java.util.Properties;
import org.apache.commons.digester.Digester;
public class Abcd12RuleSet extends AbstractRuleSet {
private final String mappingFile = "mapping/indexMapping_abcd_1_2.properties";
public Abcd12RuleSet() throws IOException {
mappingProps = new Properties();
URL url = ClassLoader.getSystemResource(mappingFile);
mappingProps.load(url.openStream());
}
@Override
public String getNamespaceURI() {
return OccurrenceSchemaType.ABCD_1_2.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, "latitude", "setLatitude", 1);
addNonNullParam(digester, "latitude", 0);
addNonNullMethod(digester, "longitude", "setLongitude", 1);
addNonNullParam(digester, "longitude", 0);
addNonNullPrioritizedProperty(digester, "country", PrioritizedPropertyNameEnum.COUNTRY, 4);
addNonNullPrioritizedProperty(digester, "collectorName", PrioritizedPropertyNameEnum.COLLECTOR_NAME, 3);
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, "idPreferredElement", "setPreferredAsString", 1);
addNonNullAttParam(digester, "idPreferredElement", "idPreferredAttribute", 0);
addNonNullMethod(digester, "idGenus", "setGenus", 1);
addNonNullParam(digester, "idGenus", 0);
addNonNullMethod(digester, "idGenus", "setGenus", 1);
addNonNullParam(digester, "idGenus", 0);
addNonNullMethod(digester, "idIdentifierName", "setIdentifierName", 1);
addNonNullParam(digester, "idIdentifierName", 0);
addNonNullPrioritizedProperty(digester, "idDateIdentified", PrioritizedPropertyNameEnum.ID_DATE_IDENTIFIED, 3);
addNonNullPrioritizedProperty(digester, "idScientificName", PrioritizedPropertyNameEnum.ID_SCIENTIFIC_NAME, 2);
// possibly many higher taxons for every identification
addNonNullMethod(digester, "higherTaxonElement", "addHigherTaxon", 2);
addNonNullParam(digester, "higherTaxonRank", 0);
addNonNullAttParam(digester, "higherTaxonRankElement", "higherTaxonRankAttribute", 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, "imageRights", "setRights", 1);
addNonNullParam(digester, "imageRights", 0);
addNonNullMethod(digester, "imageUrl", "setUrl", 1);
addNonNullParam(digester, "imageUrl", 0);
}
// NOTE: no links in abcd 1.2
}
}