cleanup
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / specimen / SpecimenImportBase.java
index 95e8ee3a7f23941e2f7b9341f21ac0af67fe958a..9856e52a465f7ce6bf801b76266ba397090af5ee 100755 (executable)
@@ -6,10 +6,8 @@
 * 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.EnumSet;
 import java.util.HashMap;
@@ -19,12 +17,13 @@ import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
 
-import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import eu.etaxonomy.cdm.api.application.ICdmRepository;
-import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
 import eu.etaxonomy.cdm.api.service.config.FindOccurrencesConfigurator;
 import eu.etaxonomy.cdm.api.service.pager.Pager;
+import eu.etaxonomy.cdm.facade.DerivedUnitFacade;
 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
 import eu.etaxonomy.cdm.io.common.CdmImportBase;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator;
@@ -46,6 +45,7 @@ import eu.etaxonomy.cdm.model.description.TaxonDescription;
 import eu.etaxonomy.cdm.model.name.INonViralName;
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
 import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.RankClass;
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
 import eu.etaxonomy.cdm.model.name.TaxonName;
@@ -71,7 +71,6 @@ import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
 import eu.etaxonomy.cdm.strategy.parser.ParserProblem;
 import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
 
-
 /**
  * @author p.kelbert
  * @since 20.10.2008
@@ -80,7 +79,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
         extends CdmImportBase<CONFIG, STATE> {
 
     private static final long serialVersionUID = 4423065367998125678L;
-    private static final Logger logger = LogManager.getLogger(SpecimenImportBase.class);
+    private static final Logger logger = LogManager.getLogger();
 
        protected static final UUID SPECIMEN_SCAN_TERM = UUID.fromString("acda15be-c0e2-4ea8-8783-b9b0c4ad7f03");
 
@@ -89,19 +88,14 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
        protected Map<String, DefinedTerm> kindOfUnitsMap;
 
 
-
        @Override
     protected abstract void doInvoke(STATE state);
 
        /**
         * Handle a single unit
-        * @param state
-        * @param item
         */
        protected abstract void handleSingleUnit(STATE state, Object item) ;
 
-
-
        protected TaxonName getOrCreateTaxonName(String scientificName, Rank rank, boolean preferredFlag, STATE state, int unitIndexInAbcdFile){
            TaxonName taxonName = null;
         SpecimenImportConfiguratorBase<?,?,?> config = state.getConfig();
@@ -183,7 +177,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
         if (taxonName != null){
             state.names.put(taxonName.getNameCache(), taxonName);
         }
-        if(!taxonName.isPersited()) {
+        if(!taxonName.isPersisted()) {
             save(taxonName, state);
         }
         return taxonName;
@@ -193,22 +187,27 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                Set<TaxonName> namesWithAcceptedTaxa = new HashSet<>();
                List<TaxonName> namesWithAcceptedTaxaInClassification = new ArrayList<>();
                for (TaxonName name : names) {
-                   if(!name.getTaxa().isEmpty()){
-                       Set<Taxon> taxa = name.getTaxa();
-                       for (Taxon taxon:taxa){
-                           if (!taxon.getTaxonNodes().isEmpty()){
+                   if(!name.getTaxonBases().isEmpty()){
+                       Set<TaxonBase> taxa = name.getTaxonBases();
+                       for (TaxonBase taxonBase:taxa){
+                           Taxon acceptedTaxon= null;
+                           if (taxonBase instanceof Synonym) {
+                               Synonym syn = (Synonym) taxonBase;
+                               acceptedTaxon = syn.getAcceptedTaxon();
+                           }else {
+                               acceptedTaxon = (Taxon)taxonBase;
+                           }
+                           if (!(acceptedTaxon).getTaxonNodes().isEmpty()){
                                //use only taxa included in a classification
-                               for (TaxonNode node:taxon.getTaxonNodes()){
+                               for (TaxonNode node:(acceptedTaxon).getTaxonNodes()){
                                    if (state.getClassification() != null && node.getClassification().equals(state.getClassification())){
                                        namesWithAcceptedTaxaInClassification.add(name);
                                    }else {
                                        namesWithAcceptedTaxa.add(name);
                                    }
                                }
-
                            }
                        }
-
                    }
                }
                String message = String.format("More than one taxon name was found for %s, maybe in other classifications!", scientificName);
@@ -232,25 +231,25 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    }
                    return namesWithAcceptedTaxa.iterator().next();
                }
-               //no names with accepted taxa found -> check accepted taxa of synonyms
-               List<Taxon> taxaFromSynonyms = new ArrayList<>();
-               for (TaxonName name : names) {
-                   Set<TaxonBase> taxonBases = name.getTaxonBases();
-                   for (TaxonBase taxonBase : taxonBases) {
-                       if(taxonBase.isInstanceOf(Synonym.class)){
-                           Synonym synonym = HibernateProxyHelper.deproxy(taxonBase, Synonym.class);
-                           taxaFromSynonyms.add(synonym.getAcceptedTaxon());
-                       }
-                   }
-               }
-               if(taxaFromSynonyms.size()>0){
-                   if(taxaFromSynonyms.size()>1){
-                       state.getReport().addInfoMessage(message);
-                       logger.warn(message);
-                       return null;
-                   }
-                   return taxaFromSynonyms.iterator().next().getName();
-               }
+//             //no names with accepted taxa found -> check accepted taxa of synonyms -> this is handled in the first block now!
+//             List<Taxon> taxaFromSynonyms = new ArrayList<>();
+//             for (TaxonName name : names) {
+//                 Set<TaxonBase> taxonBases = name.getTaxonBases();
+//                 for (TaxonBase taxonBase : taxonBases) {
+//                     if(taxonBase.isInstanceOf(Synonym.class)){
+//                         Synonym synonym = HibernateProxyHelper.deproxy(taxonBase, Synonym.class);
+//                         taxaFromSynonyms.add(synonym.getAcceptedTaxon());
+//                     }
+//                 }
+//             }
+//             if(taxaFromSynonyms.size()>0){
+//                 if(taxaFromSynonyms.size()>1){
+//                     state.getReport().addInfoMessage(message);
+//                     logger.warn(message);
+//                     return null;
+//                 }
+//                 return taxaFromSynonyms.iterator().next().getName();
+//             }
                //no accepted and no synonyms -> return one of the names and create a new taxon
                if (names.isEmpty()){
                    return null;
@@ -258,6 +257,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    return names.iterator().next();
                }
            }
+
         /**
             * Parse automatically the scientific name
             * @param scientificName the scientific name to parse
@@ -265,7 +265,6 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
             * @param report the import report
             * @return a parsed name
             */
-
            protected TaxonName parseScientificName(String scientificName, STATE state, SpecimenImportReport report, Rank rank) {
 
                NonViralNameParserImpl nvnpi = NonViralNameParserImpl.NewInstance();
@@ -551,11 +550,8 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
             * https://dev.e-taxonomy.eu/redmine/issues/3726
             *
             * Not yet complete.
-            *
-            * @param cdmBase
-            * @param state
             */
-           protected UUID save(CdmBase cdmBase, SpecimenImportStateBase state) {
+           protected UUID save(CdmBase cdmBase, SpecimenImportStateBase<?,?> state) {
                ICdmRepository cdmRepository = state.getConfig().getCdmAppController();
                if (cdmRepository == null){
                    cdmRepository = this;
@@ -564,8 +560,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                if (cdmBase.isInstanceOf(LanguageString.class)){
                    return cdmRepository.getTermService().saveLanguageData(CdmBase.deproxy(cdmBase, LanguageString.class));
                }else if (cdmBase.isInstanceOf(SpecimenOrObservationBase.class)){
-                   SpecimenOrObservationBase specimen = CdmBase.deproxy(cdmBase, SpecimenOrObservationBase.class);
-
+                   SpecimenOrObservationBase<?> specimen = CdmBase.deproxy(cdmBase, SpecimenOrObservationBase.class);
                    return cdmRepository.getOccurrenceService().saveOrUpdate(specimen);
                }else if (cdmBase.isInstanceOf(Reference.class)){
                    return cdmRepository.getReferenceService().saveOrUpdate(CdmBase.deproxy(cdmBase, Reference.class));
@@ -576,8 +571,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                }else if (cdmBase.isInstanceOf(Collection.class)){
                    return cdmRepository.getCollectionService().saveOrUpdate(CdmBase.deproxy(cdmBase, Collection.class));
                }else if (cdmBase.isInstanceOf(DescriptionBase.class)){
-                   DescriptionBase description = CdmBase.deproxy(cdmBase, DescriptionBase.class);
-
+                   DescriptionBase<?> description = CdmBase.deproxy(cdmBase, DescriptionBase.class);
                    return cdmRepository.getDescriptionService().saveOrUpdate(description);
                }else if (cdmBase.isInstanceOf(TaxonBase.class)){
                    return cdmRepository.getTaxonService().saveOrUpdate(CdmBase.deproxy(cdmBase, TaxonBase.class));
@@ -588,11 +582,9 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
             }else{
                    throw new IllegalArgumentException("Class not supported in save method: " + CdmBase.deproxy(cdmBase, CdmBase.class).getClass().getSimpleName());
                }
-
            }
 
-
-           protected SpecimenOrObservationBase findExistingSpecimen(String unitId, SpecimenImportStateBase state){
+           protected SpecimenOrObservationBase<?> findExistingSpecimen(String unitId, SpecimenImportStateBase<?,?> state){
                ICdmRepository cdmAppController = state.getConfig().getCdmAppController();
                if(cdmAppController==null){
                    cdmAppController = this;
@@ -605,7 +597,8 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                commitTransaction(state.getTx());
                state.setTx(startTransaction());
                try{
-                       Pager<SpecimenOrObservationBase> existingSpecimens = cdmAppController.getOccurrenceService().findByTitle(config);
+                       @SuppressWarnings("rawtypes")
+                Pager<SpecimenOrObservationBase> existingSpecimens = cdmAppController.getOccurrenceService().findByTitle(config);
                        if(!existingSpecimens.getRecords().isEmpty()){
                            if(existingSpecimens.getRecords().size()==1){
                                return existingSpecimens.getRecords().iterator().next();
@@ -669,7 +662,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
             * @return the Institution (existing or new)
             */
            protected Institution getInstitution(String institutionCode, STATE state) {
-               SpecimenImportConfiguratorBase config = state.getConfig();
+               SpecimenImportConfiguratorBase<?,?,?> config = state.getConfig();
                Institution institution=null;
                institution = (Institution)state.institutions.get(institutionCode);
                if (institution != null){
@@ -703,10 +696,9 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    institution = Institution.NewInstance();
                    institution.setCode(institutionCode);
                    institution.setTitleCache(institutionCode, true);
-                   UUID uuid = save(institution, state);
+                   save(institution, state);
                }
 
-
                state.institutions.put(institutionCode, institution);
                return institution;
            }
@@ -719,7 +711,8 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
             * @return the Collection (existing or new)
             */
            protected Collection getCollection(Institution institution, String collectionCode, STATE state) {
-               SpecimenImportConfiguratorBase config = state.getConfig();
+
+               SpecimenImportConfiguratorBase<?,?,?> config = state.getConfig();
                Collection collection = null;
                List<Collection> collections;
                collection = (Collection) state.collections.get(collectionCode);
@@ -729,7 +722,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                try {
                    collections = getCollectionService().searchByCode(collectionCode);
                } catch (Exception e) {
-                   collections = new ArrayList<Collection>();
+                   collections = new ArrayList<>();
                }
                if (collections.size() > 0 && config.isReuseExistingMetaData()) {
                    for (Collection coll:collections){
@@ -745,12 +738,9 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    collection =Collection.NewInstance();
                    collection.setCode(collectionCode);
                    collection.setInstitute(institution);
-                   collection.setTitleCache(collectionCode);
-                   UUID uuid = save(collection, state);
+                   save(collection, state);
                }
 
-
-
                state.collections.put(collectionCode, collection);
 
                return collection;
@@ -788,7 +778,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                Taxon subspecies = null;
                Taxon parent = null;
                if(rank!=null){
-                   if (rank.isLower(Rank.GENUS() )){
+                   if (rank.isLowerThan(RankClass.Genus)){
                        String genusOrUninomial = nvname.getGenusOrUninomial();
                        TaxonName taxonName = getOrCreateTaxonName(genusOrUninomial, Rank.GENUS(), preferredFlag, state, -1);
                        genus = getOrCreateTaxonForName(taxonName, state);
@@ -808,9 +798,10 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                            subgenus = getOrCreateTaxonForName(taxonName, state);
                            if (preferredFlag) {
                                parent = linkParentChildNode(genus, subgenus, classification, state);
-                           }            }
+                           }
+                       }
                    }
-                   if (rank.isLower(Rank.SPECIES())){
+                   if (rank.isLowerThan(RankClass.Species)){
                        if (subgenus!=null){
                            String prefix = nvname.getGenusOrUninomial();
                            String name = nvname.getInfraGenericEpithet();
@@ -939,8 +930,9 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    }
                }
                else{
-                   Set<TaxonBase> taxonAndSynonyms = taxonName.getTaxonBases();
-                   for (TaxonBase taxonBase : taxonAndSynonyms) {
+                   @SuppressWarnings("rawtypes")
+                    Set<TaxonBase> taxonAndSynonyms = taxonName.getTaxonBases();
+                   for (TaxonBase<?> taxonBase : taxonAndSynonyms) {
                        if(taxonBase.isInstanceOf(Synonym.class)){
                            Synonym synonym = HibernateProxyHelper.deproxy(taxonBase, Synonym.class);
                            Taxon acceptedTaxonOfSynonym = synonym.getAcceptedTaxon();
@@ -964,7 +956,6 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                return taxon;
                }
                return null;
-
            }
 
            private boolean hasTaxonNodeInClassification(Taxon taxon, Classification classification){
@@ -985,8 +976,8 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
             * @param derivedUnitFacade : the current derivedunitfacade
             */
            protected void handleIdentifications(STATE state, DerivedUnitFacade derivedUnitFacade) {
-              SpecimenImportConfiguratorBase config = state.getConfig();
 
+               SpecimenImportConfiguratorBase<?,?,?> config = state.getConfig();
 
                String scientificName = "";
                boolean preferredFlag = false;
@@ -1124,7 +1115,10 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                        determinationEvent.setModifier(DefinedTerm.DETERMINATION_MODIFIER_AFFINIS());
                    }
                }
-               state.getDerivedUnitBase().addDetermination(determinationEvent);
+               if (config.isAddDeterminations()) {
+                   state.getDerivedUnitBase().addDetermination(determinationEvent);
+               }
+
 
                if (logger.isDebugEnabled()){
                    logger.debug("NB TYPES INFO: "+ state.getDataHolder().getStatusList().size());
@@ -1177,7 +1171,7 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                }
                save(state.getDerivedUnitBase(), state);
 
-               if (config.isAddIndividualsAssociationsSuchAsSpecimenAndObservations() && preferredFlag) {
+               if (config.isAddIndividualsAssociations() && preferredFlag) {
                    //do not add IndividualsAssociation to non-preferred taxa
                    if (logger.isDebugEnabled()){
                        logger.debug("isDoCreateIndividualsAssociations");
@@ -1273,7 +1267,6 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                 }
             }
 
-
                taxonDescription.addElement(indAssociation);
 
                save(taxonDescription, state);
@@ -1282,12 +1275,6 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                state.getReport().addIndividualAssociation(taxon, state.getDataHolder().getUnitID(), state.getDerivedUnitBase());
            }
 
-           /**
-            * @param derivedUnitBase2
-            * @param ref2
-            * @param object
-            * @return
-            */
            private boolean sourceNotLinkedToElement(DerivedUnit derivedUnitBase2, Reference b, String d) {
                Set<IdentifiableSource> linkedSources = derivedUnitBase2.getSources();
                for (IdentifiableSource is:linkedSources){
@@ -1308,7 +1295,6 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                        }
                    }catch(Exception e){}
 
-
                    try{
                        if (c==null && d==null) {
                            microMatch=true;
@@ -1324,13 +1310,13 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    if (microMatch && refMatch) {
                        return false;
                    }
-
-
                }
                return true;
            }
 
-           private <T extends OriginalSourceBase> boolean  sourceNotLinkedToElement(ISourceable<T> sourcable, Reference reference, String microReference) {
+           private <T extends OriginalSourceBase> boolean  sourceNotLinkedToElement(
+                   ISourceable<T> sourcable, Reference reference, String microReference) {
+
                Set<T> linkedSources = sourcable.getSources();
                for (T is:linkedSources){
                    Reference unitReference = is.getCitation();
@@ -1377,8 +1363,6 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
            private Feature makeFeature(SpecimenOrObservationBase<?> unit) {
                SpecimenOrObservationType type = unit.getRecordBasis();
 
-
-
                if (type.isFeatureObservation()){
                    return Feature.OBSERVATION();
                }else if (type.isFeatureSpecimen()){
@@ -1395,11 +1379,6 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                }
            }
 
-
-           /**
-            * @param sourceMap
-            * @param osbSet
-            */
            protected void addToSourceMap(Map<String, OriginalSourceBase> sourceMap, Set<OriginalSourceBase> osbSet) {
                for( OriginalSourceBase osb:osbSet) {
                    if(osb.getCitation()!=null && osb.getCitationMicroReference() !=null  && !osb.getCitationMicroReference().isEmpty()) {
@@ -1413,8 +1392,4 @@ public abstract class SpecimenImportBase<CONFIG extends IImportConfigurator, STA
                    }
                }
            }
-
-
-
-
-}
+}
\ No newline at end of file