-// $Id$\r
-/**\r
-* Copyright (C) 2016 EDIT\r
-* European Distributed Institute of Taxonomy\r
-* http://www.e-taxonomy.eu\r
-*\r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-package eu.etaxonomy.cdm.io.specimen;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-\r
-import org.springframework.transaction.TransactionStatus;\r
-\r
-import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
-import eu.etaxonomy.cdm.io.common.CdmImportBase;\r
-import eu.etaxonomy.cdm.io.common.ImportStateBase;\r
-import eu.etaxonomy.cdm.io.specimen.abcd206.in.SpecimenImportReport;\r
-import eu.etaxonomy.cdm.model.agent.Institution;\r
-import eu.etaxonomy.cdm.model.common.OriginalSourceBase;\r
-import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
-import eu.etaxonomy.cdm.model.occurrence.Collection;\r
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
-import eu.etaxonomy.cdm.model.occurrence.FieldUnit;\r
-import eu.etaxonomy.cdm.model.reference.Reference;\r
-import eu.etaxonomy.cdm.model.taxon.Classification;\r
-\r
-/**\r
- * @author k.luther\r
- * @param <CONFIG>\r
- * @date 15.07.2016\r
- *\r
- */\r
-public class SpecimenImportStateBase<CONFIG extends SpecimenImportConfiguratorBase, STATE extends SpecimenImportStateBase> extends ImportStateBase<CONFIG , CdmImportBase<CONFIG , STATE >>{\r
-\r
-\r
- /**\r
- * @param config\r
- */\r
- public SpecimenImportStateBase(CONFIG config) {\r
- super(config);\r
- // TODO Auto-generated constructor stub\r
- }\r
-\r
- private TransactionStatus tx;\r
-\r
- private ICdmApplicationConfiguration cdmRepository;\r
- private Classification classification = null;\r
- private Classification defaultClassification = null;\r
- private Reference ref = null;\r
-\r
- private TaxonDescription descriptionGroup = null;\r
- private DerivedUnit derivedUnitBase;\r
-\r
- private SpecimenImportReport report;\r
-\r
- protected SpecimenDataHolder dataHolder;\r
-\r
- private List<OriginalSourceBase<?>> associationRefs = new ArrayList<OriginalSourceBase<?>>();\r
- private boolean associationSourcesSet=false;\r
- private List<OriginalSourceBase<?>> descriptionRefs = new ArrayList<OriginalSourceBase<?>>();\r
- private boolean descriptionSourcesSet=false;\r
- private List<OriginalSourceBase<?>> derivedUnitSources = new ArrayList<OriginalSourceBase<?>>();\r
- private boolean derivedUnitSourcesSet=false;\r
- private boolean descriptionGroupSet = false;\r
- protected HashMap<String, Institution> institutions = new HashMap<String, Institution>();\r
- protected HashMap<String, Collection> collections= new HashMap<String, Collection>();\r
- private HashMap<String,FieldUnit> fieldUnits = new HashMap<String, FieldUnit>();\r
-\r
-\r
-\r
-\r
- /* -----Getter/Setter ---*/\r
-\r
- /**\r
- * @return the fieldUnits\r
- */\r
- public FieldUnit getFieldUnit(String fieldNumber) {\r
- return fieldUnits.get(fieldNumber);\r
- }\r
-\r
- /**\r
- * @param fieldUnits the fieldUnits to set\r
- */\r
- public void setFieldUnit(FieldUnit fieldUnit) {\r
- this.fieldUnits.put(fieldUnit.getFieldNumber(), fieldUnit);\r
- }\r
-\r
- @Override\r
- public CONFIG getConfig(){\r
- return super.getConfig();\r
- }\r
-\r
- public List<OriginalSourceBase<?>> getAssociationRefs() {\r
- return associationRefs;\r
- }\r
-\r
- public void setAssociationRefs(List<OriginalSourceBase<?>> associationRefs) {\r
- this.associationRefs = associationRefs;\r
- }\r
-\r
- public boolean isAssociationSourcesSet() {\r
- return associationSourcesSet;\r
- }\r
-\r
- public void setAssociationSourcesSet(boolean associationSourcesSet) {\r
- this.associationSourcesSet = associationSourcesSet;\r
- }\r
-\r
- public List<OriginalSourceBase<?>> getDescriptionRefs() {\r
- return descriptionRefs;\r
- }\r
-\r
- public void setDescriptionRefs(List<OriginalSourceBase<?>> descriptionRefs) {\r
- this.descriptionRefs = descriptionRefs;\r
- }\r
-\r
- public boolean isDescriptionSourcesSet() {\r
- return descriptionSourcesSet;\r
- }\r
-\r
- public void setDescriptionSourcesSet(boolean descriptionSourcesSet) {\r
- this.descriptionSourcesSet = descriptionSourcesSet;\r
- }\r
-\r
- public List<OriginalSourceBase<?>> getDerivedUnitSources() {\r
- return derivedUnitSources;\r
- }\r
-\r
- public void setDerivedUnitSources(List<OriginalSourceBase<?>> derivedUnitSources) {\r
- this.derivedUnitSources = derivedUnitSources;\r
- }\r
-\r
- public boolean isDerivedUnitSourcesSet() {\r
- return derivedUnitSourcesSet;\r
- }\r
-\r
- public void setDerivedUnitSourcesSet(boolean derivedUnitSourcesSet) {\r
- this.derivedUnitSourcesSet = derivedUnitSourcesSet;\r
- }\r
-\r
- public boolean isDescriptionGroupSet() {\r
- return descriptionGroupSet;\r
- }\r
-\r
- public void setDescriptionGroupSet(boolean descriptionGroupSet) {\r
- this.descriptionGroupSet = descriptionGroupSet;\r
- }\r
-\r
- public TransactionStatus getTx() {\r
- return tx;\r
- }\r
-\r
- public void setTx(TransactionStatus tx) {\r
- this.tx = tx;\r
- }\r
-\r
- public ICdmApplicationConfiguration getCdmRepository() {\r
- return cdmRepository;\r
- }\r
-\r
- public void setCdmRepository(ICdmApplicationConfiguration cdmRepository) {\r
- this.cdmRepository = cdmRepository;\r
- }\r
-\r
- public Classification getClassification() {\r
- return classification;\r
- }\r
-\r
- public void setClassification(Classification classification) {\r
- this.classification = classification;\r
- }\r
-\r
- public Classification getDefaultClassification() {\r
- if(defaultClassification==null){\r
- final String defaultClassificationAbcd = "Default Classification Specimen Import";\r
- for (Classification classif : cdmRepository.getClassificationService().list(Classification.class, null, null, null, null)){\r
- if (classif.getTitleCache()!=null && classif.getTitleCache().equalsIgnoreCase(defaultClassificationAbcd)\r
- && classif.getCitation()!=null && classif.getCitation().equals(getRef())) {\r
- defaultClassification = classif;\r
- break;\r
- }\r
- }\r
- if(defaultClassification==null){\r
- defaultClassification = Classification.NewInstance(defaultClassificationAbcd);\r
- cdmRepository.getClassificationService().save(defaultClassification);\r
- }\r
- }\r
- return defaultClassification;\r
- }\r
-\r
- public void setDefaultClassification(Classification defaultClassification) {\r
- this.defaultClassification = defaultClassification;\r
- }\r
-\r
- public Reference getRef() {\r
- return ref;\r
- }\r
-\r
- public void setRef(Reference ref) {\r
- this.ref = ref;\r
- }\r
-\r
- public TaxonDescription getDescriptionGroup() {\r
- return descriptionGroup;\r
- }\r
-\r
- public void setDescriptionGroup(TaxonDescription descriptionGroup) {\r
- this.descriptionGroup = descriptionGroup;\r
- }\r
-\r
- public DerivedUnit getDerivedUnitBase() {\r
- return derivedUnitBase;\r
- }\r
-\r
- public void setDerivedUnitBase(DerivedUnit derivedUnitBase) {\r
- this.derivedUnitBase = derivedUnitBase;\r
- }\r
-\r
- /**\r
- * @return the report\r
- */\r
- public SpecimenImportReport getReport() {\r
- if (report == null){\r
- report = new SpecimenImportReport();\r
- }\r
- return report;\r
- }\r
-\r
- /**\r
- * @param report the report to set\r
- */\r
- public void setReport(SpecimenImportReport report) {\r
- this.report = report;\r
- }\r
-\r
-\r
- /**\r
- * @return the dataHolder\r
- */\r
- public SpecimenDataHolder getDataHolder() {\r
- return dataHolder;\r
- }\r
-\r
- /**\r
- * @param dataHolder the dataHolder to set\r
- */\r
- public void setDataHolder(SpecimenDataHolder dataHolder) {\r
- this.dataHolder = dataHolder;\r
- }\r
- public void reset() {\r
- getDataHolder().reset();\r
- // setDerivedUnitBase(null);\r
- }\r
-\r
-}\r
+// $Id$
+/**
+* Copyright (C) 2016 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.io.specimen;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.springframework.transaction.TransactionStatus;
+
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.io.common.CdmImportBase;
+import eu.etaxonomy.cdm.io.common.ImportStateBase;
+import eu.etaxonomy.cdm.io.specimen.abcd206.in.SpecimenImportReport;
+import eu.etaxonomy.cdm.model.agent.Institution;
+import eu.etaxonomy.cdm.model.common.OriginalSourceBase;
+import eu.etaxonomy.cdm.model.description.TaxonDescription;
+import eu.etaxonomy.cdm.model.occurrence.Collection;
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
+import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.taxon.Classification;
+
+/**
+ * @author k.luther
+ * @param <CONFIG>
+ * @date 15.07.2016
+ *
+ */
+public class SpecimenImportStateBase<CONFIG extends SpecimenImportConfiguratorBase, STATE extends SpecimenImportStateBase> extends ImportStateBase<CONFIG , CdmImportBase<CONFIG , STATE >>{
+
+
+ /**
+ * @param config
+ */
+ public SpecimenImportStateBase(CONFIG config) {
+ super(config);
+ // TODO Auto-generated constructor stub
+ }
+
+ private TransactionStatus tx;
+
+ private ICdmApplicationConfiguration cdmRepository;
+ private Classification classification = null;
+ private Classification defaultClassification = null;
+ private Reference ref = null;
+
+ private TaxonDescription descriptionGroup = null;
+ private DerivedUnit derivedUnitBase;
+
+ private SpecimenImportReport report;
+
+ protected SpecimenDataHolder dataHolder;
+
+ private List<OriginalSourceBase<?>> associationRefs = new ArrayList<OriginalSourceBase<?>>();
+ private boolean associationSourcesSet=false;
+ private List<OriginalSourceBase<?>> descriptionRefs = new ArrayList<OriginalSourceBase<?>>();
+ private boolean descriptionSourcesSet=false;
+ private List<OriginalSourceBase<?>> derivedUnitSources = new ArrayList<OriginalSourceBase<?>>();
+ private boolean derivedUnitSourcesSet=false;
+ private boolean descriptionGroupSet = false;
+ protected HashMap<String, Institution> institutions = new HashMap<String, Institution>();
+ protected HashMap<String, Collection> collections= new HashMap<String, Collection>();
+ private HashMap<String,FieldUnit> fieldUnits = new HashMap<String, FieldUnit>();
+
+
+
+
+ /* -----Getter/Setter ---*/
+
+ /**
+ * @return the fieldUnits
+ */
+ public FieldUnit getFieldUnit(String fieldNumber) {
+ return fieldUnits.get(fieldNumber);
+ }
+
+ /**
+ * @param fieldUnits the fieldUnits to set
+ */
+ public void setFieldUnit(FieldUnit fieldUnit) {
+ this.fieldUnits.put(fieldUnit.getFieldNumber(), fieldUnit);
+ }
+
+ @Override
+ public CONFIG getConfig(){
+ return super.getConfig();
+ }
+
+ public List<OriginalSourceBase<?>> getAssociationRefs() {
+ return associationRefs;
+ }
+
+ public void setAssociationRefs(List<OriginalSourceBase<?>> associationRefs) {
+ this.associationRefs = associationRefs;
+ }
+
+ public boolean isAssociationSourcesSet() {
+ return associationSourcesSet;
+ }
+
+ public void setAssociationSourcesSet(boolean associationSourcesSet) {
+ this.associationSourcesSet = associationSourcesSet;
+ }
+
+ public List<OriginalSourceBase<?>> getDescriptionRefs() {
+ return descriptionRefs;
+ }
+
+ public void setDescriptionRefs(List<OriginalSourceBase<?>> descriptionRefs) {
+ this.descriptionRefs = descriptionRefs;
+ }
+
+ public boolean isDescriptionSourcesSet() {
+ return descriptionSourcesSet;
+ }
+
+ public void setDescriptionSourcesSet(boolean descriptionSourcesSet) {
+ this.descriptionSourcesSet = descriptionSourcesSet;
+ }
+
+ public List<OriginalSourceBase<?>> getDerivedUnitSources() {
+ return derivedUnitSources;
+ }
+
+ public void setDerivedUnitSources(List<OriginalSourceBase<?>> derivedUnitSources) {
+ this.derivedUnitSources = derivedUnitSources;
+ }
+
+ public boolean isDerivedUnitSourcesSet() {
+ return derivedUnitSourcesSet;
+ }
+
+ public void setDerivedUnitSourcesSet(boolean derivedUnitSourcesSet) {
+ this.derivedUnitSourcesSet = derivedUnitSourcesSet;
+ }
+
+ public boolean isDescriptionGroupSet() {
+ return descriptionGroupSet;
+ }
+
+ public void setDescriptionGroupSet(boolean descriptionGroupSet) {
+ this.descriptionGroupSet = descriptionGroupSet;
+ }
+
+ public TransactionStatus getTx() {
+ return tx;
+ }
+
+ public void setTx(TransactionStatus tx) {
+ this.tx = tx;
+ }
+
+ public ICdmApplicationConfiguration getCdmRepository() {
+ return cdmRepository;
+ }
+
+ public void setCdmRepository(ICdmApplicationConfiguration cdmRepository) {
+ this.cdmRepository = cdmRepository;
+ }
+
+ public Classification getClassification() {
+ return classification;
+ }
+
+ public void setClassification(Classification classification) {
+ this.classification = classification;
+ }
+
+ public Classification getDefaultClassification() {
+ if(defaultClassification==null){
+ final String defaultClassificationAbcd = "Default Classification Specimen Import";
+ for (Classification classif : cdmRepository.getClassificationService().list(Classification.class, null, null, null, null)){
+ if (classif.getTitleCache()!=null && classif.getTitleCache().equalsIgnoreCase(defaultClassificationAbcd)
+ && classif.getCitation()!=null && classif.getCitation().equals(getRef())) {
+ defaultClassification = classif;
+ break;
+ }
+ }
+ if(defaultClassification==null){
+ defaultClassification = Classification.NewInstance(defaultClassificationAbcd);
+ cdmRepository.getClassificationService().save(defaultClassification);
+ }
+ }
+ return defaultClassification;
+ }
+
+ public void setDefaultClassification(Classification defaultClassification) {
+ this.defaultClassification = defaultClassification;
+ }
+
+ public Reference getRef() {
+ return ref;
+ }
+
+ public void setRef(Reference ref) {
+ this.ref = ref;
+ }
+
+ public TaxonDescription getDescriptionGroup() {
+ return descriptionGroup;
+ }
+
+ public void setDescriptionGroup(TaxonDescription descriptionGroup) {
+ this.descriptionGroup = descriptionGroup;
+ }
+
+ public DerivedUnit getDerivedUnitBase() {
+ return derivedUnitBase;
+ }
+
+ public void setDerivedUnitBase(DerivedUnit derivedUnitBase) {
+ this.derivedUnitBase = derivedUnitBase;
+ }
+
+ /**
+ * @return the report
+ */
+ public SpecimenImportReport getReport() {
+ if (report == null){
+ report = new SpecimenImportReport();
+ }
+ return report;
+ }
+
+ /**
+ * @param report the report to set
+ */
+ public void setReport(SpecimenImportReport report) {
+ this.report = report;
+ }
+
+
+ /**
+ * @return the dataHolder
+ */
+ public SpecimenDataHolder getDataHolder() {
+ return dataHolder;
+ }
+
+ /**
+ * @param dataHolder the dataHolder to set
+ */
+ public void setDataHolder(SpecimenDataHolder dataHolder) {
+ this.dataHolder = dataHolder;
+ }
+ public void reset() {
+ getDataHolder().reset();
+ // setDerivedUnitBase(null);
+ }
+
+}
-// $Id$\r
-/**\r
-* Copyright (C) 2015 EDIT\r
-* European Distributed Institute of Taxonomy\r
-* http://www.e-taxonomy.eu\r
-*\r
-* The contents of this file are subject to the Mozilla Public License Version 1.1\r
-* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/\r
-package eu.etaxonomy.cdm.io.specimen.abcd206.in;\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.net.URI;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
-\r
-import org.apache.http.client.ClientProtocolException;\r
-import org.apache.log4j.Logger;\r
-import org.w3c.dom.Element;\r
-\r
-import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
-import eu.etaxonomy.cdm.ext.occurrence.OccurenceQuery;\r
-import eu.etaxonomy.cdm.ext.occurrence.bioCase.BioCaseQueryServiceWrapper;\r
-\r
-/**\r
- * @author pplitzner\r
- * @date 16.06.2015\r
- *\r
- */\r
-public class UnitAssociationParser {\r
-\r
- private static final Logger logger = Logger.getLogger(UnitAssociationParser.class);\r
-\r
- private final String prefix;\r
-\r
- private final SpecimenImportReport report;\r
-\r
- private final ICdmApplicationConfiguration cdmAppController;\r
-\r
- public UnitAssociationParser(String prefix, SpecimenImportReport report, ICdmApplicationConfiguration cdmAppController) {\r
- this.prefix = prefix;\r
- this.report = report;\r
- this.cdmAppController = cdmAppController;\r
- }\r
-\r
- public UnitAssociationWrapper parse(Element unitAssociation){\r
- if(prefix.equals("abcd:")){\r
-\r
- }\r
- else if(prefix.equals("abcd21:")){\r
-\r
- }\r
- //unit id\r
- String unitId = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"UnitID"));\r
- if(unitId==null){\r
- unitId = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociatedUnitID"));//abcd 2.0.6\r
- }\r
- //institution code\r
- String institutionCode = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"SourceInstitutionCode"));\r
- if(institutionCode==null){\r
- institutionCode = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociatedUnitSourceInstitutionCode"));//abcd 2.0.6\r
- }\r
- //institution name\r
- String institutionName = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"SourceName"));\r
- if(institutionName==null){\r
- institutionName = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociatedUnitSourceName"));//abcd 2.0.6\r
- }\r
- //data access point\r
- URI datasetAccessPoint = AbcdParseUtility.parseFirstUri(unitAssociation.getElementsByTagName(prefix+"DatasetAccessPoint"), report);\r
- if(datasetAccessPoint==null){\r
- datasetAccessPoint = AbcdParseUtility.parseFirstUri(unitAssociation.getElementsByTagName(prefix+"Comment"), report);//abcd 2.0.6\r
- }\r
- //association type\r
- String associationType = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociationType"));\r
-\r
- String unableToLoadMessage = String.format("Unable to load unit %s from %s", unitId, datasetAccessPoint);\r
- if(unitId!=null && datasetAccessPoint!=null){\r
- BioCaseQueryServiceWrapper serviceWrapper = new BioCaseQueryServiceWrapper();\r
- Set<String[]> unitIds = new HashSet<String[]>();\r
- String[] unitIdArray = {unitId};\r
- unitIds.add(unitIdArray);\r
- OccurenceQuery query = new OccurenceQuery(unitIds);\r
- try {\r
- InputStream inputStream = serviceWrapper.query(query, datasetAccessPoint);\r
- if(inputStream!=null){\r
- UnitAssociationWrapper unitAssociationWrapper = null;\r
- try {\r
- unitAssociationWrapper = AbcdParseUtility.parseUnitsNodeList(inputStream, report);\r
- } catch (Exception e) {\r
- String exceptionMessage = "An exception occurred during parsing of associated units!";\r
- logger.error(exceptionMessage, e);\r
- report.addException(exceptionMessage, e);\r
- }\r
-\r
- if(unitAssociationWrapper!=null){\r
- unitAssociationWrapper.setAssociationType(associationType);\r
- if(unitAssociationWrapper.getAssociatedUnits()!=null && unitAssociationWrapper.getAssociatedUnits().getLength()>1){\r
- String moreThanOneUnitFoundMessage = String.format("More than one unit was found for unit association to %s", unitId);\r
- logger.warn(moreThanOneUnitFoundMessage);\r
- report.addInfoMessage(moreThanOneUnitFoundMessage);\r
- }\r
- }\r
- return unitAssociationWrapper;\r
- }\r
- else{\r
- logger.error(unableToLoadMessage);\r
- report.addInfoMessage(unableToLoadMessage);\r
- }\r
- } catch (ClientProtocolException e) {\r
- logger.error(unableToLoadMessage, e);\r
- report.addInfoMessage(unableToLoadMessage);\r
- } catch (IOException e) {\r
- logger.error(unableToLoadMessage, e);\r
- report.addInfoMessage(unableToLoadMessage);\r
- }\r
- }\r
- else{\r
- report.addInfoMessage(unableToLoadMessage);\r
- }\r
- return null;\r
- }\r
-\r
- public UnitAssociationWrapper parseSiblings(String unitID, URI datasetAccessPoint){\r
-\r
- String unableToLoadMessage = String.format("Unable to load unit %s from %s", unitID, datasetAccessPoint);\r
- if(unitID!=null && datasetAccessPoint!=null){\r
- BioCaseQueryServiceWrapper serviceWrapper = new BioCaseQueryServiceWrapper();\r
-\r
-\r
- OccurenceQuery query = new OccurenceQuery(unitID);\r
-\r
- InputStream inputStream;\r
- try {\r
- inputStream = serviceWrapper.query(query, datasetAccessPoint);\r
-\r
- if(inputStream!=null){\r
- UnitAssociationWrapper unitAssociationWrapper = null;\r
- try {\r
- unitAssociationWrapper = AbcdParseUtility.parseUnitsNodeList(inputStream, report);\r
- } catch (Exception e) {\r
- String exceptionMessage = "An exception occurred during parsing of associated units!";\r
- logger.error(exceptionMessage, e);\r
- report.addException(exceptionMessage, e);\r
- }\r
-\r
- if(unitAssociationWrapper!=null){\r
-\r
- if(unitAssociationWrapper.getAssociatedUnits()!=null && unitAssociationWrapper.getAssociatedUnits().getLength()>1){\r
- String moreThanOneUnitFoundMessage = String.format("More than one unit was found for unit association to %s", unitID);\r
- logger.warn(moreThanOneUnitFoundMessage);\r
- report.addInfoMessage(moreThanOneUnitFoundMessage);\r
- }\r
- }\r
- return unitAssociationWrapper;\r
- }\r
- else{\r
- logger.error(unableToLoadMessage);\r
- report.addInfoMessage(unableToLoadMessage);\r
- }\r
- } catch (ClientProtocolException e1) {\r
- // TODO Auto-generated catch block\r
- e1.printStackTrace();\r
- } catch (IOException e1) {\r
- // TODO Auto-generated catch block\r
- e1.printStackTrace();\r
- }\r
-\r
- }\r
- else{\r
- report.addInfoMessage(unableToLoadMessage);\r
- }\r
- return null;\r
- }\r
-\r
-}\r
+// $Id$
+/**
+* Copyright (C) 2015 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+package eu.etaxonomy.cdm.io.specimen.abcd206.in;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.http.client.ClientProtocolException;
+import org.apache.log4j.Logger;
+import org.w3c.dom.Element;
+
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;
+import eu.etaxonomy.cdm.ext.occurrence.OccurenceQuery;
+import eu.etaxonomy.cdm.ext.occurrence.bioCase.BioCaseQueryServiceWrapper;
+
+/**
+ * @author pplitzner
+ * @date 16.06.2015
+ *
+ */
+public class UnitAssociationParser {
+
+ private static final Logger logger = Logger.getLogger(UnitAssociationParser.class);
+
+ private final String prefix;
+
+ private final SpecimenImportReport report;
+
+ private final ICdmApplicationConfiguration cdmAppController;
+
+ public UnitAssociationParser(String prefix, SpecimenImportReport report, ICdmApplicationConfiguration cdmAppController) {
+ this.prefix = prefix;
+ this.report = report;
+ this.cdmAppController = cdmAppController;
+ }
+
+ public UnitAssociationWrapper parse(Element unitAssociation){
+ if(prefix.equals("abcd:")){
+
+ }
+ else if(prefix.equals("abcd21:")){
+
+ }
+ //unit id
+ String unitId = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"UnitID"));
+ if(unitId==null){
+ unitId = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociatedUnitID"));//abcd 2.0.6
+ }
+ //institution code
+ String institutionCode = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"SourceInstitutionCode"));
+ if(institutionCode==null){
+ institutionCode = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociatedUnitSourceInstitutionCode"));//abcd 2.0.6
+ }
+ //institution name
+ String institutionName = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"SourceName"));
+ if(institutionName==null){
+ institutionName = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociatedUnitSourceName"));//abcd 2.0.6
+ }
+ //data access point
+ URI datasetAccessPoint = AbcdParseUtility.parseFirstUri(unitAssociation.getElementsByTagName(prefix+"DatasetAccessPoint"), report);
+ if(datasetAccessPoint==null){
+ datasetAccessPoint = AbcdParseUtility.parseFirstUri(unitAssociation.getElementsByTagName(prefix+"Comment"), report);//abcd 2.0.6
+ }
+ //association type
+ String associationType = AbcdParseUtility.parseFirstTextContent(unitAssociation.getElementsByTagName(prefix+"AssociationType"));
+
+ String unableToLoadMessage = String.format("Unable to load unit %s from %s", unitId, datasetAccessPoint);
+ if(unitId!=null && datasetAccessPoint!=null){
+ BioCaseQueryServiceWrapper serviceWrapper = new BioCaseQueryServiceWrapper();
+ Set<String[]> unitIds = new HashSet<String[]>();
+ String[] unitIdArray = {unitId};
+ unitIds.add(unitIdArray);
+ OccurenceQuery query = new OccurenceQuery(unitIds);
+ try {
+ InputStream inputStream = serviceWrapper.query(query, datasetAccessPoint);
+ if(inputStream!=null){
+ UnitAssociationWrapper unitAssociationWrapper = null;
+ try {
+ unitAssociationWrapper = AbcdParseUtility.parseUnitsNodeList(inputStream, report);
+ } catch (Exception e) {
+ String exceptionMessage = "An exception occurred during parsing of associated units!";
+ logger.error(exceptionMessage, e);
+ report.addException(exceptionMessage, e);
+ }
+
+ if(unitAssociationWrapper!=null){
+ unitAssociationWrapper.setAssociationType(associationType);
+ if(unitAssociationWrapper.getAssociatedUnits()!=null && unitAssociationWrapper.getAssociatedUnits().getLength()>1){
+ String moreThanOneUnitFoundMessage = String.format("More than one unit was found for unit association to %s", unitId);
+ logger.warn(moreThanOneUnitFoundMessage);
+ report.addInfoMessage(moreThanOneUnitFoundMessage);
+ }
+ }
+ return unitAssociationWrapper;
+ }
+ else{
+ logger.error(unableToLoadMessage);
+ report.addInfoMessage(unableToLoadMessage);
+ }
+ } catch (ClientProtocolException e) {
+ logger.error(unableToLoadMessage, e);
+ report.addInfoMessage(unableToLoadMessage);
+ } catch (IOException e) {
+ logger.error(unableToLoadMessage, e);
+ report.addInfoMessage(unableToLoadMessage);
+ }
+ }
+ else{
+ report.addInfoMessage(unableToLoadMessage);
+ }
+ return null;
+ }
+
+ public UnitAssociationWrapper parseSiblings(String unitID, URI datasetAccessPoint){
+
+ String unableToLoadMessage = String.format("Unable to load unit %s from %s", unitID, datasetAccessPoint);
+ if(unitID!=null && datasetAccessPoint!=null){
+ BioCaseQueryServiceWrapper serviceWrapper = new BioCaseQueryServiceWrapper();
+
+
+ OccurenceQuery query = new OccurenceQuery(unitID);
+
+ InputStream inputStream;
+ try {
+ inputStream = serviceWrapper.query(query, datasetAccessPoint);
+
+ if(inputStream!=null){
+ UnitAssociationWrapper unitAssociationWrapper = null;
+ try {
+ unitAssociationWrapper = AbcdParseUtility.parseUnitsNodeList(inputStream, report);
+ } catch (Exception e) {
+ String exceptionMessage = "An exception occurred during parsing of associated units!";
+ logger.error(exceptionMessage, e);
+ report.addException(exceptionMessage, e);
+ }
+
+ if(unitAssociationWrapper!=null){
+
+ if(unitAssociationWrapper.getAssociatedUnits()!=null && unitAssociationWrapper.getAssociatedUnits().getLength()>1){
+ String moreThanOneUnitFoundMessage = String.format("More than one unit was found for unit association to %s", unitID);
+ logger.warn(moreThanOneUnitFoundMessage);
+ report.addInfoMessage(moreThanOneUnitFoundMessage);
+ }
+ }
+ return unitAssociationWrapper;
+ }
+ else{
+ logger.error(unableToLoadMessage);
+ report.addInfoMessage(unableToLoadMessage);
+ }
+ } catch (ClientProtocolException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ } catch (IOException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ }
+ else{
+ report.addInfoMessage(unableToLoadMessage);
+ }
+ return null;
+ }
+
+}