-// $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.File;
-import java.io.FileNotFoundException;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import org.apache.log4j.Logger;
-
-import eu.etaxonomy.cdm.io.specimen.SpecimenImportConfiguratorBase;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-
-/**
- * Gathers information about the ABCD import and presents them in a suitable way.
- * @author pplitzner
- * @date Jan 23, 2015
- *
- */
-public class SpecimenImportReport {
-
- static private final Logger logger = Logger.getLogger(SpecimenImportReport.class);
-
-
- private final List<Taxon> createdTaxa = new ArrayList<Taxon>();
- private final Map<Taxon, List<UnitIdSpecimen>> taxonToAssociatedSpecimens = new HashMap<Taxon, List<UnitIdSpecimen>>();
- private final Map<UnitIdSpecimen, List<UnitIdSpecimen>> derivateMap = new HashMap<UnitIdSpecimen, List<UnitIdSpecimen>>();
- private final List<UnitIdSpecimen> alreadyExistingSpecimens = new ArrayList<UnitIdSpecimen>();
- private final List<TaxonNameBase<?, ?>> createdNames = new ArrayList<TaxonNameBase<?,?>>();
- private final List<TaxonNode> createdTaxonNodes = new ArrayList<TaxonNode>();
- private final List<String> infoMessages = new ArrayList<String>();
-
- public void addTaxon(Taxon taxon){
- createdTaxa.add(taxon);
- }
-
- public void addName(TaxonNameBase<?, ?> taxonName){
- createdNames.add(taxonName);
- }
-
- public void addTaxonNode(TaxonNode taxonNode){
- createdTaxonNodes.add(taxonNode);
- }
-
- public void addDerivate(DerivedUnit parent, SpecimenImportConfiguratorBase config){
- addDerivate(parent, null, config);
- }
-
- public void addDerivate(DerivedUnit parent, DerivedUnit child, SpecimenImportConfiguratorBase config){
- UnitIdSpecimen parentUnitIdSpecimen = new UnitIdSpecimen(SpecimenImportUtility.getUnitID(parent, config), parent);
- List<UnitIdSpecimen> children = derivateMap.get(parentUnitIdSpecimen);
- if(children==null){
- children = new ArrayList<UnitIdSpecimen>();
- }
- if(child!=null){
- children.add(new UnitIdSpecimen(SpecimenImportUtility.getUnitID(child, config), child));
- }
- derivateMap.put(parentUnitIdSpecimen, children);
- }
-
- public void addIndividualAssociation(Taxon taxon, String derivedUnitId, DerivedUnit derivedUnitBase) {
- UnitIdSpecimen derivedUnitIdSpecimen = new UnitIdSpecimen(derivedUnitId, derivedUnitBase);
- List<UnitIdSpecimen> associatedSpecimens = taxonToAssociatedSpecimens.get(taxon);
- if(associatedSpecimens==null){
- associatedSpecimens = new ArrayList<UnitIdSpecimen>();
- }
- associatedSpecimens.add(derivedUnitIdSpecimen);
- taxonToAssociatedSpecimens.put(taxon, associatedSpecimens);
- }
-
- public void addAlreadyExistingSpecimen(String unitId, DerivedUnit derivedUnit){
- alreadyExistingSpecimens.add(new UnitIdSpecimen(unitId, derivedUnit));
- }
-
- public void addException(String message, Exception e) {
- StringWriter errors = new StringWriter();
- e.printStackTrace(new PrintWriter(errors));
- infoMessages.add(message+"\n"+e.getMessage()+"\n"+errors.toString());
- }
-
- public void addInfoMessage(String message) {
- infoMessages.add(message);
- }
-
- public void printReport(URI reportUri) {
- PrintStream out;
- if(reportUri != null){
- try {
- out = new PrintStream(new File(reportUri));
- } catch (FileNotFoundException e) {
- logger.warn("Report file could not be found.");
- out = System.out;
- }
- }
- else{
- out = System.out;
- }
- printReport(out);
- }
-
-
- public void printReport(PrintStream out) {
-
- out.println("++++++++Import Report+++++++++");
- //all specimens
- Set<UnitIdSpecimen> allSpecimens = new HashSet<UnitIdSpecimen>();
- for (Entry<UnitIdSpecimen, List<UnitIdSpecimen>> entry : derivateMap.entrySet()) {
- UnitIdSpecimen parentSpecimen = entry.getKey();
- allSpecimens.add(parentSpecimen);
- for (UnitIdSpecimen childSpecimen : entry.getValue()) {
- allSpecimens.add(childSpecimen);
- }
- }
- out.println("Specimens created: "+allSpecimens.size());
- Map<SpecimenOrObservationType, Integer> specimenTypeToCount = new HashMap<SpecimenOrObservationType, Integer>();
- for (UnitIdSpecimen unitIdSpecimen : allSpecimens) {
- incrementSpecimenTypeCount(specimenTypeToCount, unitIdSpecimen);
- }
- for(Entry<SpecimenOrObservationType, Integer> entry:specimenTypeToCount.entrySet()){
- SpecimenOrObservationType type = entry.getKey();
- out.println(type+": "+entry.getValue());
- }
- //not imported
- out.println("Skipped/not imported: "+alreadyExistingSpecimens.size());
- out.println("\n");
-
- out.println("Imported unit ids");
- for (UnitIdSpecimen unitIdSpecimen : allSpecimens) {
- out.print(unitIdSpecimen.unitId+", ");
- }
- out.println("\n");
-
- out.println("Ignored unit ids");
- for (UnitIdSpecimen unitIdSpecimen : alreadyExistingSpecimens) {
- out.print(unitIdSpecimen.unitId+", ");
- }
- out.println("\n");
-
- //taxon name
- out.println("---Created Taxon Names ("+createdNames.size()+")---");
- for (TaxonNameBase<?, ?> taxonName : createdNames) {
- out.println(taxonName.getTitleCache());
- }
- out.println("\n");
-
- //taxa
- out.println("---Created Taxa ("+createdTaxa.size()+")---");
- for (Taxon taxon : createdTaxa) {
- out.println(taxon.getTitleCache());
- }
- out.println("\n");
-
- //taxon nodes
- out.println("---Created Taxon Nodes ("+createdTaxonNodes.size()+")---");
- for (TaxonNode taxonNode : createdTaxonNodes) {
- String nodeString = taxonNode.toString();
- if(taxonNode.getTaxon()!=null){
- nodeString += " ("+taxonNode.getTaxon().getTitleCache()+")";
- }
- if(taxonNode.getParent()!=null){
- nodeString += " with parent "+taxonNode.getParent();
- if(taxonNode.getParent().getTaxon()!=null){
- nodeString += " ("+taxonNode.getParent().getTaxon().getTitleCache()+")";
- }
- }
- out.println(nodeString);
- }
- out.println("\n");
-
- //not imported
- out.println("---Already existing specimen/not imported ("+alreadyExistingSpecimens.size()+")---");
- for(UnitIdSpecimen specimen:alreadyExistingSpecimens){
- out.println(formatSpecimen(specimen));
- }
- out.println("\n");
-
- //taxa with associated specimens
- out.println("---Taxa with associated specimens ("+taxonToAssociatedSpecimens.size()+")---");
- for(Entry<Taxon, List<UnitIdSpecimen>> entry:taxonToAssociatedSpecimens.entrySet()){
- Taxon taxon = entry.getKey();
- List<UnitIdSpecimen> specimens = entry.getValue();
- out.println(taxon.getTitleCache() + " ("+specimens.size()+")");
- for (UnitIdSpecimen derivedUnit : specimens) {
- out.println("\t- "+formatSpecimen(derivedUnit));
- //check for derivatives
- List<UnitIdSpecimen> list = derivateMap.get(derivedUnit);
- for (UnitIdSpecimen derivate : list) {
- out.println("\t\t- "+formatSpecimen(derivate));
- }
- }
- }
- out.println("\n");
- out.println("\n");
- //info messages
- out.println("---Info messages---");
- for(String message:infoMessages){
- out.println(message);
- out.println("---");
- }
- if(out!=System.out){
- out.close();
- }
- }
-
- private void incrementSpecimenTypeCount(Map<SpecimenOrObservationType, Integer> specimenTypeToCount,
- UnitIdSpecimen specimen) {
- SpecimenOrObservationType specimenType = specimen.getSpecimen().getRecordBasis();
- Integer count = specimenTypeToCount.get(specimenType);
- if(count==null){
- count = 1;
- }
- else{
- count++;
- }
- specimenTypeToCount.put(specimenType, count);
- }
-
- private String formatSpecimen(UnitIdSpecimen specimen){
- return "("+specimen.getUnitId()+") ["+specimen.getSpecimen().getRecordBasis()+"] "+specimen.getSpecimen().getTitleCache();
- }
-
- private class UnitIdSpecimen{
- private final String unitId;
- private final SpecimenOrObservationBase<?> specimen;
-
-
- public UnitIdSpecimen(String unitId, SpecimenOrObservationBase<?> specimen) {
- super();
- this.unitId = unitId;
- this.specimen = specimen;
- }
- public String getUnitId() {
- return unitId;
- }
- public SpecimenOrObservationBase<?> getSpecimen() {
- return specimen;
- }
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((specimen == null) ? 0 : specimen.hashCode());
- result = prime * result + ((unitId == null) ? 0 : unitId.hashCode());
- return result;
- }
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- UnitIdSpecimen other = (UnitIdSpecimen) obj;
- if (specimen == null) {
- if (other.specimen != null) {
- return false;
- }
- } else if (!specimen.equals(other.specimen)) {
- return false;
- }
- if (unitId == null) {
- if (other.unitId != null) {
- return false;
- }
- } else if (!unitId.equals(other.unitId)) {
- return false;
- }
- return true;
- }
-
- }
-
-}
+// $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.File;\r
+import java.io.FileNotFoundException;\r
+import java.io.PrintStream;\r
+import java.io.PrintWriter;\r
+import java.io.StringWriter;\r
+import java.net.URI;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Map.Entry;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.io.specimen.SpecimenImportConfiguratorBase;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+\r
+/**\r
+ * Gathers information about the ABCD import and presents them in a suitable way.\r
+ * @author pplitzner\r
+ * @date Jan 23, 2015\r
+ *\r
+ */\r
+public class SpecimenImportReport {\r
+\r
+ static private final Logger logger = Logger.getLogger(SpecimenImportReport.class);\r
+\r
+\r
+ private final List<Taxon> createdTaxa = new ArrayList<Taxon>();\r
+ private final Map<Taxon, List<UnitIdSpecimen>> taxonToAssociatedSpecimens = new HashMap<Taxon, List<UnitIdSpecimen>>();\r
+ private final Map<UnitIdSpecimen, List<UnitIdSpecimen>> derivateMap = new HashMap<UnitIdSpecimen, List<UnitIdSpecimen>>();\r
+ private final List<UnitIdSpecimen> alreadyExistingSpecimens = new ArrayList<UnitIdSpecimen>();\r
+ private final List<TaxonNameBase<?, ?>> createdNames = new ArrayList<TaxonNameBase<?,?>>();\r
+ private final List<TaxonNode> createdTaxonNodes = new ArrayList<TaxonNode>();\r
+ private final List<String> infoMessages = new ArrayList<String>();\r
+\r
+ public void addTaxon(Taxon taxon){\r
+ createdTaxa.add(taxon);\r
+ }\r
+\r
+ public void addName(TaxonNameBase<?, ?> taxonName){\r
+ createdNames.add(taxonName);\r
+ }\r
+\r
+ public void addTaxonNode(TaxonNode taxonNode){\r
+ createdTaxonNodes.add(taxonNode);\r
+ }\r
+\r
+ public void addDerivate(DerivedUnit parent, SpecimenImportConfiguratorBase config){\r
+ addDerivate(parent, null, config);\r
+ }\r
+\r
+ public void addDerivate(DerivedUnit parent, DerivedUnit child, SpecimenImportConfiguratorBase config){\r
+ UnitIdSpecimen parentUnitIdSpecimen = new UnitIdSpecimen(SpecimenImportUtility.getUnitID(parent, config), parent);\r
+ List<UnitIdSpecimen> children = derivateMap.get(parentUnitIdSpecimen);\r
+ if(children==null){\r
+ children = new ArrayList<UnitIdSpecimen>();\r
+ }\r
+ if(child!=null){\r
+ children.add(new UnitIdSpecimen(SpecimenImportUtility.getUnitID(child, config), child));\r
+ }\r
+ derivateMap.put(parentUnitIdSpecimen, children);\r
+ }\r
+\r
+ public void addIndividualAssociation(Taxon taxon, String derivedUnitId, DerivedUnit derivedUnitBase) {\r
+ UnitIdSpecimen derivedUnitIdSpecimen = new UnitIdSpecimen(derivedUnitId, derivedUnitBase);\r
+ List<UnitIdSpecimen> associatedSpecimens = taxonToAssociatedSpecimens.get(taxon);\r
+ if(associatedSpecimens==null){\r
+ associatedSpecimens = new ArrayList<UnitIdSpecimen>();\r
+ }\r
+ associatedSpecimens.add(derivedUnitIdSpecimen);\r
+ taxonToAssociatedSpecimens.put(taxon, associatedSpecimens);\r
+ }\r
+\r
+ public void addAlreadyExistingSpecimen(String unitId, DerivedUnit derivedUnit){\r
+ alreadyExistingSpecimens.add(new UnitIdSpecimen(unitId, derivedUnit));\r
+ }\r
+\r
+ public void addException(String message, Exception e) {\r
+ StringWriter errors = new StringWriter();\r
+ e.printStackTrace(new PrintWriter(errors));\r
+ infoMessages.add(message+"\n"+e.getMessage()+"\n"+errors.toString());\r
+ }\r
+\r
+ public void addInfoMessage(String message) {\r
+ infoMessages.add(message);\r
+ }\r
+\r
+ public void printReport(URI reportUri) {\r
+ PrintStream out;\r
+ if(reportUri != null){\r
+ try {\r
+ out = new PrintStream(new File(reportUri));\r
+ } catch (FileNotFoundException e) {\r
+ logger.warn("Report file could not be found.");\r
+ out = System.out;\r
+ }\r
+ }\r
+ else{\r
+ out = System.out;\r
+ }\r
+ printReport(out);\r
+ }\r
+\r
+\r
+ public void printReport(PrintStream out) {\r
+\r
+ out.println("++++++++Import Report+++++++++");\r
+ //all specimens\r
+ Set<UnitIdSpecimen> allSpecimens = new HashSet<UnitIdSpecimen>();\r
+ for (Entry<UnitIdSpecimen, List<UnitIdSpecimen>> entry : derivateMap.entrySet()) {\r
+ UnitIdSpecimen parentSpecimen = entry.getKey();\r
+ allSpecimens.add(parentSpecimen);\r
+ for (UnitIdSpecimen childSpecimen : entry.getValue()) {\r
+ allSpecimens.add(childSpecimen);\r
+ }\r
+ }\r
+ out.println("Specimens created: "+allSpecimens.size());\r
+ Map<SpecimenOrObservationType, Integer> specimenTypeToCount = new HashMap<SpecimenOrObservationType, Integer>();\r
+ for (UnitIdSpecimen unitIdSpecimen : allSpecimens) {\r
+ incrementSpecimenTypeCount(specimenTypeToCount, unitIdSpecimen);\r
+ }\r
+ for(Entry<SpecimenOrObservationType, Integer> entry:specimenTypeToCount.entrySet()){\r
+ SpecimenOrObservationType type = entry.getKey();\r
+ out.println(type+": "+entry.getValue());\r
+ }\r
+ //not imported\r
+ out.println("Skipped/not imported: "+alreadyExistingSpecimens.size());\r
+ out.println("\n");\r
+\r
+ out.println("Imported unit ids");\r
+ for (UnitIdSpecimen unitIdSpecimen : allSpecimens) {\r
+ out.print(unitIdSpecimen.unitId+", ");\r
+ }\r
+ out.println("\n");\r
+\r
+ out.println("Ignored unit ids");\r
+ for (UnitIdSpecimen unitIdSpecimen : alreadyExistingSpecimens) {\r
+ out.print(unitIdSpecimen.unitId+", ");\r
+ }\r
+ out.println("\n");\r
+\r
+ //taxon name\r
+ out.println("---Created Taxon Names ("+createdNames.size()+")---");\r
+ for (TaxonNameBase<?, ?> taxonName : createdNames) {\r
+ out.println(taxonName.getTitleCache());\r
+ }\r
+ out.println("\n");\r
+\r
+ //taxa\r
+ out.println("---Created Taxa ("+createdTaxa.size()+")---");\r
+ for (Taxon taxon : createdTaxa) {\r
+ out.println(taxon.getTitleCache());\r
+ }\r
+ out.println("\n");\r
+\r
+ //taxon nodes\r
+ out.println("---Created Taxon Nodes ("+createdTaxonNodes.size()+")---");\r
+ for (TaxonNode taxonNode : createdTaxonNodes) {\r
+ String nodeString = taxonNode.toString();\r
+ if(taxonNode.getTaxon()!=null){\r
+ nodeString += " ("+taxonNode.getTaxon().getTitleCache()+")";\r
+ }\r
+ if(taxonNode.getParent()!=null){\r
+ nodeString += " with parent "+taxonNode.getParent();\r
+ if(taxonNode.getParent().getTaxon()!=null){\r
+ nodeString += " ("+taxonNode.getParent().getTaxon().getTitleCache()+")";\r
+ }\r
+ }\r
+ out.println(nodeString);\r
+ }\r
+ out.println("\n");\r
+\r
+ //not imported\r
+ out.println("---Already existing specimen/not imported ("+alreadyExistingSpecimens.size()+")---");\r
+ for(UnitIdSpecimen specimen:alreadyExistingSpecimens){\r
+ out.println(formatSpecimen(specimen));\r
+ }\r
+ out.println("\n");\r
+\r
+ //taxa with associated specimens\r
+ out.println("---Taxa with associated specimens ("+taxonToAssociatedSpecimens.size()+")---");\r
+ for(Entry<Taxon, List<UnitIdSpecimen>> entry:taxonToAssociatedSpecimens.entrySet()){\r
+ Taxon taxon = entry.getKey();\r
+ List<UnitIdSpecimen> specimens = entry.getValue();\r
+ out.println(taxon.getTitleCache() + " ("+specimens.size()+")");\r
+ for (UnitIdSpecimen derivedUnit : specimens) {\r
+ out.println("\t- "+formatSpecimen(derivedUnit));\r
+ //check for derivatives\r
+ List<UnitIdSpecimen> list = derivateMap.get(derivedUnit);\r
+ for (UnitIdSpecimen derivate : list) {\r
+ out.println("\t\t- "+formatSpecimen(derivate));\r
+ }\r
+ }\r
+ }\r
+ out.println("\n");\r
+ out.println("\n");\r
+ //info messages\r
+ out.println("---Info messages---");\r
+ for(String message:infoMessages){\r
+ out.println(message);\r
+ out.println("---");\r
+ }\r
+ if(out!=System.out){\r
+ out.close();\r
+ }\r
+ }\r
+\r
+ private void incrementSpecimenTypeCount(Map<SpecimenOrObservationType, Integer> specimenTypeToCount,\r
+ UnitIdSpecimen specimen) {\r
+ SpecimenOrObservationType specimenType = specimen.getSpecimen().getRecordBasis();\r
+ Integer count = specimenTypeToCount.get(specimenType);\r
+ if(count==null){\r
+ count = 1;\r
+ }\r
+ else{\r
+ count++;\r
+ }\r
+ specimenTypeToCount.put(specimenType, count);\r
+ }\r
+\r
+ private String formatSpecimen(UnitIdSpecimen specimen){\r
+ return "("+specimen.getUnitId()+") ["+specimen.getSpecimen().getRecordBasis()+"] "+specimen.getSpecimen().getTitleCache();\r
+ }\r
+\r
+ private class UnitIdSpecimen{\r
+ private final String unitId;\r
+ private final SpecimenOrObservationBase<?> specimen;\r
+\r
+\r
+ public UnitIdSpecimen(String unitId, SpecimenOrObservationBase<?> specimen) {\r
+ super();\r
+ this.unitId = unitId;\r
+ this.specimen = specimen;\r
+ }\r
+ public String getUnitId() {\r
+ return unitId;\r
+ }\r
+ public SpecimenOrObservationBase<?> getSpecimen() {\r
+ return specimen;\r
+ }\r
+ @Override\r
+ public int hashCode() {\r
+ final int prime = 31;\r
+ int result = 1;\r
+ result = prime * result + ((specimen == null) ? 0 : specimen.hashCode());\r
+ result = prime * result + ((unitId == null) ? 0 : unitId.hashCode());\r
+ return result;\r
+ }\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ if (this == obj) {\r
+ return true;\r
+ }\r
+ if (obj == null) {\r
+ return false;\r
+ }\r
+ if (getClass() != obj.getClass()) {\r
+ return false;\r
+ }\r
+ UnitIdSpecimen other = (UnitIdSpecimen) obj;\r
+ if (specimen == null) {\r
+ if (other.specimen != null) {\r
+ return false;\r
+ }\r
+ } else if (!specimen.equals(other.specimen)) {\r
+ return false;\r
+ }\r
+ if (unitId == null) {\r
+ if (other.unitId != null) {\r
+ return false;\r
+ }\r
+ } else if (!unitId.equals(other.unitId)) {\r
+ return false;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ }\r
+\r
+}\r