fix AccessionNumber->Locality bug in Specimen Excel Import
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / specimen / excel / in / SpecimenCdmExcelImport.java
index b86856bf318e7aa333cb2364b24a908b04924615..b43d33e9b8f34e162b0986e0bef67605a054044c 100644 (file)
@@ -121,7 +121,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
        private static final String DETERMINATION_AUTHOR_COLUMN = "(?i)(Author)";
        private static final String DETERMINATION_MODIFIER_COLUMN = "(?i)(DeterminationModifier)";
        private static final String DETERMINED_BY_COLUMN = "(?i)(DeterminationBy)";
-       private static final String DETERMINED_WHEN_COLUMN = "(?i)(DeterminationWhen)";
+       private static final String DETERMINED_WHEN_COLUMN = "(?i)(Det(ermination)?When)";
        private static final String DETERMINATION_NOTES_COLUMN = "(?i)(DeterminationNote)";
        private static final String EXTENSION_COLUMN = "(?i)(Ext(ension)?)";
        
@@ -185,11 +185,12 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                        }else{
                                logger.warn("Not yet implemented");
                        }
-               
+               } else if(keyValue.key.matches(LANGUAGE)) {
+                       row.setLanguage(value);         
                        
                        
                } else if(keyValue.key.matches(ACCESSION_NUMBER_COLUMN)) {
-                       row.setLocality(value);         
+                       row.setAccessionNumber(value);          
                } else if(keyValue.key.matches(BARCODE_COLUMN)) {
                        row.setBarcode(value);          
                } else if(keyValue.key.matches(UNIT_NOTES_COLUMN)) {
@@ -266,6 +267,18 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                }
                DerivedUnitFacade facade = DerivedUnitFacade.NewInstance(type);
                
+               
+               Language lang = Language.DEFAULT();
+               if (StringUtils.isNotBlank(row.getLanguage())){
+                       Language langIso = getTermService().getLanguageByIso(row.getLanguage());
+                       if (langIso == null){
+                               String message = "Language could not be recognized: %s. Use default language instead. Line %d.";
+                               message = String.format(message, langIso, state.getCurrentLine());
+                       }else{
+                               lang = langIso;
+                       }
+               }
+               
                //country
                handleCountry(facade, row, state);
                handleAreas(facade,row, state);
@@ -274,15 +287,14 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                facade.setLocality(row.getLocality());
                facade.setFieldNotes(row.getFieldNotes());
                facade.setFieldNumber(row.getCollectorsNumber());
-               facade.setEcology(row.getEcology());
-               facade.setPlantDescription(row.getPlantDescription());
+               facade.setEcology(row.getEcology(), lang);
+               facade.setPlantDescription(row.getPlantDescription(), lang);
 //             facade.setSex(row.get)
                handleExactLocation(facade, row, state);
                facade.setCollector(getOrMakeAgent(state, row.getCollectors()));
                facade.setPrimaryCollector(getOrMakePrimaryCollector(facade, row.getPrimaryCollector(), state));
                handleAbsoluteElevation(facade, row, state);
                
-               
                //derivedUnit
                facade.setBarcode(row.getBarcode());
                facade.setAccessionNumber(row.getAccessionNumber());
@@ -291,7 +303,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                        facade.addSource(source);
                }
                for (SpecimenTypeDesignation designation : row.getTypeDesignations()){
-                       //FIXME
+                       logger.warn("FIXME"); //FIXME
 //                     facade.innerDerivedUnit().addSpecimenTypeDesignation(designation);
                }
                handleDeterminations(state, row, facade);
@@ -394,7 +406,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                Taxon commonTaxon = null;
                TaxonNameBase<?,?> commonName = null;
                
-               boolean hasCommonTaxonInfo = commonDetermination == null ? false : commonDetermination.hasTaxonInformation();
+               boolean hasCommonTaxonInfo = (commonDetermination == null) ? false : commonDetermination.hasTaxonInformation();
                if (hasCommonTaxonInfo && commonDetermination != null){
                        TaxonBase<?> taxonBase = null;
                        if (StringUtils.isNotBlank(commonDetermination.taxonUuid)){
@@ -524,11 +536,11 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                Reference<?> sec = null;
                if (StringUtils.isNotBlank(commonDetermination.determinedBy)){
                        sec = ReferenceFactory.newGeneric();
-                       TeamOrPersonBase determinedBy;
+                       TeamOrPersonBase<?> determinedBy;
                        BotanicalName dummyName = BotanicalName.NewInstance(Rank.SPECIES());
                        try {
                                parser.parseAuthors(dummyName, commonDetermination.determinedBy);
-                               determinedBy = (TeamOrPersonBase)dummyName.getCombinationAuthorTeam();
+                               determinedBy = (TeamOrPersonBase<?>)dummyName.getCombinationAuthorTeam();
                        } catch (StringNotParsableException e) {
                                determinedBy = Team.NewTitledInstance(commonDetermination.determinedBy, commonDetermination.determinedBy);
                        }
@@ -552,7 +564,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
 
 
 
-       private void setAuthorship(NonViralName name, String author, INonViralNameParser<NonViralName> parser) {
+       private void setAuthorship(NonViralName<?> name, String author, INonViralNameParser<NonViralName> parser) {
                if (name.isInstanceOf(BotanicalName.class) || name.isInstanceOf(ZoologicalName.class)){
                        try {
                                parser.parseAuthors(name, author);
@@ -615,7 +627,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
         * @return
         */
        private String makeSearchNameTitleCache(SpecimenCdmExcelImportState state, DeterminationLight determinationLight, 
-                               NonViralName name) {
+                               NonViralName<?> name) {
                String titleCache = determinationLight.fullName;
                if (! state.getConfig().isPreferNameCache() || StringUtils.isBlank(titleCache) ){
                        String computedTitleCache = name.getTitleCache();
@@ -632,9 +644,12 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
         * @param determinationLight
         * @return
         */
-       private NonViralName makeTaxonName(SpecimenCdmExcelImportState state, DeterminationLight determinationLight) {
-               //TODO correct type by config.nc
-               NonViralName name =NonViralName.NewInstance(null);
+       private NonViralName<?> makeTaxonName(SpecimenCdmExcelImportState state, DeterminationLight determinationLight) {
+               NonViralName<?> name = NonViralName.NewInstance(null);
+               NomenclaturalCode nc = state.getConfig().getNomenclaturalCode();
+               if (nc != null){
+                       name = (NonViralName<?>)nc.getNewTaxonNameInstance(null);
+               }
                name.setGenusOrUninomial(determinationLight.genus);
                name.setSpecificEpithet(determinationLight.speciesEpi);
                name.setInfraSpecificEpithet(determinationLight.infraSpeciesEpi);
@@ -644,10 +659,9 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                if (StringUtils.isNotBlank(determinationLight.author)){
                        authors.add(determinationLight.author);
                }
-               TeamOrPersonBase agent = (TeamOrPersonBase)getOrMakeAgent(state, authors);
+               TeamOrPersonBase<?> agent = (TeamOrPersonBase)getOrMakeAgent(state, authors);
                name.setCombinationAuthorTeam(agent);
                
-               NomenclaturalCode nc = state.getConfig().getNomenclaturalCode();
                try {
                        if (StringUtils.isNotBlank(determinationLight.rank) ){
                                name.setRank(Rank.getRankByNameOrIdInVoc(determinationLight.rank, nc, true));
@@ -672,7 +686,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
 
        private TaxonNameBase findBestMatchingName(SpecimenCdmExcelImportState state, DeterminationLight determinationLight) {
                
-               NonViralName name = makeTaxonName(state, determinationLight);
+               NonViralName<?> name = makeTaxonName(state, determinationLight);
                String titleCache = makeSearchNameTitleCache(state, determinationLight, name);
                
                //TODO
@@ -705,7 +719,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                }
                TeamOrPersonBase<?> actor = getOrMakeAgent(state, authors);
                TeamOrPersonBase<?> secAuthor = taxon.getSec() == null ? null : taxon.getSec().getAuthorTeam();
-               if (actor != null && secAuthor != null & secAuthor.getTitleCache().equals(actor.getTitleCache()) && secAuthor.getNomenclaturalTitle().equals(actor.getNomenclaturalTitle())) {
+               if (actor != null && secAuthor != null && secAuthor.getTitleCache().equals(actor.getTitleCache()) && secAuthor.getNomenclaturalTitle().equals(actor.getNomenclaturalTitle())) {
                        actor = secAuthor;
                }
                
@@ -869,6 +883,7 @@ public class SpecimenCdmExcelImport  extends ExcelTaxonOrSpecimenImportBase<Spec
                        try {
                                refSys = state.getTransformer().getReferenceSystemByKey(strRefSys);
                                if (refSys == null){
+                                       //TODO we still need user defined Reference Systems here
                                        refUuid = state.getTransformer().getReferenceSystemUuid(strRefSys);
                                        if (refUuid == null){
                                                String message = "Unknown reference system %s in line %d";