ref #8162 adapt cdmlip-app to new term package structure
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / app / wp6 / diptera / DipteraCollectionImport.java
index dc55be228d6b1db240928736fd3fc275779373d1..753f3952c389d43fab31f9b01c4ed95af58e5159 100644 (file)
-// $Id$\r
-/**\r
-* Copyright (C) 2007 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.app.wp6.diptera;\r
-\r
-import java.io.File;\r
-import java.io.FileInputStream;\r
-import java.io.InputStream;\r
-import java.io.InputStreamReader;\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.apache.commons.lang.StringUtils;\r
-import org.apache.log4j.Logger;\r
-import org.springframework.transaction.TransactionStatus;\r
-\r
-import au.com.bytecode.opencsv.CSVReader;\r
-import eu.etaxonomy.cdm.api.application.CdmApplicationDefaultController;\r
-import eu.etaxonomy.cdm.app.common.CdmDestinations;\r
-import eu.etaxonomy.cdm.common.CdmUtils;\r
-import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
-import eu.etaxonomy.cdm.database.ICdmDataSource;\r
-import eu.etaxonomy.cdm.model.agent.Institution;\r
-import eu.etaxonomy.cdm.model.occurrence.Collection;\r
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;\r
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
-\r
-/**\r
- * @author a.mueller\r
- * @date 07.04.2010\r
- *\r
- */\r
-public class DipteraCollectionImport {\r
-       private static final Logger logger = Logger.getLogger(DipteraCollectionImport.class);\r
-\r
-       public static final File acronymsFile = new File("src/main/resources/collections/Acronyms.tab");\r
-       //datasource for use from local main()\r
-       static final ICdmDataSource cdmDestination = CdmDestinations.cdm_local_dipera();\r
-       \r
-\r
-       public boolean invoke(ICdmDataSource dataSource) {\r
-               CdmApplicationDefaultController cdmApp = CdmApplicationDefaultController.NewInstance(dataSource, DbSchemaValidation.VALIDATE);\r
-                       \r
-               //create collections\r
-               TransactionStatus tx = cdmApp.startTransaction();\r
-               Map<String, Collection> colletionMap = createCollections(cdmApp);\r
-               \r
-               //add collections to specimen\r
-               addCollectionsToSpecimen(cdmApp, colletionMap);\r
-               cdmApp.commitTransaction(tx);\r
-               \r
-               return true;\r
-               \r
-       }\r
-\r
-\r
-       /**\r
-        * @param cdmApp\r
-        * @param colletionMap \r
-        */\r
-       private void addCollectionsToSpecimen(CdmApplicationDefaultController cdmApp, Map<String, Collection> colletionMap) {\r
-               List<SpecimenOrObservationBase> specimens = (cdmApp.getOccurrenceService().list(DerivedUnit.class, null, null, null, null));\r
-               for (SpecimenOrObservationBase<?> specOrObservBase : specimens){\r
-                       if (specOrObservBase.getRecordBasis().isPreservedSpecimen()){\r
-                               handleSingleSpecimen((DerivedUnit)specOrObservBase, colletionMap);\r
-                       }else{\r
-                               logger.warn("There are specimenOrObservationBase objects which are not of class Specimen. This is probably an error.");\r
-                       }\r
-               }\r
-               cdmApp.getOccurrenceService().save(specimens);\r
-       }\r
-\r
-\r
-       /**\r
-        * @param specimen \r
-        * @param colletionMap\r
-        */\r
-       private void handleSingleSpecimen(DerivedUnit specimen, Map<String, Collection> collectionMap) {\r
-               String titleCache = specimen.getTitleCache();\r
-               String collectionCode = getCollectionCode(titleCache);\r
-               if (StringUtils.isBlank(collectionCode)){\r
-                       logger.warn("Collection code is empty for: " + titleCache);\r
-               }else{\r
-                       Collection collection = collectionMap.get(collectionCode);\r
-                       if (collection != null){\r
-                               specimen.setCollection(collection);\r
-                       }else{\r
-                               logger.warn("Collection not found for code: " +  collectionCode + "; titleCache: " +  titleCache);\r
-                       }\r
-               }\r
-       }\r
-\r
-\r
-       /**\r
-        * @param titleCache\r
-        * @return\r
-        */\r
-       private String getCollectionCode(String titleCache) {\r
-               String result = titleCache.trim();\r
-               result = replaceBracket(result);\r
-               result = replaceLastFullStop(result);\r
-               result = replaceLastQuestionMark(result);\r
-               result = parseLastUpperCase(result);\r
-               return result;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param result\r
-        * @return\r
-        */\r
-       private String parseLastUpperCase(String string) {\r
-               String result = "";\r
-               String tmpString = string;\r
-               int pos = tmpString.lastIndexOf(" ");\r
-               if (pos>-1){\r
-                       tmpString = tmpString.substring(pos+1);\r
-               }\r
-               while (tmpString.length() > 0){\r
-                       int len = tmpString.length();\r
-                       char lastChar = tmpString.charAt(len-1);\r
-                       if (Character.isUpperCase( lastChar)){\r
-                               result = lastChar + result;\r
-                       }else{\r
-                               if (result.length() > 0){\r
-                                       logger.warn("Collection code is not space separated: " + string);\r
-                               }\r
-                               break;\r
-                       }\r
-                       //remove last character\r
-                       tmpString = tmpString.substring(0, tmpString.length()-1);\r
-               }\r
-               return result;\r
-       }\r
-\r
-\r
-\r
-       /**\r
-        * @param result\r
-        * @return\r
-        */\r
-       private String replaceLastQuestionMark(String string) {\r
-               if (string.endsWith("?")){\r
-                       string = string.substring(0,string.length()-1).trim();\r
-               }\r
-               return string;\r
-       }\r
-       \r
-       /**\r
-        * @param result\r
-        * @return\r
-        */\r
-       private String replaceLastFullStop(String string) {\r
-               if (string.endsWith(".")){\r
-                       string = string.substring(0,string.length()-1).trim();\r
-               }\r
-               return string;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param result\r
-        * @return\r
-        */\r
-       private String replaceBracket(String string) {\r
-               if (string.endsWith("]")){\r
-                       int pos  = string.indexOf("[");\r
-                       if (pos >0){\r
-                               string = string.substring(0, pos).trim();\r
-                       }else{\r
-                               logger.warn("Closing bracket has no opening bracket in: " + string);\r
-                       }\r
-               }\r
-               return string;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param cdmApp\r
-        */\r
-       private Map<String, Collection> createCollections(CdmApplicationDefaultController cdmApp) {\r
-               Map<String, Collection> collectionMap = new HashMap<String, Collection>(); \r
-               List<String[]> lines = getLines();\r
-               for (String[] line:lines){\r
-                       Collection collection = makeLine(line);\r
-                       collectionMap.put(collection.getCode(), collection);\r
-               }\r
-               cdmApp.getCollectionService().save(collectionMap.values());\r
-//                     for (Collection collection: collectionMap.values()){\r
-//                             System.out.println(collection.getTitleCache());\r
-//                     }\r
-               return collectionMap;\r
-       }\r
-       \r
-\r
-       private Collection makeLine(String[] line) {\r
-               String code = line[0];\r
-               String instituteName = line[1];\r
-               String lowerInstitutionName = line[2];\r
-               String higherInstitutionName = line[3];\r
-               String location = line[4];\r
-               String country = line[5];\r
-               //create objects\r
-               Collection collection = Collection.NewInstance();\r
-               collection.setCode(code);\r
-               Institution institution = Institution.NewInstance();\r
-               institution.setCode(code);\r
-               \r
-               institution.setName(instituteName);\r
-               \r
-               if (StringUtils.isNotBlank(lowerInstitutionName)){\r
-                       Institution lowerInstitution = Institution.NewInstance();\r
-                       lowerInstitution.setName(lowerInstitutionName);\r
-                       lowerInstitution.setIsPartOf(institution);\r
-               }\r
-               \r
-               if (StringUtils.isNotBlank(higherInstitutionName)){\r
-                       Institution higherInstitution = Institution.NewInstance();\r
-                       higherInstitution.setName(higherInstitutionName);\r
-                       institution.setIsPartOf(higherInstitution);\r
-               }\r
-               \r
-               collection.setInstitute(institution);\r
-               String locationAndCountry = CdmUtils.concat("/", location, country);\r
-               collection.setTownOrLocation(locationAndCountry);\r
-               \r
-               String titleCache = CdmUtils.concat(", ", new String[]{instituteName, lowerInstitutionName, higherInstitutionName, location, country});\r
-               collection.setTitleCache(titleCache, true);\r
-               \r
-               return collection;\r
-       }\r
-\r
-       \r
-       \r
-       \r
-       private List<String[]> getLines() {\r
-               List<String[]> result = new ArrayList<String[]>();\r
-               \r
-               try {\r
-                       InputStream inStream = new FileInputStream(acronymsFile);\r
-                       InputStreamReader inputStreamReader = new InputStreamReader(inStream, "UTF8");\r
-                       CSVReader reader = new CSVReader(inputStreamReader, '\t');\r
-                       String [] nextLine = reader.readNext();\r
-                       \r
-                       \r
-                       while ((nextLine = reader.readNext()) != null) {\r
-                               if (nextLine.length == 0){\r
-                                       continue;\r
-                               }\r
-                               result.add(nextLine);\r
-                       }\r
-                       return result;\r
-               } catch (Exception e) {\r
-                       logger.error(e + " " + e.getCause() + " " + e.getMessage());\r
-                       for(StackTraceElement ste : e.getStackTrace()) {\r
-                               logger.error(ste);\r
-                       }\r
-                       throw new RuntimeException(e);\r
-               }\r
-       }\r
-\r
-\r
-\r
-\r
-\r
-       /**\r
-        * @param args\r
-        */\r
-       public static void main(String[] args) {\r
-               try {\r
-                       DipteraCollectionImport collectionImport = new DipteraCollectionImport();\r
-                       collectionImport.invoke(cdmDestination);\r
-//                     String titleCache = "Peru. Mouth of Rio Pachitea. ST 2R SMT. [fig. of male abdomen]";\r
-//                     String collectionCode = collectionImport.getCollectionCode(titleCache);\r
-//                     System.out.println(collectionCode);\r
-               } catch (Exception e) {\r
-                       e.printStackTrace();\r
-                       System.exit(-1);\r
-               }\r
-       }\r
-\r
-}\r
+/**
+* Copyright (C) 2007 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.app.wp6.diptera;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.springframework.transaction.TransactionStatus;
+
+import au.com.bytecode.opencsv.CSVReader;
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;
+import eu.etaxonomy.cdm.app.common.CdmDestinations;
+import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.database.DbSchemaValidation;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.io.common.ImportResult;
+import eu.etaxonomy.cdm.model.agent.Institution;
+import eu.etaxonomy.cdm.model.occurrence.Collection;
+import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
+
+/**
+ * @author a.mueller
+ * @since 07.04.2010
+ *
+ */
+public class DipteraCollectionImport {
+       private static final Logger logger = Logger.getLogger(DipteraCollectionImport.class);
+
+       public static final File acronymsFile = new File("src/main/resources/collections/Acronyms.tab");
+       //datasource for use from local main()
+       static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
+
+
+       public ImportResult invoke(ICdmDataSource dataSource) {
+           ImportResult result = new ImportResult();
+               CdmApplicationController cdmApp = CdmApplicationController.NewInstance(dataSource, DbSchemaValidation.VALIDATE);
+
+               //create collections
+               TransactionStatus tx = cdmApp.startTransaction();
+               Map<String, Collection> colletionMap = createCollections(cdmApp);
+
+               //add collections to specimen
+               addCollectionsToSpecimen(cdmApp, colletionMap);
+               cdmApp.commitTransaction(tx);
+
+               return result;
+
+       }
+
+
+       /**
+        * @param cdmApp
+        * @param colletionMap
+        */
+       private void addCollectionsToSpecimen(CdmApplicationController cdmApp, Map<String, Collection> colletionMap) {
+               List<DerivedUnit> specimens = cdmApp.getOccurrenceService().list(DerivedUnit.class, null, null, null, null);
+               for (SpecimenOrObservationBase<?> specOrObservBase : specimens){
+                       if (specOrObservBase.getRecordBasis().isPreservedSpecimen()){
+                               handleSingleSpecimen((DerivedUnit)specOrObservBase, colletionMap);
+                       }else{
+                               logger.warn("There are specimenOrObservationBase objects which are not of class Specimen. This is probably an error.");
+                       }
+               }
+               List<SpecimenOrObservationBase> specimenList = new ArrayList<SpecimenOrObservationBase>(specimens);
+               cdmApp.getOccurrenceService().save(specimenList);
+       }
+
+
+       /**
+        * @param specimen
+        * @param colletionMap
+        */
+       private void handleSingleSpecimen(DerivedUnit specimen, Map<String, Collection> collectionMap) {
+               String titleCache = specimen.getTitleCache();
+               String collectionCode = getCollectionCode(titleCache);
+               if (StringUtils.isBlank(collectionCode)){
+                       logger.warn("Collection code is empty for: " + titleCache);
+               }else{
+                       Collection collection = collectionMap.get(collectionCode);
+                       if (collection != null){
+                               specimen.setCollection(collection);
+                       }else{
+                               logger.warn("Collection not found for code: " +  collectionCode + "; titleCache: " +  titleCache);
+                       }
+               }
+       }
+
+
+       /**
+        * @param titleCache
+        * @return
+        */
+       private String getCollectionCode(String titleCache) {
+               String result = titleCache.trim();
+               result = replaceBracket(result);
+               result = replaceLastFullStop(result);
+               result = replaceLastQuestionMark(result);
+               result = parseLastUpperCase(result);
+               return result;
+       }
+
+
+       /**
+        * @param result
+        * @return
+        */
+       private String parseLastUpperCase(String string) {
+               String result = "";
+               String tmpString = string;
+               int pos = tmpString.lastIndexOf(" ");
+               if (pos>-1){
+                       tmpString = tmpString.substring(pos+1);
+               }
+               while (tmpString.length() > 0){
+                       int len = tmpString.length();
+                       char lastChar = tmpString.charAt(len-1);
+                       if (Character.isUpperCase( lastChar)){
+                               result = lastChar + result;
+                       }else{
+                               if (result.length() > 0){
+                                       logger.warn("Collection code is not space separated: " + string);
+                               }
+                               break;
+                       }
+                       //remove last character
+                       tmpString = tmpString.substring(0, tmpString.length()-1);
+               }
+               return result;
+       }
+
+
+
+       /**
+        * @param result
+        * @return
+        */
+       private String replaceLastQuestionMark(String string) {
+               if (string.endsWith("?")){
+                       string = string.substring(0,string.length()-1).trim();
+               }
+               return string;
+       }
+
+       /**
+        * @param result
+        * @return
+        */
+       private String replaceLastFullStop(String string) {
+               if (string.endsWith(".")){
+                       string = string.substring(0,string.length()-1).trim();
+               }
+               return string;
+       }
+
+
+       /**
+        * @param result
+        * @return
+        */
+       private String replaceBracket(String string) {
+               if (string.endsWith("]")){
+                       int pos  = string.indexOf("[");
+                       if (pos >0){
+                               string = string.substring(0, pos).trim();
+                       }else{
+                               logger.warn("Closing bracket has no opening bracket in: " + string);
+                       }
+               }
+               return string;
+       }
+
+
+       /**
+        * @param cdmApp
+        */
+       private Map<String, Collection> createCollections(CdmApplicationController cdmApp) {
+               Map<String, Collection> collectionMap = new HashMap<String, Collection>();
+               List<String[]> lines = getLines();
+               for (String[] line:lines){
+                       Collection collection = makeLine(line);
+                       collectionMap.put(collection.getCode(), collection);
+               }
+               cdmApp.getCollectionService().save(collectionMap.values());
+//                     for (Collection collection: collectionMap.values()){
+//                             System.out.println(collection.getTitleCache());
+//                     }
+               return collectionMap;
+       }
+
+
+       private Collection makeLine(String[] line) {
+               String code = line[0];
+               String instituteName = line[1];
+               String lowerInstitutionName = line[2];
+               String higherInstitutionName = line[3];
+               String location = line[4];
+               String country = line[5];
+               //create objects
+               Collection collection = Collection.NewInstance();
+               collection.setCode(code);
+               Institution institution = Institution.NewInstance();
+               institution.setCode(code);
+
+               institution.setName(instituteName);
+
+               if (StringUtils.isNotBlank(lowerInstitutionName)){
+                       Institution lowerInstitution = Institution.NewInstance();
+                       lowerInstitution.setName(lowerInstitutionName);
+                       lowerInstitution.setIsPartOf(institution);
+               }
+
+               if (StringUtils.isNotBlank(higherInstitutionName)){
+                       Institution higherInstitution = Institution.NewInstance();
+                       higherInstitution.setName(higherInstitutionName);
+                       institution.setIsPartOf(higherInstitution);
+               }
+
+               collection.setInstitute(institution);
+               String locationAndCountry = CdmUtils.concat("/", location, country);
+               collection.setTownOrLocation(locationAndCountry);
+
+               String titleCache = CdmUtils.concat(", ", new String[]{instituteName, lowerInstitutionName, higherInstitutionName, location, country});
+               collection.setTitleCache(titleCache, true);
+
+               return collection;
+       }
+
+
+
+
+       private List<String[]> getLines() {
+               List<String[]> result = new ArrayList<String[]>();
+
+               try {
+                       InputStream inStream = new FileInputStream(acronymsFile);
+                       InputStreamReader inputStreamReader = new InputStreamReader(inStream, "UTF8");
+                       CSVReader reader = new CSVReader(inputStreamReader, '\t');
+                       String [] nextLine = reader.readNext();
+
+
+                       while ((nextLine = reader.readNext()) != null) {
+                               if (nextLine.length == 0){
+                                       continue;
+                               }
+                               result.add(nextLine);
+                       }
+                       return result;
+               } catch (Exception e) {
+                       logger.error(e + " " + e.getCause() + " " + e.getMessage());
+                       for(StackTraceElement ste : e.getStackTrace()) {
+                               logger.error(ste);
+                       }
+                       throw new RuntimeException(e);
+               }
+       }
+
+
+
+
+
+       /**
+        * @param args
+        */
+       public static void main(String[] args) {
+               try {
+                       DipteraCollectionImport collectionImport = new DipteraCollectionImport();
+                       collectionImport.invoke(cdmDestination);
+//                     String titleCache = "Peru. Mouth of Rio Pachitea. ST 2R SMT. [fig. of male abdomen]";
+//                     String collectionCode = collectionImport.getCollectionCode(titleCache);
+//                     System.out.println(collectionCode);
+               } catch (Exception e) {
+                       e.printStackTrace();
+                       System.exit(-1);
+               }
+       }
+
+}