cleanup
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / common / ImportConfiguratorBase.java
index 167ce45649fcd1f804625ccb369692b732acc276..bafcb0a6d72354168c24342f0be83e2ba142b7fe 100644 (file)
-/**\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
-\r
-package eu.etaxonomy.cdm.io.common;\r
-\r
-import java.lang.reflect.Method;\r
-import java.util.List;\r
-import java.util.UUID;\r
-\r
-import org.apache.log4j.Logger;\r
-\r
-import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
-import eu.etaxonomy.cdm.database.DataSourceNotFoundException;\r
-import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
-import eu.etaxonomy.cdm.database.ICdmDataSource;\r
-import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;\r
-import eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES;\r
-import eu.etaxonomy.cdm.model.agent.Person;\r
-import eu.etaxonomy.cdm.model.common.Language;\r
-import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;\r
-import eu.etaxonomy.cdm.model.description.Feature;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-\r
-/**\r
- * @author a.mueller\r
- * @created 20.06.2008\r
- * @version 1.0\r
- */\r
-public abstract class ImportConfiguratorBase extends IoConfiguratorBase {\r
-       private static final Logger logger = Logger.getLogger(ImportConfiguratorBase.class);\r
-\r
-       //check\r
-       private CHECK check = CHECK.CHECK_AND_IMPORT;\r
-       \r
-       //TODO\r
-       private boolean deleteAll = false;\r
-               \r
-       //nullValues\r
-       private boolean ignoreNull = false;\r
-       \r
-       //Nomenclatural Code\r
-       private NomenclaturalCode nomenclaturalCode = null;\r
-       \r
-       private MapWrapper<Feature> featureMap = new MapWrapper<Feature>(null);\r
-       \r
-       //uuid of concept reference\r
-       private UUID  secUuid = UUID.randomUUID();\r
-       private Object sourceSecId = -1;\r
-       \r
-       private Object source;\r
-       protected ReferenceBase sourceReference;\r
-       private ICdmDataSource destination;\r
-       private Person commentator =  Person.NewTitledInstance("automatic BerlinModel2CDM importer");\r
-       \r
-       private Language factLanguage = Language.ENGLISH();\r
-       private CdmApplicationController cdmApp = null;\r
-       protected Class<ICdmIO>[] ioClassList;\r
-       \r
-/* *****************CONSTRUCTOR *****************************/\r
-       \r
-       public ImportConfiguratorBase(){\r
-               super();\r
-               makeIoClassList();\r
-       }\r
-       \r
-       abstract protected void makeIoClassList();\r
-       \r
-       /**\r
-        * @param source the source to set\r
-        */\r
-       public void setSource(Object source) {\r
-               this.source = source;\r
-       }\r
-       \r
-       \r
-       /**\r
-        * @param source the source to get\r
-        */\r
-       public Object getSource() {\r
-               return source;\r
-       }\r
-       \r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#isValid()\r
-        */\r
-       public boolean isValid(){\r
-               boolean result = true;\r
-               if (source == null){\r
-                       logger.warn("Connection to BerlinModel could not be established");\r
-                       result = false;\r
-               }\r
-               if (destination == null){\r
-                       logger.warn("Connection to Cdm could not be established");\r
-                       result = false;\r
-               }\r
-               \r
-               return result;\r
-       }\r
-       \r
-       \r
-       \r
-/* ****************** GETTER/SETTER **************************/        \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#isDeleteAll()\r
-        */\r
-       public boolean isDeleteAll() {\r
-               return deleteAll;\r
-       }\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#setDeleteAll(boolean)\r
-        */\r
-       public void setDeleteAll(boolean deleteAll) {\r
-               this.deleteAll = deleteAll;\r
-       }\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#isDoAuthors()\r
-        */\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#getCheck()\r
-        */\r
-       public CHECK getCheck() {\r
-               return this.check;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#setCheck(eu.etaxonomy.cdm.io.tcs.TcsImportConfigurator.CHECK)\r
-        */\r
-       public void setCheck(CHECK check) {\r
-               this.check = check;\r
-       }\r
-       \r
-       \r
-       /**\r
-        * If true, no errors occurs if objects are not found that should exist. This may\r
-        * be needed e.g. when only subsets of the data are imported.\r
-        * Default value is <cod>false</code>.\r
-        * @return the ignoreNull\r
-        */\r
-       public boolean isIgnoreNull() {\r
-               return ignoreNull;\r
-       }\r
-\r
-       /**\r
-        * @param ignoreNull the ignoreNull to set\r
-        */\r
-       public void setIgnoreNull(boolean ignoreNull) {\r
-               this.ignoreNull = ignoreNull;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#getDestination()\r
-        */\r
-       public ICdmDataSource getDestination() {\r
-               return destination;\r
-       }\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#setDestination(eu.etaxonomy.cdm.database.ICdmDataSource)\r
-        */\r
-       public void setDestination(ICdmDataSource destination) {\r
-               this.destination = destination;\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#getSourceReference()\r
-        */\r
-       public abstract ReferenceBase getSourceReference();\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#setSourceReference(eu.etaxonomy.cdm.model.reference.ReferenceBase)\r
-        */\r
-       public void setSourceReference(ReferenceBase sourceReference) {\r
-               this.sourceReference = sourceReference;\r
-       }\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#getSourceReferenceTitle()\r
-        */\r
-       public String getSourceReferenceTitle() {\r
-               return getSourceReference().getTitleCache();\r
-       }\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#setSourceReferenceTitle(java.lang.String)\r
-        */\r
-       public void setSourceReferenceTitle(String sourceReferenceTitle) {\r
-               getSourceReference().setTitleCache(sourceReferenceTitle);\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#getCommentator()\r
-        */\r
-       public Person getCommentator() {\r
-               return commentator;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#setCommentator(eu.etaxonomy.cdm.model.agent.Person)\r
-        */\r
-       public void setCommentator(Person commentator) {\r
-               this.commentator = commentator;\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#getFactLanguage()\r
-        */\r
-       public Language getFactLanguage() {\r
-               return factLanguage;\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.tcs.IImportConfigurator#setFactLanguage(eu.etaxonomy.cdm.model.common.Language)\r
-        */\r
-       public void setFactLanguage(Language factLanguage) {\r
-               this.factLanguage = factLanguage;\r
-       }\r
-\r
-\r
-       /**\r
-        * @return the nomenclaturalCode\r
-        */\r
-       public NomenclaturalCode getNomenclaturalCode() {\r
-               return nomenclaturalCode;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param nomenclaturalCode the nomenclaturalCode to set\r
-        */\r
-       public void setNomenclaturalCode(NomenclaturalCode nomenclaturalCode) {\r
-               this.nomenclaturalCode = nomenclaturalCode;\r
-       }\r
-\r
-\r
-       /**\r
-        * @return the secUuid\r
-        */\r
-       public UUID getSecUuid() {\r
-               return secUuid;\r
-       }\r
-\r
-\r
-       /**\r
-        * @param secUuid the secUuid to set\r
-        */\r
-       public void setSecUuid(UUID secUuid) {\r
-               this.secUuid = secUuid;\r
-       }\r
-\r
-       /**\r
-        * @return the sourceSecId\r
-        */\r
-       public Object getSourceSecId() {\r
-               return sourceSecId;\r
-       }\r
-\r
-       /**\r
-        * @param sourceSecId the sourceSecId to set\r
-        */\r
-       public void setSourceSecId(Object sourceSecId) {\r
-               this.sourceSecId = sourceSecId;\r
-       }\r
-       \r
-       public Class<ICdmIO>[] getIoClassList(){\r
-               return ioClassList;\r
-       }\r
-       \r
-\r
-       /**\r
-        * @return the featureMap\r
-        */\r
-       public MapWrapper<Feature> getFeatureMap() {\r
-               return featureMap;\r
-       }\r
-\r
-       /**\r
-        * @param featureMap the featureMap to set\r
-        */\r
-       public void setFeatureMap(MapWrapper<Feature> featureMap) {\r
-               this.featureMap = featureMap;\r
-       }\r
-\r
-       \r
-       /**\r
-        * Returns a <code>CdmApplicationController</code> created by the values of this configuration.\r
-        * If a controller was already created before the last created controller is returned.\r
-        * @return\r
-        */\r
-       public CdmApplicationController getCdmAppController(){\r
-               return getCdmAppController(false);\r
-       }\r
-       \r
-       /**\r
-        * Returns a new instance of <code>CdmApplicationController</code> created by the values of this configuration.\r
-        * @return\r
-        */\r
-       public CdmApplicationController getNewCdmAppController(){\r
-               return getCdmAppController(true, false);\r
-       }\r
-       \r
-       /**\r
-        * Returns a <code>CdmApplicationController</code> created by the values of this configuration.\r
-        * If create new is true always a new controller is returned, else the last created controller is returned. If no controller has\r
-        * been created before a new controller is returned.\r
-        * @return\r
-        */\r
-       public CdmApplicationController getCdmAppController(boolean createNew){\r
-               return getCdmAppController(createNew, false);\r
-       }\r
-       \r
-       \r
-       /**\r
-        * Returns a <code>CdmApplicationController</code> created by the values of this configuration.\r
-        * If create new is true always a new controller is returned, else the last created controller is returned. If no controller has\r
-        * been created before a new controller is returned.\r
-        * @return\r
-        */\r
-       public CdmApplicationController getCdmAppController(boolean createNew, boolean omitTermLoading){\r
-               if (cdmApp == null || createNew == true){\r
-                       try {\r
-                               cdmApp = CdmApplicationController.NewInstance(this.getDestination(), this.getDbSchemaValidation(), omitTermLoading);\r
-                       } catch (DataSourceNotFoundException e) {\r
-                               logger.error("could not connect to destination database");\r
-                               return null;\r
-                       }catch (TermNotFoundException e) {\r
-                               logger.error("could not find needed term in destination datasource");\r
-                               return null;\r
-                       }\r
-               }\r
-               return cdmApp;\r
-       }\r
-       \r
-       \r
-       protected static Method getDefaultFunction(Class<?> clazz, String methodName){\r
-               try {\r
-                       return clazz.getMethod(methodName, List.class) ;\r
-               } catch (SecurityException e) {\r
-                       logger.error(e.getMessage());\r
-                       e.printStackTrace();\r
-               } catch (NoSuchMethodException e) {\r
-                       logger.error(e.getMessage());\r
-                       e.printStackTrace();\r
-               }\r
-               return null;\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.io.common;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.stereotype.Component;
+
+import eu.etaxonomy.cdm.database.DbSchemaValidation;
+import eu.etaxonomy.cdm.database.ICdmDataSource;
+import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.reference.Reference;
+
+/**
+ * @author a.mueller
+ * @created 20.06.2008
+ * @param <STATE>
+ */
+@Component
+public abstract class ImportConfiguratorBase<STATE extends ImportStateBase, SOURCE> extends IoConfiguratorBase implements IImportConfigurator{
+
+
+       //check
+       private CHECK check = CHECK.CHECK_AND_IMPORT;
+
+       //editor
+       static EDITOR editor = EDITOR.EDITOR_AS_ANNOTATION;
+
+       /**
+        * The transformer class to be used for Input
+        */
+       private IInputTransformer transformer;
+
+//
+//     //TODO
+//     private boolean deleteAll = false;
+
+       //nullValues
+       private boolean ignoreNull = false;
+
+       //Nomenclatural Code
+       private NomenclaturalCode nomenclaturalCode = null;
+
+       private Map<Integer, Feature>  featureMap = new HashMap<Integer, Feature>();
+
+        /* The classification name for the first classification.
+         * Needs only to be defined if the import does not handle the naming
+         * itself (e.g. by using the taxon sec. reference title cache)
+         */
+       private String classificationName = "Classification - no name";
+
+       private UUID  classificationUuid = UUID.randomUUID();
+       //uuid of concept reference
+       private UUID  secUuid = UUID.randomUUID();
+
+       private Object sourceSecId = -1;
+
+       private SOURCE source;
+       protected Reference sourceReference;
+       private UUID sourceRefUuid;
+       private ICdmDataSource destination;
+       private Person commentator =  Person.NewTitledInstance("automatic CDM importer");
+
+       protected Class<ICdmImport>[] ioClassList;
+
+       protected ICdmIO[] ioList;
+
+       protected String[] ioBeans;
+
+       /*user interaction*/
+    private boolean askUserForHelp =false;
+
+
+/* *****************CONSTRUCTOR *****************************/
+
+       protected ImportConfiguratorBase(IInputTransformer transformer){
+               super();
+               setDbSchemaValidation(DbSchemaValidation.UPDATE);
+               this.transformer = transformer;
+
+       }
+
+       abstract protected void makeIoClassList();
+
+       @Override
+    public IInputTransformer getTransformer() {
+               return this.transformer;
+       }
+
+       @Override
+    public void setTransformer(IInputTransformer transformer){
+               this.transformer = transformer;
+       }
+
+       /**
+        * @param source the source to set
+        */
+       public void setSource(SOURCE source) {
+               this.source = source;
+       }
+
+       /**
+        * @param source the source to get
+        */
+       @Override
+    public SOURCE getSource() {
+               return source;
+       }
+
+       @Override
+    public boolean isValid(){
+               boolean result = true;
+               if (getSource() == null){
+                       //logger.warn("Connection to source could not be established");
+                       result = false;
+               }
+//Not valid any more as the importer may already have a destination
+//             if (destination == null ){
+//                     logger.warn("Connection to Cdm could not be established");
+//                     result = false;
+//             }
+
+               return result;
+       }
+
+
+
+/* ****************** GETTER/SETTER **************************/
+
+
+       public void setIoClassList(ICdmImport[] ioList){
+               this.ioList = ioList;
+       }
+
+       @Override
+    public Class<ICdmImport>[] getIoClassList(){
+               if (ioClassList == null){
+                       makeIoClassList();
+               }
+               return ioClassList;
+       }
+
+       /**
+        * @param ioClassList
+        */
+       public void setIoClassList(Class<ICdmImport>[] ioClassList){
+               this.ioClassList = ioClassList;
+       }
+
+       @Override
+    public CHECK getCheck() {
+               return this.check;
+       }
+
+       @Override
+    public void setCheck(CHECK check) {
+               this.check = check;
+       }
+
+
+       /**
+        * @return the editor
+        */
+       @Override
+    public EDITOR getEditor() {
+               return editor;
+       }
+
+       /**
+        * @param editor the editor to set
+        */
+       @Override
+    public void setEditor(EDITOR editor) {
+               ImportConfiguratorBase.editor = editor;
+       }
+
+       /**
+        * If true, no errors occur if objects are not found that should exist. This may
+        * be needed e.g. when only subsets of the data are imported.
+        * Default value is <cod>false</code>.
+        * @return the ignoreNull
+        */
+       @Override
+    public boolean isIgnoreNull() {
+               return ignoreNull;
+       }
+
+       /**
+        * @param ignoreNull the ignoreNull to set
+        */
+       @Override
+    public void setIgnoreNull(boolean ignoreNull) {
+               this.ignoreNull = ignoreNull;
+       }
+
+       @Override
+    public ICdmDataSource getDestination() {
+               return destination;
+       }
+       @Override
+    public void setDestination(ICdmDataSource destination) {
+               this.destination = destination;
+       }
+
+       @Override
+    public abstract Reference getSourceReference();
+       @Override
+    public void setSourceReference(Reference sourceReference) {
+               this.sourceReference = sourceReference;
+       }
+       @Override
+    public String getSourceReferenceTitle() {
+               return getSourceReference().getTitleCache();
+       }
+       @Override
+    public void setSourceReferenceTitle(String sourceReferenceTitle) {
+               getSourceReference().setTitleCache(sourceReferenceTitle, true);
+       }
+
+       @Override
+    public Person getCommentator() {
+               return commentator;
+       }
+
+       @Override
+    public void setCommentator(Person commentator) {
+               this.commentator = commentator;
+       }
+
+       /**
+        * @return the nomenclaturalCode
+        */
+       @Override
+    public NomenclaturalCode getNomenclaturalCode() {
+               return nomenclaturalCode;
+       }
+
+
+       /**
+        * @param nomenclaturalCode the nomenclaturalCode to set
+        */
+       @Override
+    public void setNomenclaturalCode(NomenclaturalCode nomenclaturalCode) {
+               this.nomenclaturalCode = nomenclaturalCode;
+       }
+
+       @Override
+    public UUID getClassificationUuid() {
+               return classificationUuid;
+       }
+
+
+       @Override
+    public void setClassificationUuid(UUID classificationUuid) {
+               this.classificationUuid = classificationUuid;
+       }
+
+
+       @Override
+    public UUID getSecUuid() {
+               return secUuid;
+       }
+       @Override
+    public void setSecUuid(UUID secUuid) {
+               this.secUuid = secUuid;
+       }
+
+       /**
+        * @return the sourceSecId
+        */
+       @Override
+    public Object getSourceSecId() {
+               return sourceSecId;
+       }
+
+       /**
+        * @param sourceSecId the sourceSecId to set
+        */
+       public void setSourceSecId(Object sourceSecId) {
+               this.sourceSecId = sourceSecId;
+       }
+
+
+       /**
+        * @return the featureMap
+        */
+       public Map<Integer, Feature>  getFeatureMap() {
+               return featureMap;
+       }
+
+       /**
+        * @param featureMap the featureMap to set
+        */
+       public void setFeatureMap(Map<Integer, Feature>  featureMap) {
+               this.featureMap = featureMap;
+       }
+
+
+       protected static Method getDefaultFunction(Class<?> clazz, String methodName){
+               try {
+                       return clazz.getMethod(methodName, List.class) ;
+               } catch (SecurityException e) {
+                       e.printStackTrace();
+               } catch (NoSuchMethodException e) {
+                       e.printStackTrace();
+               }
+               return null;
+       }
+
+       @Override
+    public String getDestinationNameString() {
+               if (this.getDestination() == null) {
+                       return null;
+               } else {
+                       return this.getDestination().getName().toString();
+               }
+       }
+
+       @Override
+    public String getSourceNameString() {
+               if (this.getSource() == null){
+                       return null;
+               }else{
+                       return this.getSource().toString();
+               }
+       }
+
+       /**
+        * The classification name for the first classification.
+        * Needs only to be defined if the import does not handle the naming
+        * itself (e.g. by using the taxon sec. reference title cache)
+        * @param classificationName the classificationName to set
+        */
+       public void setClassificationName(String classificationName) {
+               this.classificationName = classificationName;
+       }
+
+       /**
+        * @return the classificationName
+        */
+       public String getClassificationName() {
+               return classificationName;
+       }
+
+
+       public UUID getSourceRefUuid() {
+               return sourceRefUuid;
+       }
+
+
+
+       public void setSourceRefUuid(UUID sourceRefUuid) {
+               this.sourceRefUuid = sourceRefUuid;
+       }
+
+       @Override
+       public boolean isOmitTermLoading() {
+               return false;
+       }
+
+       @Override
+       public boolean isCreateNew(){
+               return false;
+       }
+
+       @Override
+    public UsernamePasswordAuthenticationToken getAuthenticationToken(){
+               return this.authenticationToken;
+       }
+
+       /*user interaction*/
+       public boolean isInteractWithUser() {
+        return askUserForHelp;
+    }
+
+    public void setInteractWithUser (boolean interaction){
+        askUserForHelp=interaction;
+    }
+
+
+
+}