(no commit message)
authorAndreas Müller <a.mueller@bgbm.org>
Thu, 14 May 2009 20:22:51 +0000 (20:22 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Thu, 14 May 2009 20:22:51 +0000 (20:22 +0000)
46 files changed:
.gitattributes
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelAuthorExport.java [deleted file]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelExportBase.java [deleted file]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelTransformer.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/CdmOneToManyMapper.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/CdmStringMapper.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorTeamExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportBase.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportConfigurator.java [moved from cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelExportConfigurator.java with 63% similarity]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportMapping.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportState.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelFactExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNameRelationExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNomStatusExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelReferenceExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonNameExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonRelationExport.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/DbExportState.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/IoState.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/CreatedAndNotesMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbBooleanMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbClobMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbDateMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbExportMapperBase.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbNullMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbObjectMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbSingleAttributeExportMapperBase.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbStringMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/FactCategoryMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IDbExportMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IdMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IndexCounter.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/MethodMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/RefDetailMapper.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmApplicationAwareDefaultExport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmDefaultExport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmIoBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmIoMapping.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmSingleAttributeMapperBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/ExportConfiguratorBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/ICdmIO.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/ImportHelper.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/MultipleAttributeMapperBase.java [new file with mode: 0644]
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/Source.java

index f96974d159af3a88692d35655c9a64ee1f64948c..2ecd65bb4d26b652a5671a95b3e693b6b3ec13f2 100644 (file)
@@ -645,11 +645,8 @@ cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/abcd206/SpecimenImportConfigurator.j
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/abcd206/SpecimenIoBase.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/abcd206/UnitsGatheringArea.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/abcd206/UnitsGatheringEvent.java -text
-cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelAuthorExport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelAuthorImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelCommonNamesImport.java -text
-cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelExportBase.java -text
-cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelExportConfigurator.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelFactsImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelImportBase.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelImportConfigurator.java -text
@@ -666,6 +663,36 @@ cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelTypesImport.j
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/CdmBooleanMapper.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/CdmOneToManyMapper.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/CdmStringMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorTeamExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportBase.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportConfigurator.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportMapping.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportState.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelFactExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNameRelationExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNomStatusExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelReferenceExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonNameExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonRelationExport.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/DbExportState.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/IoState.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/CreatedAndNotesMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbBooleanMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbClobMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbDateMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbExportMapperBase.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbNullMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbObjectMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbSingleAttributeExportMapperBase.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbStringMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/FactCategoryMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IDbExportMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IdMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IndexCounter.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/MethodMapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/RefDetailMapper.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmApplicationAwareDefaultExport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmApplicationAwareDefaultImport.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/CdmAttributeMapperBase.java -text
@@ -687,6 +714,7 @@ cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/ImportHelper.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/ImportWrapper.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/IoConfiguratorBase.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/MapWrapper.java -text
+cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/MultipleAttributeMapperBase.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/Source.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/SourceConnectionException.java -text
 cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/excel/common/ExcelImportConfiguratorBase.java -text
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelAuthorExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelAuthorExport.java
deleted file mode 100644 (file)
index 8884fef..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/**\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.io.berlinModel;\r
-\r
-import java.sql.ResultSet;\r
-import java.sql.SQLException;\r
-import java.util.List;\r
-import java.util.Map;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.springframework.stereotype.Component;\r
-\r
-import eu.etaxonomy.cdm.io.common.ICdmIO;\r
-import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
-import eu.etaxonomy.cdm.io.common.ImportHelper;\r
-import eu.etaxonomy.cdm.io.common.MapWrapper;\r
-import eu.etaxonomy.cdm.io.common.Source;\r
-import eu.etaxonomy.cdm.model.agent.AgentBase;\r
-import eu.etaxonomy.cdm.model.agent.Person;\r
-import eu.etaxonomy.cdm.model.agent.Team;\r
-import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
-import eu.etaxonomy.cdm.model.common.CdmBase;\r
-\r
-\r
-/**\r
- * @author a.mueller\r
- * @created 20.03.2008\r
- * @version 1.0\r
- */\r
-@Component\r
-public class BerlinModelAuthorExport extends BerlinModelExportBase {\r
-       private static final Logger logger = Logger.getLogger(BerlinModelAuthorExport.class);\r
-\r
-       private static int modCount = 1000;\r
-\r
-       public BerlinModelAuthorExport(){\r
-               super();\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
-        */\r
-       @Override\r
-       protected boolean doCheck(IExportConfigurator config){\r
-               boolean result = true;\r
-               logger.warn("Checking for Authors not yet implemented");\r
-               //result &= checkArticlesWithoutJournal(bmiConfig);\r
-               //result &= checkPartOfJournal(bmiConfig);\r
-               \r
-               return result;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doInvoke(eu.etaxonomy.cdm.io.common.IImportConfigurator, eu.etaxonomy.cdm.api.application.CdmApplicationController, java.util.Map)\r
-        */\r
-       @Override\r
-       protected boolean doInvoke(IExportConfigurator config, \r
-                       Map<String, MapWrapper<? extends CdmBase>> stores){ \r
-\r
-               MapWrapper<AgentBase> teamMap = (MapWrapper<AgentBase>)stores.get(ICdmIO.AUTHOR_STORE);\r
-               \r
-               BerlinModelImportConfigurator bmiConfig = (BerlinModelImportConfigurator)config;\r
-               Source source = bmiConfig.getSource();\r
-               String dbAttrName;\r
-               String cdmAttrName;\r
-\r
-               logger.info("start makeAuthors ...");\r
-               boolean success = true ;\r
-               \r
-               String sql = "";\r
-               \r
-               //TODO get all persons ; getAllTeams\r
-               List<? extends AgentBase> persons = getAgentService().getAllAgents(0, 10);\r
-               sql = "INSERT INTO author (authorID, authorCache, ...) VALUES ";  \r
-               for (AgentBase agent : persons){\r
-                       if (agent instanceof Person){\r
-                               Person person = (Person)agent;\r
-                               sql += person.getFirstname() + ", " + ", " + person.getLastname() + ", " + person.getFirstname() + ", ";  \r
-                       }\r
-               }\r
-               \r
-               //TODO get all persons ; getAllTeams\r
-               List<? extends AgentBase> teams = getAgentService().getAllAgents(0, 10);\r
-               sql = "INSERT INTO AuthorTeam (AuthorTeamId, AuthorTeamCache, FullAuthorTeamCache) VALUES ";  \r
-               for (AgentBase agent : teams){\r
-                       if (agent instanceof Team){\r
-                               Team team = (Team)agent;\r
-                               sql += team.getSources()/*TODO*/ + ", " + ", " + team.getTitleCache() + ", " + team.getTeamMembers() + ", ";  \r
-                       }\r
-               }\r
-               \r
-//****************** FROM IMPORT ************/         \r
-               //get data from database\r
-               String strQuery = \r
-                               " SELECT *  " +\r
-                " FROM AuthorTeam " ;\r
-               ResultSet rs = source.getResultSet(strQuery) ;\r
-               String namespace = "AuthorTeam";\r
-               \r
-               int i = 0;\r
-               //for each reference\r
-               try{\r
-                       while (rs.next()){\r
-                               \r
-                               if ((i++ % modCount ) == 0 && i!= 1 ){ logger.info("Authors handled: " + (i-1));}\r
-                               \r
-                               //create Agent element\r
-                               int teamId = rs.getInt("AuthorTeamId");\r
-                               \r
-                               TeamOrPersonBase team = new Team();\r
-                               \r
-                               dbAttrName = "AuthorTeamCache";\r
-                               cdmAttrName = "nomenclaturalTitle";\r
-                               success &= ImportHelper.addStringValue(rs, team, dbAttrName, cdmAttrName);\r
-\r
-                               dbAttrName = "AuthorTeamCache";\r
-                               cdmAttrName = "titleCache";\r
-                               success &= ImportHelper.addStringValue(rs, team, dbAttrName, cdmAttrName);\r
-\r
-                               //TODO\r
-                               //FullAuthorTeamCache\r
-                               //preliminaryFlag\r
-                               //title cache or nomenclaturalTitle?\r
-\r
-                               //created, notes\r
-       //                      doIdCreatedUpdatedNotes(config, team, rs, teamId, namespace);\r
-\r
-                               teamMap.put(teamId, team);\r
-                       } //while rs.hasNext()\r
-               } catch (SQLException e) {\r
-                       logger.error("SQLException:" +  e);\r
-                       return false;\r
-               }\r
-\r
-                       \r
-               logger.info(i + " authors handled");\r
-               getAgentService().saveAgentAll(teamMap.objects());\r
-\r
-               logger.info("end make authors ...");\r
-               return success;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
-        */\r
-       protected boolean isIgnore(IExportConfigurator config){\r
-               return ! ((BerlinModelExportConfigurator)config).isDoAuthors();\r
-       }\r
-\r
-}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelExportBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelExportBase.java
deleted file mode 100644 (file)
index afe9b3c..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-/**\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.berlinModel;\r
-\r
-import java.sql.ResultSet;\r
-import java.sql.ResultSetMetaData;\r
-import java.sql.SQLException;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import org.apache.log4j.Logger;\r
-\r
-import eu.etaxonomy.cdm.common.CdmUtils;\r
-import eu.etaxonomy.cdm.io.common.CdmIoBase;\r
-import eu.etaxonomy.cdm.io.common.ICdmIO;\r
-import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
-import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
-import eu.etaxonomy.cdm.io.common.ImportHelper;\r
-import eu.etaxonomy.cdm.io.common.Source;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
-import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
-import eu.etaxonomy.cdm.model.common.Language;\r
-\r
-/**\r
- * @author a.mueller\r
- * @created 20.03.2008\r
- * @version 1.0\r
- */\r
-public abstract class BerlinModelExportBase extends CdmIoBase<IExportConfigurator> implements ICdmIO<IExportConfigurator> {\r
-       private static final Logger logger = Logger.getLogger(BerlinModelExportBase.class);\r
-       \r
-       public BerlinModelExportBase() {\r
-               super();\r
-       }\r
-       \r
-       \r
-//     protected boolean doIdCreatedUpdatedNotes(IImportConfigurator bmiConfig, IdentifiableEntity identifiableEntity, ResultSet rs, long id, String namespace)\r
-//                     throws SQLException{\r
-//             \r
-//             Object createdWhen = rs.getObject("Created_When");\r
-//             Object createdWho = rs.getObject("Created_Who");\r
-//             Object updatedWhen = null;\r
-//             Object updatedWho = null;\r
-//             try {\r
-//                     updatedWhen = rs.getObject("Updated_When");\r
-//                     updatedWho = rs.getObject("Updated_who");\r
-//             } catch (SQLException e) {\r
-//                     //Table "Name" has no updated when/who\r
-//             }\r
-//             Object notes = rs.getObject("notes");\r
-//\r
-//             boolean success  = true;\r
-//             \r
-//             //id\r
-//             ImportHelper.setOriginalSource(identifiableEntity, bmiConfig.getSourceReference(), id, namespace);\r
-//\r
-//             \r
-//             //Created When, Who, Updated When Who\r
-//             String createdAnnotationString = "Berlin Model record was created By: " + String.valueOf(createdWho) + " (" + String.valueOf(createdWhen) + ") ";\r
-//             if (updatedWhen != null && updatedWho != null){\r
-//                     createdAnnotationString += " and updated By: " + String.valueOf(updatedWho) + " (" + String.valueOf(updatedWhen) + ")";\r
-//             }\r
-//             Annotation annotation = Annotation.NewInstance(createdAnnotationString, Language.ENGLISH());\r
-//             annotation.setCommentator(bmiConfig.getCommentator());\r
-//             identifiableEntity.addAnnotation(annotation);\r
-//             \r
-//             //notes\r
-//             if (notes != null){\r
-//                     String notesString = String.valueOf(notes);\r
-//                     if (notesString.length() > 254 ){\r
-//                             notesString = notesString.substring(0, 250) + "...";\r
-//                     }\r
-//                     Annotation notesAnnotation = Annotation.NewInstance(notesString, null);\r
-//                     //notes.setCommentator(bmiConfig.getCommentator());\r
-//                     identifiableEntity.addAnnotation(notesAnnotation);\r
-//             }\r
-//             return success;\r
-//     }\r
-       \r
-       \r
-       \r
-       protected boolean checkSqlServerColumnExists(Source source, String tableName, String columnName){\r
-               String strQuery = "SELECT  Count(t.id) as n " +\r
-                               " FROM sysobjects AS t " +\r
-                               " INNER JOIN syscolumns AS c ON t.id = c.id " +\r
-                               " WHERE (t.xtype = 'U') AND " + \r
-                               " (t.name = '" + tableName + "') AND " + \r
-                               " (c.name = '" + columnName + "')";\r
-               ResultSet rs = source.getResultSet(strQuery) ;          \r
-               int n;\r
-               try {\r
-                       rs.next();\r
-                       n = rs.getInt("n");\r
-                       return n>0;\r
-               } catch (SQLException e) {\r
-                       e.printStackTrace();\r
-                       return false;\r
-               }\r
-               \r
-       }\r
-       \r
-       \r
-}\r
index fb62fed38e8509cb324013d22954d72136c34be2..477a2a01347192709b4fd9a702a39ae307c28b39 100644 (file)
@@ -13,15 +13,38 @@ import java.sql.ResultSet;
 import java.sql.SQLException;\r
 \r
 import org.apache.log4j.Logger;\r
-import org.springframework.stereotype.Component;\r
 \r
 import eu.etaxonomy.cdm.common.ResultWrapper;\r
+import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
+import eu.etaxonomy.cdm.model.common.RelationshipTermBase;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;\r
 import eu.etaxonomy.cdm.model.description.PresenceTerm;\r
 import eu.etaxonomy.cdm.model.name.HybridRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
 import eu.etaxonomy.cdm.model.name.Rank;\r
 import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;\r
+import eu.etaxonomy.cdm.model.reference.Article;\r
+import eu.etaxonomy.cdm.model.reference.Book;\r
+import eu.etaxonomy.cdm.model.reference.CdDvd;\r
+import eu.etaxonomy.cdm.model.reference.Database;\r
+import eu.etaxonomy.cdm.model.reference.Generic;\r
+import eu.etaxonomy.cdm.model.reference.Journal;\r
+import eu.etaxonomy.cdm.model.reference.Patent;\r
+import eu.etaxonomy.cdm.model.reference.PersonalCommunication;\r
+import eu.etaxonomy.cdm.model.reference.PrintSeries;\r
+import eu.etaxonomy.cdm.model.reference.Proceedings;\r
+import eu.etaxonomy.cdm.model.reference.Report;\r
+import eu.etaxonomy.cdm.model.reference.SectionBase;\r
+import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.Thesis;\r
+import eu.etaxonomy.cdm.model.reference.WebPage;\r
+import eu.etaxonomy.cdm.model.taxon.Synonym;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
 import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;\r
 \r
@@ -203,7 +226,7 @@ public final class BerlinModelTransformer {
                }\r
        }\r
        \r
-       //TypeDesignation\r
+       //OccStatus\r
        public static PresenceAbsenceTermBase<?> occStatus2PresenceAbsence (int occStatusId)  throws UnknownCdmTypeException{\r
                switch (occStatusId){\r
                        case 0: return null;\r
@@ -234,7 +257,7 @@ public final class BerlinModelTransformer {
        }\r
        \r
        \r
-       //TypeDesignation\r
+       //FactCategory\r
        public static Feature factCategory2Feature (int factCategoryId)  throws UnknownCdmTypeException{\r
                switch (factCategoryId){\r
                        case 0: return null;\r
@@ -329,6 +352,239 @@ public final class BerlinModelTransformer {
                        return Rank.UNKNOWN_RANK();\r
                }               \r
        }\r
+       \r
+       \r
+       public static Integer rank2RankId (Rank rank){\r
+               if (rank.equals(null)){return null;}\r
+               else if (rank.equals(Rank.KINGDOM())){          return 1;}\r
+               else if (rank.equals(Rank.SUBKINGDOM())){       return 3;}\r
+               else if (rank.equals(Rank.PHYLUM())){           return 5;}\r
+               else if (rank.equals(Rank.SUBPHYLUM())){        return 7;}\r
+               else if (rank.equals(Rank.DIVISION())){         return 8;}\r
+               else if (rank.equals(Rank.SUBDIVISION())){      return 9;}\r
+               \r
+               else if (rank.equals(Rank.CLASS())){            return 10;}\r
+               else if (rank.equals(Rank.SUBCLASS())){         return 13;}\r
+               else if (rank.equals(Rank.SUPERORDER())){       return 16;}\r
+               else if (rank.equals(Rank.ORDER())){            return 18;}\r
+               else if (rank.equals(Rank.SUBORDER())){         return 19;}\r
+               else if (rank.equals(Rank.FAMILY())){           return 20;}\r
+               else if (rank.equals(Rank.SUBFAMILY())){        return 25;}\r
+               else if (rank.equals(Rank.TRIBE())){            return 30;}\r
+               else if (rank.equals(Rank.SUBTRIBE())){         return 35;}\r
+               else if (rank.equals(Rank.GENUS())){            return 40;}\r
+               else if (rank.equals(Rank.SUBGENUS())){         return 42;}\r
+               else if (rank.equals(Rank.SECTION())){          return 45;}\r
+               else if (rank.equals(Rank.SUBSECTION())){       return 47;}\r
+               else if (rank.equals(Rank.SERIES())){           return 50;}\r
+               else if (rank.equals(Rank.SUBSERIES())){        return 52;}\r
+               else if (rank.equals(Rank.SPECIESAGGREGATE())){ return 58;}\r
+               //TODO\r
+               //              else if (rank.equals(Rank.XXX())){      return 59;}\r
+               else if (rank.equals(Rank.SPECIES())){          return 60;}\r
+               else if (rank.equals(Rank.SUBSPECIES())){       return 65;}\r
+               else if (rank.equals(Rank.CONVAR())){           return 68;}\r
+               else if (rank.equals(Rank.VARIETY())){          return 70;}\r
+               else if (rank.equals(Rank.SUBVARIETY())){       return 73;}\r
+               else if (rank.equals(Rank.FORM())){                     return 80;}\r
+               else if (rank.equals(Rank.SUBFORM())){          return 82;}\r
+               else if (rank.equals(Rank.SPECIALFORM())){      return 84;}\r
+               else if (rank.equals(Rank.INFRAGENERICTAXON())){        return 98;}\r
+               else if (rank.equals(Rank.INFRASPECIFICTAXON())){       return 99;}\r
+               \r
+               else if (rank.equals(Rank.SUPERCLASS())){       return 750;}\r
+               else if (rank.equals(Rank.INFRACLASS())){       return 780;}\r
+               else if (rank.equals(Rank.INFRAORDER())){       return 820;}\r
+               else if (rank.equals(Rank.SUPERFAMILY())){      return 830;}\r
+               \r
+               else {\r
+                       //TODO Exception\r
+                       logger.warn("Rank not yet supported in Berlin Model: "+ rank.getLabel());\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+       public static Integer textData2FactCategoryFk (Feature feature){\r
+               if (feature.equals(Feature.DESCRIPTION())){\r
+                       return 1;\r
+               }else if (feature.equals(Feature.ECOLOGY())){\r
+                       return 4;\r
+               }else if (feature.equals(Feature.PHENOLOGY())){\r
+                       return 5;\r
+               }else if (feature.equals(Feature.COMMON_NAME())){\r
+                       return 12;\r
+               }else if (feature.equals(Feature.OCCURRENCE())){\r
+                       return 13;\r
+               }else if (feature.equals(Feature.CITATION())){\r
+                       return 99;\r
+               }else{\r
+                       logger.warn("Unknown Feature. Used DESCRIPTION instead");\r
+                       return 4;\r
+               }\r
+       }\r
+       \r
+       \r
+       public static Integer taxonBase2statusFk (TaxonBase<?> taxonBase){\r
+               if (taxonBase.isInstanceOf(Taxon.class)){\r
+                       return T_STATUS_ACCEPTED;\r
+               }else if (taxonBase.isInstanceOf(Synonym.class)){\r
+                       return T_STATUS_SYNONYM;\r
+               }else{\r
+                       logger.warn("Unknown ");\r
+                       return T_STATUS_UNRESOLVED;\r
+               }\r
+               //TODO \r
+//             public static int T_STATUS_PARTIAL_SYN = 3;\r
+//             public static int T_STATUS_PRO_PARTE_SYN = 4;\r
+//             public static int T_STATUS_UNRESOLVED = 5;\r
+//             public static int T_STATUS_ORPHANED = 6;\r
+       }\r
+               \r
+       public static Integer ref2refCategoryId (StrictReferenceBase<?> ref){\r
+               if (ref == null){\r
+                       return null;\r
+               }\r
+               else if (ref instanceof Article){               return REF_ARTICLE;}\r
+               else if (ref instanceof SectionBase){   return REF_PART_OF_OTHER_TITLE;}\r
+               else if (ref instanceof Book){  return REF_BOOK;}\r
+               else if (ref instanceof Database){      return REF_DATABASE;}\r
+//             else if (ref instanceof SectionBas){    return REF_INFORMAL;}\r
+//             else if (ref instanceof SectionBas){    return REF_NOT_APPLICABLE;}\r
+               else if (ref instanceof WebPage){       return REF_WEBSITE;}\r
+               else if (ref instanceof CdDvd){ return REF_CD;}\r
+               else if (ref instanceof Journal){       return REF_JOURNAL;}\r
+               else if (ref instanceof Generic){       return REF_UNKNOWN;}\r
+               else if (ref instanceof PrintSeries){   \r
+                       logger.warn("Print Series is not a standard Berlin Model category");\r
+                       return REF_PRINT_SERIES;\r
+               }\r
+               else if (ref instanceof Proceedings){   \r
+                       logger.warn("Proceedings is not a standard Berlin Model category");\r
+                       return REF_CONFERENCE_PROCEEDINGS;\r
+               }\r
+//             else if (ref instanceof ){      return REF_JOURNAL_VOLUME;}\r
+               else if (ref instanceof Patent){        return REF_NOT_APPLICABLE;}\r
+               else if (ref instanceof PersonalCommunication){ return REF_INFORMAL;}\r
+               else if (ref instanceof Report){        return REF_NOT_APPLICABLE;}\r
+               else if (ref instanceof Thesis){        return REF_NOT_APPLICABLE;}\r
+               else if (ref instanceof Report){        return REF_NOT_APPLICABLE;}\r
                \r
+               else {\r
+                       //TODO Exception\r
+                       logger.warn("Reference type not yet supported in Berlin Model: "+ ref.getClass().getSimpleName());\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+       \r
+       public static Integer taxRelation2relPtQualifierFk (RelationshipBase<?,?,?> rel){\r
+               if (rel == null){\r
+                       return null;\r
+               }\r
+//             else if (rel instanceof SynonymRelationship){           \r
+//                     return ;\r
+//             }else if (rel instanceof TaxonRelationship){\r
+                       RelationshipTermBase<?> type = rel.getType();\r
+                       if (type.equals(TaxonRelationshipType.TAXONOMICALLY_INCLUDED_IN())) {return TAX_REL_IS_INCLUDED_IN;\r
+                       }else if (type.equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())) {return TAX_REL_IS_MISAPPLIED_NAME_OF;\r
+                       }else if (type.equals(SynonymRelationshipType.SYNONYM_OF())) {return TAX_REL_IS_SYNONYM_OF;\r
+                       }else if (type.equals(SynonymRelationshipType.HOMOTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HOMOTYPIC_SYNONYM_OF;\r
+                       }else if (type.equals(SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF())) {return TAX_REL_IS_HETEROTYPIC_SYNONYM_OF;\r
+                       }else if (type.equals(TaxonRelationshipType.CONGRUENT_TO())) {return 11;\r
+//                     public static int TAX_REL_IS_PROPARTE_SYN_OF = 4;\r
+//                     public static int TAX_REL_IS_PARTIAL_SYN_OF = 5;\r
+//                     public static int TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF = 101;\r
+//                     public static int TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF = 102;\r
+//                     public static int TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF = 103;\r
+//                     public static int TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF = 104;\r
+                       \r
+                       }else {\r
+                               //TODO Exception\r
+                               logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());\r
+                               return null;\r
+               }\r
+       }\r
+       \r
+       public static Integer nomStatus2nomStatusFk (NomenclaturalStatus status){\r
+               if (status == null){\r
+                       return null;\r
+               }\r
+               if (status.equals(NomenclaturalStatusType.INVALID())) {return NAME_ST_NOM_INVAL;\r
+               }else if (status.equals(NomenclaturalStatusType.ILLEGITIMATE())) {return NAME_ST_NOM_ILLEG;\r
+               }else if (status.equals(NomenclaturalStatusType.NUDUM())) {return NAME_ST_NOM_NUD;\r
+               }else if (status.equals(NomenclaturalStatusType.REJECTED())) {return NAME_ST_NOM_REJ;\r
+               }else if (status.equals(NomenclaturalStatusType.REJECTED_PROP())) {return NAME_ST_NOM_REJ_PROP;\r
+               }else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED())) {return NAME_ST_NOM_UTIQUE_REJ;\r
+               }else if (status.equals(NomenclaturalStatusType.UTIQUE_REJECTED_PROP())) {return NAME_ST_NOM_UTIQUE_REJ_PROP;\r
+               }else if (status.equals(NomenclaturalStatusType.CONSERVED())) {return NAME_ST_NOM_CONS;\r
+               \r
+               }else if (status.equals(NomenclaturalStatusType.CONSERVED_PROP())) {return NAME_ST_NOM_CONS_PROP;\r
+               }else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED())) {return NAME_ST_ORTH_CONS;\r
+               }else if (status.equals(NomenclaturalStatusType.ORTHOGRAPHY_CONSERVED_PROP())) {return NAME_ST_ORTH_CONS_PROP;\r
+               }else if (status.equals(NomenclaturalStatusType.SUPERFLUOUS())) {return NAME_ST_NOM_SUPERFL;\r
+               }else if (status.equals(NomenclaturalStatusType.AMBIGUOUS())) {return NAME_ST_NOM_AMBIG;\r
+               }else if (status.equals(NomenclaturalStatusType.PROVISIONAL())) {return NAME_ST_NOM_PROVIS;\r
+               }else if (status.equals(NomenclaturalStatusType.DOUBTFUL())) {return NAME_ST_NOM_DUB;\r
+               }else if (status.equals(NomenclaturalStatusType.NOVUM())) {return NAME_ST_NOM_NOV;\r
+               \r
+               }else if (status.equals(NomenclaturalStatusType.CONFUSUM())) {return NAME_ST_NOM_CONFUS;\r
+               }else if (status.equals(NomenclaturalStatusType.ALTERNATIVE())) {return NAME_ST_NOM_ALTERN;\r
+               }else if (status.equals(NomenclaturalStatusType.COMBINATION_INVALID())) {return NAME_ST_COMB_INVAL;\r
+               //TODO\r
+               }else {\r
+                       //TODO Exception\r
+                       logger.warn("NomStatus type not yet supported by Berlin Model export: "+ status);\r
+                       return null;\r
+               }\r
+       }\r
+\r
+       \r
+       \r
+       public static Integer nameRel2RelNameQualifierFk (RelationshipBase<?,?,?> rel){\r
+               if (rel == null){\r
+                       return null;\r
+               }\r
+               RelationshipTermBase<?> type = rel.getType();\r
+               if (type.equals(NameRelationshipType.BASIONYM())) {return NAME_REL_IS_BASIONYM_FOR;\r
+               }else if (type.equals(NameRelationshipType.LATER_HOMONYM())) {return NAME_REL_IS_LATER_HOMONYM_OF;\r
+               }else if (type.equals(NameRelationshipType.REPLACED_SYNONYM())) {return NAME_REL_IS_REPLACED_SYNONYM_FOR;\r
+               //TODO\r
+               }else if (type.equals(NameRelationshipType.VALIDATED_BY_NAME())) {return NAME_REL_IS_VALIDATION_OF;\r
+               }else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_LATER_VALIDATION_OF;\r
+               }else if (type.equals(NameRelationshipType.CONSERVED_AGAINST())) {return NAME_REL_IS_CONSERVED_AGAINST;\r
+               \r
+               \r
+               }else if (type.equals(NameRelationshipType.TREATED_AS_LATER_HOMONYM())) {return NAME_REL_IS_TREATED_AS_LATER_HOMONYM_OF;\r
+               }else if (type.equals(NameRelationshipType.ORTHOGRAPHIC_VARIANT())) {return NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF;\r
+//             }else if (type.equals(NameRelationshipType.())) {return NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF;\r
+               }else {\r
+                       //TODO Exception\r
+                       logger.warn("Relationship type not yet supported by Berlin Model export: "+ rel.getType());\r
+                       return null;\r
+       }\r
+                       \r
+                       //NameRelationShip\r
+\r
+//     }else if (type.equals(NameRelationshipType.())) {return NAME_REL_IS_REJECTED_IN_FAVOUR_OF;\r
+\r
+//                     public static int NAME_REL_IS_FIRST_PARENT_OF = 9;\r
+//                     public static int NAME_REL_IS_SECOND_PARENT_OF = 10;\r
+//                     public static int NAME_REL_IS_FEMALE_PARENT_OF = 11;\r
+//                     public static int NAME_REL_IS_MALE_PARENT_OF = 12;\r
+//\r
+//                     public static int NAME_REL_IS_REJECTED_IN_FAVOUR_OF = 14;\r
+//     }else if (type.equals(NameRelationshipType.)) {return NAME_REL_IS_REJECTED_TYPE_OF;\r
+//                     \r
+//                     public static int NAME_REL_HAS_SAME_TYPE_AS = 18;\r
+//                     public static int NAME_REL_IS_LECTOTYPE_OF = 61;\r
+//                     public static int NAME_REL_TYPE_NOT_DESIGNATED = 62;\r
+\r
+               //      }else if (type.equals(NameRelationshipType.LATER_VALIDATED_BY_NAME())) {return NAME_REL_IS_TYPE_OF;\r
+                       \r
+                       \r
+       }\r
+       \r
+\r
+       \r
        \r
 }\r
index b917ac23649e08023ed6025967658b77a3d2e6a0..570e161657752f37da91426c0fbc4dd02f00a2d4 100644 (file)
@@ -18,7 +18,7 @@ import org.apache.log4j.Logger;
 \r
 import eu.etaxonomy.cdm.io.common.CdmAttributeMapperBase;\r
 import eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase;\r
-import eu.etaxonomy.cdm.io.common.IXmlMapper;\r
+import eu.etaxonomy.cdm.io.common.MultipleAttributeMapperBase;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 \r
 /**\r
@@ -26,11 +26,10 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
  * @created 20.03.2008\r
  * @version 1.0\r
  */\r
-public class CdmOneToManyMapper<ONE extends CdmBase, MANY extends CdmBase, SINGLE_MAPPER extends CdmSingleAttributeMapperBase> extends CdmAttributeMapperBase {\r
+public class CdmOneToManyMapper<ONE extends CdmBase, MANY extends CdmBase, SINGLE_MAPPER extends CdmSingleAttributeMapperBase> extends MultipleAttributeMapperBase<SINGLE_MAPPER> {\r
        @SuppressWarnings("unused")\r
        private static Logger logger = Logger.getLogger(CdmOneToManyMapper.class);\r
 \r
-       private List<SINGLE_MAPPER> singleMappers = new ArrayList<SINGLE_MAPPER>();\r
        private Class<MANY> manyClass;\r
        private Class<ONE> oneClass;\r
        private String singleAttributeName;\r
@@ -47,12 +46,12 @@ public class CdmOneToManyMapper<ONE extends CdmBase, MANY extends CdmBase, SINGL
                this.singleAttributeName = singleAttributeName;\r
        }\r
        \r
-       @Override\r
-       public Set<String> getSourceAttributes(){\r
-               Set<String> result = new HashSet<String>();\r
-               result.addAll(getSourceAttributeList());\r
-               return result;\r
-       }\r
+//     @Override\r
+//     public Set<String> getSourceAttributes(){\r
+//             Set<String> result = new HashSet<String>();\r
+//             result.addAll(getSourceAttributeList());\r
+//             return result;\r
+//     }\r
        \r
        @Override\r
        public List<String> getSourceAttributeList(){\r
@@ -63,12 +62,12 @@ public class CdmOneToManyMapper<ONE extends CdmBase, MANY extends CdmBase, SINGL
                return result;\r
        }\r
        \r
-       @Override\r
-       public Set<String> getDestinationAttributes(){\r
-               Set<String> result = new HashSet<String>();\r
-               result.addAll(getDestinationAttributeList());\r
-               return result;\r
-       }\r
+//     @Override\r
+//     public Set<String> getDestinationAttributes(){\r
+//             Set<String> result = new HashSet<String>();\r
+//             result.addAll(getDestinationAttributeList());\r
+//             return result;\r
+//     }\r
        \r
        @Override\r
        public List<String> getDestinationAttributeList(){\r
index 5f1b986c0028d32e92e4ca9f43bca13c23fe5672..ff2a485042bed3c8e44f8078051534bb2fddd30c 100644 (file)
@@ -26,12 +26,12 @@ public class CdmStringMapper extends CdmSingleAttributeMapperBase {
         * @param dbValue\r
         * @param cdmValue\r
         */\r
-       public CdmStringMapper(String dbAttributString, String cdmAttributeString) {\r
-               super(dbAttributString, cdmAttributeString);\r
+       public CdmStringMapper(String dbAttributeString, String cdmAttributeString) {\r
+               super(dbAttributeString, cdmAttributeString);\r
        }\r
        \r
-       public Class getTypeClass(){\r
+       public Class<String> getTypeClass(){\r
                return String.class;\r
        }\r
-\r
+       \r
 }\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorExport.java
new file mode 100644 (file)
index 0000000..b41bea6
--- /dev/null
@@ -0,0 +1,138 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbStringMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.agent.AgentBase;\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelAuthorExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelAuthorExport.class);\r
+\r
+       private static int modCount = 1000;\r
+       private static final String dbTableName = "Author";\r
+       private static final String pluralString = "Authors";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = Person.class;\r
+       public BerlinModelAuthorExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for "+pluralString+" not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+               mapping.addMapper(IdMapper.NewInstance("AuthorId"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("nomenclaturalTitle", "Abbrev"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("firstName", "FirstName"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("lastName", "LastName"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("lifespan", "Dates"));\r
+\r
+//TODO         \r
+//             mapping.addMapper(DbStringMapper.NewInstance("", "NomStandard"));\r
+//             mapping.addMapper(DbStringMapper.NewInstance("", "Kürzel"));\r
+//             mapping.addMapper(DbStringMapper.NewInstance("", "DraftKürz"));\r
+//             mapping.addMapper(DbStringMapper.NewInstance("", "Initials"));\r
+\r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+               \r
+               return mapping;\r
+       }\r
+       \r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               //MapWrapper<AgentBase> teamMap = (MapWrapper<AgentBase>)stores.get(ICdmIO.AUTHOR_STORE);\r
+               //MapWrapper<AgentBase> teamMap = (MapWrapper<AgentBase>)stores.get(ICdmIO.AUTHOR_STORE);\r
+               \r
+               try{\r
+                       BerlinModelExportConfigurator bmeConfig = (BerlinModelExportConfigurator)state.getConfig();\r
+                       \r
+                       logger.info("start make "+pluralString+" ...");\r
+                       boolean success = true ;\r
+                       doDelete(bmeConfig);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       Class<Team> clazz = Team.class;\r
+                       List<? extends AgentBase> persons = getAgentService().list(clazz, 100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       logger.info("save "+pluralString+" ...");\r
+                       int count = 0;\r
+                       for (AgentBase<?> agent : persons){\r
+                               doCount(count++, modCount, pluralString);\r
+                               if (agent instanceof Person){\r
+                                       success &= mapping.invoke(agent);\r
+                               }\r
+                       }\r
+                       \r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make "+pluralString+"  ...");\r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       protected boolean doDelete(BerlinModelExportConfigurator config){\r
+               String sql;\r
+               Source destination =  config.getDestination();\r
+               return true;\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoAuthors();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorTeamExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelAuthorTeamExport.java
new file mode 100644 (file)
index 0000000..f39fba3
--- /dev/null
@@ -0,0 +1,206 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbBooleanMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.agent.AgentBase;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelAuthorTeamExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelAuthorTeamExport.class);\r
+\r
+       private static int modCount = 1000;\r
+       private static final String dbTableName = "AuthorTeam";\r
+       private static final String pluralString = "AuthorTeams";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = Team.class;\r
+       public BerlinModelAuthorTeamExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for "+pluralString+" not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+               mapping.addMapper(IdMapper.NewInstance("AuthorTeamId"));\r
+               mapping.addMapper(MethodMapper.NewInstance("AuthorTeamCache", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("FullAuthorTeamCache", this));\r
+               //mapping.addMapper(new DbStringMapper("infraGenericEpithet", "GenusSubDivisionEpi"));\r
+               mapping.addMapper(DbBooleanMapper.NewFalseInstance("isProtectedTitleCache", "PreliminaryFlag"));\r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+               \r
+\r
+//             Team n = null;\r
+               //n.isProtectedTitleCache()\r
+               return mapping;\r
+       }\r
+       \r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               //MapWrapper<AgentBase> teamMap = (MapWrapper<AgentBase>)stores.get(ICdmIO.AUTHOR_STORE);\r
+               //MapWrapper<AgentBase> teamMap = (MapWrapper<AgentBase>)stores.get(ICdmIO.AUTHOR_STORE);\r
+               \r
+               try{\r
+                       BerlinModelExportConfigurator bmeConfig = (BerlinModelExportConfigurator)state.getConfig();\r
+                       \r
+                       logger.info("start make "+pluralString+" ...");\r
+                       boolean success = true ;\r
+                       doDelete(bmeConfig);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       Class<Team> clazz = Team.class;\r
+                       List<? extends AgentBase> persons = getAgentService().list(clazz, 100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+//                     for (AgentBase agent : persons){\r
+//                             if (agent instanceof Person){\r
+//                                     success &= mapping.invoke(agent);\r
+//                             }\r
+//                     }\r
+                       logger.info("save "+pluralString+" ...");\r
+                       int count = 0;\r
+                       for (AgentBase<?> agent : persons){\r
+                               doCount(count++, modCount, pluralString);\r
+                               if (agent instanceof Team){\r
+                                       success &= mapping.invoke(agent);\r
+                               }\r
+                       }\r
+                       \r
+                       commitTransaction(txStatus);\r
+                       \r
+                       logger.info("end make "+pluralString+"  ...");\r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       protected boolean doDelete(BerlinModelExportConfigurator config){\r
+               String sql;\r
+               Source destination =  config.getDestination();\r
+               //RelPTaxon\r
+               sql = "DELETE FROM RelPTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //Fact\r
+               sql = "DELETE FROM Fact";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //PTaxon\r
+               sql = "DELETE FROM PTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               \r
+               //NameHistory\r
+               sql = "DELETE FROM NameHistory";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //RelName\r
+               sql = "DELETE FROM RelName";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //NomStatusRel\r
+               sql = "DELETE FROM NomStatusRel";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //Name\r
+               sql = "DELETE FROM Name";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //RefDetail\r
+               sql = "DELETE FROM RefDetail";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //Reference\r
+               sql = "DELETE FROM Reference";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //AuthorTeamSequence\r
+               sql = "DELETE FROM AuthorTeamSequence";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //AuthorTeam\r
+               sql = "DELETE FROM AuthorTeam";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               return true;\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getAuthorTeamCache(Team team){\r
+               if (team.isProtectedTitleCache()){\r
+                       return team.getTitleCache();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+\r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getFullAuthorTeamCache(Team team){\r
+               if (team.isProtectedTitleCache()){\r
+                       return team.getNomenclaturalTitle();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoAuthors();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportBase.java
new file mode 100644 (file)
index 0000000..5820cec
--- /dev/null
@@ -0,0 +1,76 @@
+/**\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.berlinModel.out;\r
+\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.util.Map;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.io.common.CdmIoBase;\r
+import eu.etaxonomy.cdm.io.common.ICdmIO;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.MapWrapper;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+public abstract class BerlinModelExportBase extends CdmIoBase<IExportConfigurator> implements ICdmIO<IExportConfigurator> {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelExportBase.class);\r
+       \r
+       public BerlinModelExportBase() {\r
+               super();\r
+       }\r
+       \r
+       protected abstract boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state);\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doInvoke(eu.etaxonomy.cdm.io.common.IImportConfigurator, eu.etaxonomy.cdm.api.application.CdmApplicationController, java.util.Map)\r
+        */\r
+       @Override\r
+       protected boolean doInvoke(IExportConfigurator config, \r
+                       Map<String, MapWrapper<? extends CdmBase>> stores){ \r
+               BerlinModelExportState<BerlinModelExportConfigurator> state = ((BerlinModelExportConfigurator)config).getState();\r
+               state.setConfig((BerlinModelExportConfigurator)config);\r
+               return doInvoke(state);\r
+       }\r
+       \r
+       protected boolean checkSqlServerColumnExists(Source source, String tableName, String columnName){\r
+               String strQuery = "SELECT  Count(t.id) as n " +\r
+                               " FROM sysobjects AS t " +\r
+                               " INNER JOIN syscolumns AS c ON t.id = c.id " +\r
+                               " WHERE (t.xtype = 'U') AND " + \r
+                               " (t.name = '" + tableName + "') AND " + \r
+                               " (c.name = '" + columnName + "')";\r
+               ResultSet rs = source.getResultSet(strQuery) ;          \r
+               int n;\r
+               try {\r
+                       rs.next();\r
+                       n = rs.getInt("n");\r
+                       return n>0;\r
+               } catch (SQLException e) {\r
+                       e.printStackTrace();\r
+                       return false;\r
+               }\r
+               \r
+       }\r
+       \r
+       public abstract Class<? extends CdmBase> getStandardMethodParameter();\r
+       \r
+       protected void doCount(int count, int modCount, String pluralString){\r
+               if ((count % modCount ) == 0 && count!= 0 ){ logger.info(pluralString + " handled: " + (count));}\r
+       }\r
+       \r
+}\r
similarity index 63%
rename from cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/BerlinModelExportConfigurator.java
rename to cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportConfigurator.java
index aadbea0d6959523be70e382098e65020eb973e88..c61bbc0089743f0436341edb5eb7fa8d4252e6ef 100644 (file)
@@ -7,37 +7,37 @@
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
 \r
-package eu.etaxonomy.cdm.io.berlinModel;\r
-\r
-import java.io.File;\r
-import java.net.MalformedURLException;\r
-import java.net.URL;\r
-import java.util.HashSet;\r
-import java.util.Set;\r
+package eu.etaxonomy.cdm.io.berlinModel.out;\r
 \r
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.database.ICdmDataSource;\r
 import eu.etaxonomy.cdm.io.common.ExportConfiguratorBase;\r
 import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
-import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
-import eu.etaxonomy.cdm.io.common.ImportConfiguratorBase;\r
 import eu.etaxonomy.cdm.io.common.Source;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
 import eu.etaxonomy.cdm.model.reference.Database;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
 \r
 /**\r
  * @author a.mueller\r
  * @created 20.03.2008\r
  * @version 1.0\r
  */\r
-public class BerlinModelExportConfigurator extends ExportConfiguratorBase implements IExportConfigurator{\r
+public class BerlinModelExportConfigurator extends ExportConfiguratorBase<Source> implements IExportConfigurator{\r
        @SuppressWarnings("unused")\r
        private static Logger logger = Logger.getLogger(BerlinModelExportConfigurator.class);\r
 \r
        private boolean doAuthors;\r
+       private boolean doTaxonNames;\r
+       private BerlinModelExportState<BerlinModelExportConfigurator> state;\r
+       \r
+       public enum IdType{\r
+               CDM_ID,\r
+               ORIGINAL_SOURCE_ID,\r
+               MAX_ID\r
+       }\r
+       \r
+       private IdType idType = IdType.CDM_ID;\r
        \r
        public static BerlinModelExportConfigurator NewInstance(Source berlinModelDestination, ICdmDataSource source){\r
                        return new BerlinModelExportConfigurator(berlinModelDestination, source);\r
@@ -45,16 +45,16 @@ public class BerlinModelExportConfigurator extends ExportConfiguratorBase implem
        \r
        protected void makeIoClassList(){\r
                ioClassList = new Class[]{\r
-                               BerlinModelAuthorExport.class\r
-//                             , BerlinModelReferenceImport.class\r
-//                             , BerlinModelTaxonNameImport.class\r
+                               BerlinModelAuthorTeamExport.class\r
+                               , BerlinModelReferenceExport.class\r
+                               , BerlinModelTaxonNameExport.class\r
 //                             , BerlinModelTaxonNameRelationImport.class\r
 //                             , BerlinModelNameStatusImport.class\r
 //                             , BerlinModelNameFactsImport.class\r
 //                             , BerlinModelTypesImport.class\r
-//                             , BerlinModelTaxonImport.class\r
-//                             , BerlinModelTaxonRelationImport.class\r
-//                             , BerlinModelFactsImport.class\r
+                               , BerlinModelTaxonExport.class\r
+                               , BerlinModelTaxonRelationExport.class\r
+                               , BerlinModelFactExport.class\r
 //                             , BerlinModelOccurrenceImport.class\r
                };\r
                \r
@@ -70,6 +70,7 @@ public class BerlinModelExportConfigurator extends ExportConfiguratorBase implem
 //        setNomenclaturalCode(NomenclaturalCode.ICBN); //default for Berlin Model\r
           setSource(cdmSource);\r
           setDestination(berlinModelDestination);\r
+          setState(new BerlinModelExportState<BerlinModelExportConfigurator>());\r
        }\r
        \r
        \r
@@ -109,8 +110,11 @@ public class BerlinModelExportConfigurator extends ExportConfiguratorBase implem
         * @see eu.etaxonomy.cdm.io.common.IIoConfigurator#getDestinationNameString()\r
         */\r
        public String getDestinationNameString() {\r
-               logger.warn("Not yet implemented");\r
-               return null;\r
+               if (getSource() != null){\r
+                       return getSource().getDatabase();\r
+               }else{\r
+                       return null;\r
+               }\r
        }\r
        \r
        public boolean isDoAuthors(){\r
@@ -121,5 +125,49 @@ public class BerlinModelExportConfigurator extends ExportConfiguratorBase implem
                this.doAuthors = doAuthors;\r
        }\r
 \r
+       /**\r
+        * @return the doTaxonNames\r
+        */\r
+       public boolean isDoTaxonNames() {\r
+               return doTaxonNames;\r
+       }\r
+\r
+       /**\r
+        * @param doTaxonNames the doTaxonNames to set\r
+        */\r
+       public void setDoTaxonNames(boolean doTaxonNames) {\r
+               this.doTaxonNames = doTaxonNames;\r
+       }\r
+\r
+       /**\r
+        * @return the idType\r
+        */\r
+       public IdType getIdType() {\r
+               return idType;\r
+       }\r
+\r
+       /**\r
+        * @param idType the idType to set\r
+        */\r
+       public void setIdType(IdType idType) {\r
+               this.idType = idType;\r
+       }\r
+\r
+       /**\r
+        * @return the state\r
+        */\r
+       public BerlinModelExportState<BerlinModelExportConfigurator> getState() {\r
+               return state;\r
+       }\r
+\r
+       /**\r
+        * @param state the state to set\r
+        */\r
+       public void setState(BerlinModelExportState<BerlinModelExportConfigurator> state) {\r
+               this.state = state;\r
+       }\r
+       \r
+       \r
+\r
        \r
 }\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportMapping.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportMapping.java
new file mode 100644 (file)
index 0000000..1b851b5
--- /dev/null
@@ -0,0 +1,127 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out;\r
+\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+import java.util.UUID;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter;\r
+import eu.etaxonomy.cdm.io.common.CdmAttributeMapperBase;\r
+import eu.etaxonomy.cdm.io.common.CdmIoMapping;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class BerlinModelExportMapping extends CdmIoMapping {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelExportMapping.class);\r
+       \r
+       private PreparedStatement preparedeStatement;\r
+       private String berlinModelTableName;\r
+       \r
+       public BerlinModelExportMapping(String tableName){\r
+               this.berlinModelTableName = tableName;\r
+       }\r
+       \r
+       public boolean initialize(BerlinModelExportState<?> state) throws SQLException{\r
+               BerlinModelExportConfigurator bmeConfig = (BerlinModelExportConfigurator)state.getConfig();\r
+               Source db = bmeConfig.getDestination();\r
+               \r
+               String preparedStatement = preparedStatement();\r
+               logger.debug(preparedStatement);\r
+               try {\r
+                       preparedeStatement = db.getConnection().prepareStatement(preparedStatement);\r
+                       IndexCounter index = new IndexCounter(1);\r
+                       for (CdmAttributeMapperBase mapper : this.mapperList){\r
+                               if (mapper instanceof IDbExportMapper){\r
+                                       IDbExportMapper<DbExportState<?>> dbMapper = (IDbExportMapper)mapper;\r
+                                       dbMapper.initialize(preparedeStatement, index, state, berlinModelTableName);\r
+                               }else{\r
+                                       logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());\r
+                               }\r
+                       }\r
+                       return true;\r
+               } catch (SQLException e) {\r
+                       logger.warn("SQL Exception");\r
+                       throw e;\r
+               }\r
+       }\r
+       \r
+       public boolean invoke(CdmBase cdmBase) throws SQLException{\r
+               try {\r
+                       boolean result = true;\r
+                       for (CdmAttributeMapperBase mapper : this.mapperList){\r
+                               if (mapper instanceof IDbExportMapper){\r
+                                       IDbExportMapper<DbExportState<?>> dbMapper = (IDbExportMapper)mapper;\r
+                                       try {\r
+                                               result &= dbMapper.invoke(cdmBase);\r
+                                       } catch (Exception e) {\r
+                                               result = false;\r
+                                               logger.error("Error occurred in mapping.invoke");\r
+                                               e.printStackTrace();\r
+                                               continue;\r
+                                       }\r
+                               }else{\r
+                                       logger.warn("mapper is not of type " + IDbExportMapper.class.getSimpleName());\r
+                               }\r
+                       }\r
+                       int count = preparedeStatement.executeUpdate();\r
+                       if (logger.isDebugEnabled())logger.debug("Number of rows affected: " + count);\r
+                       return result;\r
+               } catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage() + ": " + cdmBase.toString());\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       \r
+       \r
+       private String preparedStatement(){\r
+               String sqlInsert = "INSERT INTO " + getBerlinModelTableName() + " (";\r
+               String sqlValues = ") VALUES(";\r
+               String sqlEnd = ")";\r
+               String attributes = "";\r
+               String values = "";\r
+               for (String attribute : this.getDestinationAttributeList()){\r
+                       attributes +=  "," + attribute;\r
+                       values += ",?";\r
+               }\r
+               attributes = attributes.substring(1); //delete first ','\r
+               values = values.substring(1); //delete first ','\r
+               String result = sqlInsert + attributes + sqlValues + values + sqlEnd;\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * @return the berlinModelTableName\r
+        */\r
+       public String getBerlinModelTableName() {\r
+               return berlinModelTableName;\r
+       }\r
+\r
+       /**\r
+        * @param berlinModelTableName the berlinModelTableName to set\r
+        */\r
+       public void setBerlinModelTableName(String berlinModelTableName) {\r
+               this.berlinModelTableName = berlinModelTableName;\r
+       }\r
+       \r
+       \r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportState.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelExportState.java
new file mode 100644 (file)
index 0000000..b62613b
--- /dev/null
@@ -0,0 +1,57 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 11.05.2009\r
+ * @version 1.0\r
+ */\r
+public class BerlinModelExportState<CONFIG extends BerlinModelExportConfigurator> extends DbExportState<CONFIG>{\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(BerlinModelExportState.class);\r
+       \r
+       private Integer nextRefDetailId = null;\r
+       private Integer nextFactCategoryId = null;\r
+       \r
+       /**\r
+        * @return the nextRefDetailId\r
+        */\r
+       public Integer getNextRefDetailId() {\r
+               if (nextRefDetailId == null){\r
+                       //TODO\r
+                       nextRefDetailId = 1;\r
+               }\r
+               return nextRefDetailId++;\r
+       }\r
+       \r
+       /**\r
+        * @return the nextRefDetailId\r
+        */\r
+       public Integer getNextFactCategoryId() {\r
+               if (nextFactCategoryId == null){\r
+                       //TODO\r
+                       nextFactCategoryId = 30;\r
+               }\r
+               return nextFactCategoryId++;\r
+       }\r
+\r
+\r
+       /**\r
+        * @param nextRefDetailId the nextRefDetailId to set\r
+        */\r
+       public void setNextFactCategoryId(Integer nextFactCategoryId) {\r
+               this.nextFactCategoryId = nextFactCategoryId;\r
+       }\r
+\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelFactExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelFactExport.java
new file mode 100644 (file)
index 0000000..84785bb
--- /dev/null
@@ -0,0 +1,234 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.RefDetailMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.common.LanguageString;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+import eu.etaxonomy.cdm.model.description.DescriptionElementBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelFactExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelFactExport.class);\r
+\r
+       private static int modCount = 2500;\r
+       private static final String dbTableName = "Fact";\r
+       private static final String pluralString = "Facts";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = TextData.class;\r
+\r
+       public BerlinModelFactExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for " + pluralString + " not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+               mapping.addMapper(IdMapper.NewInstance("FactId"));\r
+               \r
+               \r
+//             mapping.addMapper(DbObjectMapper.NewInstance("name", "PTNameFk"));\r
+//             mapping.addMapper(DbObjectMapper.NewInstance("sec", "PTRefFk"));\r
+               \r
+               mapping.addMapper(MethodMapper.NewInstance("PTNameFk", this.getClass(), "getPTNameFk", TextData.class, DbExportState.class));\r
+               mapping.addMapper(MethodMapper.NewInstance("PTRefFk", this.getClass(), "getPTRefFk", TextData.class, DbExportState.class));\r
+               \r
+               mapping.addMapper(MethodMapper.NewInstance("Fact", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("FactCategoryFk", this));\r
+               \r
+               mapping.addMapper(DbObjectMapper.NewInstance("citation", "FactRefFk"));\r
+               mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));\r
+\r
+               mapping.addMapper(DbObjectMapper.NewInstance("citation", "PTDesignationRefFk"));\r
+               mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "PTDesignationRefDetailFk"));\r
+\r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+\r
+               \r
+               \r
+               \r
+               //TODO\r
+//            designationRef\r
+//                    doubtful\r
+//                             publish\r
+//             TextData t = null;\r
+//             t.get\r
+               return mapping;\r
+       }\r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               try{\r
+                       logger.info("start make " + pluralString + " ...");\r
+                       boolean success = true ;\r
+                       doDelete(state);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       \r
+                       List<DescriptionBase> list = getDescriptionService().list(1000000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       int count = 0;\r
+                       for (DescriptionBase<?> desc : list){\r
+                               for (DescriptionElementBase descEl : desc.getElements()){\r
+                                       doCount(count++, modCount, pluralString);\r
+                                       if (descEl.isInstanceOf(TextData.class)){\r
+                                               success &= mapping.invoke(descEl);              \r
+                                       }else{\r
+                                               logger.warn (descEl.getClass().getSimpleName() + " not yet supported for Fact Export.");\r
+                                       }\r
+                               }\r
+                       }\r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make " + pluralString + " ...");\r
+                       \r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       \r
+\r
+       \r
+       protected boolean doDelete(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               BerlinModelExportConfigurator bmeConfig = state.getConfig();\r
+               \r
+               String sql;\r
+               Source destination =  bmeConfig.getDestination();\r
+               //Fact\r
+               sql = "DELETE FROM Fact";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+\r
+               return true;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoTaxonNames();\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getFactCategoryFk(TextData textData){\r
+               Feature feature = textData.getFeature();\r
+               Integer catFk = BerlinModelTransformer.textData2FactCategoryFk(feature);\r
+               catFk = 302;\r
+               if (catFk == null){\r
+                       //catFk = findCategory(feature);\r
+               }\r
+               if (catFk == null){\r
+                       //catFk = insertCategory(feature);\r
+               }\r
+               return catFk;\r
+       }\r
+       \r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getPTNameFk(TextData textData, DbExportState<?> state){\r
+               return getObjectFk(textData, state, true);\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getPTRefFk(TextData textData, DbExportState<?> state){\r
+               return getObjectFk(textData, state, false);\r
+       }\r
+\r
+       private static Integer getObjectFk(TextData textData, DbExportState<?> state, boolean isName){\r
+               DescriptionBase<?> desc = textData.getInDescription();\r
+               if (desc.isInstanceOf(TaxonDescription.class)){\r
+                       TaxonDescription taxonDesc = (TaxonDescription)desc;\r
+                       Taxon taxon = taxonDesc.getTaxon();\r
+                       if (taxon != null){\r
+                               CdmBase cdmBase = (isName) ? taxon.getName(): taxon.getSec();\r
+                               return state.getDbId(cdmBase);\r
+                       }\r
+               }\r
+               logger.warn("No taxon found for description: " + textData.toString());\r
+               return null;\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getFact(TextData textData){\r
+//             Map<Language, LanguageString> map = textData.getMultilanguageText();\r
+               Language preferredLanguage = null;\r
+\r
+               String result = textData.getText(Language.DEFAULT());\r
+               if (result == null){\r
+                       Map<Language, LanguageString> map = textData.getMultilanguageText();\r
+                       for (Language language : map.keySet()){\r
+                               String tmp = textData.getText(language);\r
+                               if (! CdmUtils.Nz(tmp).trim().equals("")){\r
+                                       result = tmp;\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNameRelationExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNameRelationExport.java
new file mode 100644 (file)
index 0000000..c087301
--- /dev/null
@@ -0,0 +1,150 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.RefDetailMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
+import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelNameRelationExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelNameRelationExport.class);\r
+\r
+       private static int modCount = 1000;\r
+       private static final String dbTableName = "RelName";\r
+       private static final String pluralString = "NameRelationships";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = NameRelationship.class;\r
+\r
+\r
+       public BerlinModelNameRelationExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for " + pluralString + " not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+               mapping.addMapper(IdMapper.NewInstance("RelNameId"));\r
+\r
+               mapping.addMapper(DbObjectMapper.NewInstance("fromName", "NameFk1"));\r
+               mapping.addMapper(DbObjectMapper.NewInstance("toName", "NameFk1"));\r
+\r
+               \r
+               mapping.addMapper(MethodMapper.NewInstance("RelNameQualifierFk", this));\r
+               \r
+               mapping.addMapper(DbObjectMapper.NewInstance("citation", "RefFk"));\r
+               mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "RefDetailFk"));\r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+               \r
+//             NameRelationship r = null;\r
+//             r.getFromName()\r
+               \r
+               return mapping;\r
+       }\r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               try{\r
+                       logger.info("start make " + pluralString + " ...");\r
+                       boolean success = true ;\r
+                       doDelete(state);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       \r
+                       List<RelationshipBase> list = getNameService().getAllRelationships(100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       int count = 0;\r
+                       for (RelationshipBase<?,?,?> rel : list){\r
+                               if (rel.isInstanceOf(NameRelationship.class) || rel.isInstanceOf(HybridRelationship.class )){\r
+                                       doCount(count++, modCount, pluralString);\r
+                                       success &= mapping.invoke(rel);\r
+                               }\r
+                       }\r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make " + pluralString + " ...");\r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       \r
+       protected boolean doDelete(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               BerlinModelExportConfigurator bmeConfig = state.getConfig();\r
+               \r
+               String sql;\r
+               Source destination =  bmeConfig.getDestination();\r
+               //RelPTaxon\r
+               sql = "DELETE FROM RelPTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+\r
+               return true;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoTaxonNames();\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getRelNameQualifierFk(RelationshipBase<?, ?, ?> rel){\r
+               return BerlinModelTransformer.nameRel2RelNameQualifierFk(rel);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNomStatusExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelNomStatusExport.java
new file mode 100644 (file)
index 0000000..687b942
--- /dev/null
@@ -0,0 +1,156 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.RefDetailMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
+import eu.etaxonomy.cdm.model.name.HybridRelationship;\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelNomStatusExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelNomStatusExport.class);\r
+\r
+       private static int modCount = 1000;\r
+       private static final String dbTableName = "NomStatusRel";\r
+       private static final String pluralString = "NomStatus";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = NomenclaturalStatus.class;\r
+\r
+\r
+       public BerlinModelNomStatusExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for " + pluralString + " not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+//             NameFk\r
+//             NomStatusFk\r
+//             NomStatusRefFk\r
+//             NomStatusRefDetailFk\r
+//             DoubtfulFlag\r
+               \r
+               mapping.addMapper(DbObjectMapper.NewInstance("fromName", "NameFk"));\r
+               mapping.addMapper(DbObjectMapper.NewInstance("toName", "NameFk1"));\r
+\r
+               \r
+               mapping.addMapper(MethodMapper.NewInstance("NomStatusFk", this));\r
+               \r
+               mapping.addMapper(DbObjectMapper.NewInstance("citation", "NomStatusRefFk"));\r
+               mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "NomStatusRefDetailFk"));\r
+               \r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+               \r
+               NomenclaturalStatus r = null;\r
+               \r
+               \r
+               return mapping;\r
+       }\r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               try{\r
+                       logger.info("start make " + pluralString + " ...");\r
+                       boolean success = true ;\r
+                       doDelete(state);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       \r
+                       List<RelationshipBase> list = getNameService().getAllRelationships(100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       int count = 0;\r
+                       for (RelationshipBase<?,?,?> rel : list){\r
+                               if (rel.isInstanceOf(NameRelationship.class) || rel.isInstanceOf(HybridRelationship.class )){\r
+                                       doCount(count++, modCount, pluralString);\r
+                                       success &= mapping.invoke(rel);\r
+                               }\r
+                       }\r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make " + pluralString + " ...");\r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       \r
+       protected boolean doDelete(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               BerlinModelExportConfigurator bmeConfig = state.getConfig();\r
+               \r
+               String sql;\r
+               Source destination =  bmeConfig.getDestination();\r
+               //RelPTaxon\r
+               sql = "DELETE FROM RelPTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+\r
+               return true;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoTaxonNames();\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getNomStatusFk(NomenclaturalStatus status){\r
+               return BerlinModelTransformer.nomStatus2nomStatusFk(status);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelReferenceExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelReferenceExport.java
new file mode 100644 (file)
index 0000000..be3eea1
--- /dev/null
@@ -0,0 +1,270 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbBooleanMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbStringMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.reference.Article;\r
+import eu.etaxonomy.cdm.model.reference.BookSection;\r
+import eu.etaxonomy.cdm.model.reference.InProceedings;\r
+import eu.etaxonomy.cdm.model.reference.PrintedUnitBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.StrictReferenceBase;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelReferenceExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelReferenceExport.class);\r
+\r
+       private static int modCount = 1000;\r
+       private static final String dbTableName = "Reference";\r
+       private static final String pluralString = "references";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = StrictReferenceBase.class;\r
+\r
+       public BerlinModelReferenceExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for Authors not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+               mapping.addMapper(IdMapper.NewInstance("RefId"));\r
+               mapping.addMapper(MethodMapper.NewInstance("RefCategoryFk", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("RefCache", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("NomRefCache", this));\r
+               mapping.addMapper(DbBooleanMapper.NewFalseInstance("isProtectedTitleCache","PreliminaryFlag"));\r
+\r
+               mapping.addMapper(DbObjectMapper.NewInstance("authorTeam", "NomAuthorTeamFk"));\r
+               mapping.addMapper(MethodMapper.NewInstance("RefAuthorString", this));\r
+               \r
+               mapping.addMapper(DbStringMapper.NewInstance("title", "Title"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("title", "NomTitleAbbrev"));\r
+               \r
+               mapping.addMapper(DbStringMapper.NewFacultativeInstance("edition", "Edition"));\r
+               mapping.addMapper(DbStringMapper.NewFacultativeInstance("volume", "Volume"));\r
+               mapping.addMapper(DbStringMapper.NewFacultativeInstance("series", "Series"));\r
+               mapping.addMapper(DbStringMapper.NewFacultativeInstance("pages", "PageString"));\r
+               mapping.addMapper(DbStringMapper.NewFacultativeInstance("isbn", "ISBN"));\r
+               mapping.addMapper(DbStringMapper.NewFacultativeInstance("issn", "ISSN"));\r
+               \r
+\r
+               \r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+          \r
+//                     ,[Series] ??\r
+//                     ,[RefYear]\r
+//                     ,[DateString]\r
+//                     ,[URL]\r
+//                     ,[ExportDate]\r
+//                     ,[PublicationTown]\r
+//                     ,[Publisher]\r
+//                     ,[ThesisFlag]\r
+//                     ,[RefDepositedAt]\r
+//                     ,[InformalRefCategory]\r
+//                     ,[IsPaper]\r
+//                     ,[RefSourceFk]\r
+//                     ,[IdInSource]\r
+//                     ,[NomStandard]\r
+\r
+                      \r
+               return mapping;\r
+       }\r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               try{\r
+                       logger.info("start make "+pluralString+" ...");\r
+                       boolean success = true ;\r
+                       //Prepare InRefStatement\r
+                       String inRefSql = "UPDATE Reference SET InRefFk = ? WHERE RefId = ?"; \r
+                       Connection con = state.getConfig().getDestination().getConnection();\r
+                       PreparedStatement stmt = con.prepareStatement(inRefSql);\r
+\r
+                       doDelete(state);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       \r
+                       List<ReferenceBase> list = getReferenceService().list(100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       int count = 0;\r
+                       for (ReferenceBase<?> ref : list){\r
+                               doCount(count++, modCount, pluralString);\r
+                               success &= mapping.invoke(ref);\r
+                       }\r
+                       logger.info("start make inRefences ...");\r
+                       count = 0;\r
+                       for (ReferenceBase<?> ref : list){\r
+                               doCount(count++, modCount, "inReferences");\r
+                               success &= invokeInRef(ref, state, stmt);\r
+                       }\r
+                       \r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make "+pluralString+" ...");\r
+                       \r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       protected boolean invokeInRef(ReferenceBase ref, BerlinModelExportState<BerlinModelExportConfigurator> state, PreparedStatement stmt) {\r
+               if (ref == null){\r
+                       return true;\r
+               }else{\r
+                       ReferenceBase<?> inRef = getInRef(ref);\r
+                       if (inRef == null){\r
+                               return true;\r
+                       }else{\r
+                               Integer inRefId = state.getDbId(inRef);\r
+                               Integer refId = state.getDbId(ref);\r
+                               try {\r
+                                       stmt.setInt(1, inRefId);\r
+                                       stmt.setInt(2, refId);\r
+                                       stmt.executeUpdate();\r
+                                       return true;\r
+                               } catch (SQLException e) {\r
+                                       logger.error("SQLException during inRef invoke for reference " + ref.getTitleCache() + ": " + e.getMessage());\r
+                                       e.printStackTrace();\r
+                                       return false;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       private ReferenceBase<?> getInRef(ReferenceBase<?> ref){\r
+               ReferenceBase<?> inRef;\r
+               if (ref instanceof Article){\r
+                       return ((Article)ref).getInJournal();\r
+               }else if (ref instanceof BookSection){\r
+                       return ((BookSection)ref).getInBook();\r
+               }else if (ref instanceof InProceedings){\r
+                       return ((InProceedings)ref).getInProceedings();\r
+               }else if (ref instanceof PrintedUnitBase){\r
+                       return ((PrintedUnitBase)ref).getInSeries();\r
+               }else{\r
+                       return null;\r
+               }\r
+               \r
+       }\r
+       \r
+       protected boolean doDelete(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               BerlinModelExportConfigurator bmeConfig = state.getConfig();\r
+               \r
+               String sql;\r
+               Source destination =  bmeConfig.getDestination();\r
+\r
+               //RelReference\r
+               sql = "DELETE FROM RelReference";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //References\r
+               sql = "DELETE FROM Reference";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               return true;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoTaxonNames();\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       private static Integer getRefCategoryFk(StrictReferenceBase<?> ref){\r
+               return BerlinModelTransformer.ref2refCategoryId(ref);\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       private static String getRefCache(StrictReferenceBase<?> ref){\r
+               if (ref.isProtectedTitleCache()){\r
+                       return ref.getTitleCache();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+\r
+       //called by MethodMapper\r
+       private static String getNomRefCache(StrictReferenceBase<?> ref){\r
+               if (ref.isProtectedTitleCache()){\r
+                       return ref.getTitleCache();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       private static String getRefAuthorString(StrictReferenceBase<?> ref){\r
+               if (ref == null){\r
+                       return null;\r
+               }else{\r
+                       return (ref.getAuthorTeam() == null)? null: ref.getAuthorTeam().getTitleCache();\r
+               }\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       private static Boolean getPreliminaryFlag(StrictReferenceBase<?> ref){\r
+               if (ref.isProtectedTitleCache()){\r
+                       return true;\r
+               }else{\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonExport.java
new file mode 100644 (file)
index 0000000..ecff167
--- /dev/null
@@ -0,0 +1,158 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbBooleanMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbNullMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelTaxonExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelTaxonExport.class);\r
+\r
+       private static int modCount = 1000;\r
+       private static final String dbTableName = "PTaxon";\r
+       private static final String pluralString = "Taxa";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = TaxonBase.class;\r
+\r
+       public BerlinModelTaxonExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for " + pluralString + " not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+               mapping.addMapper(DbObjectMapper.NewInstance("name", "PTNameFk"));\r
+               mapping.addMapper(DbObjectMapper.NewInstance("sec", "PTRefFk"));\r
+               mapping.addMapper(DbNullMapper.NewInstance("Detail", Types.VARCHAR));\r
+               mapping.addMapper(MethodMapper.NewInstance("StatusFk", this));\r
+               mapping.addMapper(DbBooleanMapper.NewInstance("isDoubtful", "DoubtfulFlag"));\r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+\r
+               //TODO\r
+//             ,[RIdentifier]\r
+//                     ,[IdInSource]\r
+//                     ,ProParte etc.\r
+//                     ,[NamePhrase]\r
+//                     ,[UseNameCacheFlag]\r
+//                     ,[PublishFlag]\r
+//             TaxonBase<?> n = null;\r
+//             n.isDoubtful()\r
+               return mapping;\r
+       }\r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               try{\r
+                       logger.info("start make " + pluralString + " ...");\r
+                       boolean success = true ;\r
+                       doDelete(state);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       \r
+                       List<TaxonBase> list = getTaxonService().list(100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       int count = 0;\r
+                       for (TaxonBase<?> taxon : list){\r
+                               doCount(count++, modCount, pluralString);\r
+                               success &= mapping.invoke(taxon);\r
+                       }\r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make " + pluralString + " ...");\r
+                       \r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       \r
+\r
+       \r
+       protected boolean doDelete(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               BerlinModelExportConfigurator bmeConfig = state.getConfig();\r
+               \r
+               String sql;\r
+               Source destination =  bmeConfig.getDestination();\r
+               //RelPTaxon\r
+               sql = "DELETE FROM RelPTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //Fact\r
+               sql = "DELETE FROM Fact";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //PTaxon\r
+               sql = "DELETE FROM PTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+\r
+               return true;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoTaxonNames();\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getStatusFk(TaxonBase<?> taxon){\r
+               return BerlinModelTransformer.taxonBase2statusFk(taxon);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonNameExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonNameExport.java
new file mode 100644 (file)
index 0000000..21409f5
--- /dev/null
@@ -0,0 +1,253 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbBooleanMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbStringMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.RefDetailMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.name.NonViralName;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelTaxonNameExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelTaxonNameExport.class);\r
+\r
+       private static int modCount = 2500;\r
+       private static final String dbTableName = "Name";\r
+       private static final String pluralString = "TaxonNames";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = NonViralName.class;\r
+\r
+       public BerlinModelTaxonNameExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for " + pluralString + " not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+               mapping.addMapper(IdMapper.NewInstance("NameId"));\r
+               mapping.addMapper(MethodMapper.NewInstance("RankFk", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("SupraGenericName", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("Genus", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("NameCache", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("FullNameCache", this));\r
+               mapping.addMapper(MethodMapper.NewInstance("PreliminaryFlag", this));\r
+               mapping.addMapper(DbStringMapper.NewInstance("infraGenericEpithet", "GenusSubDivisionEpi"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("SpecificEpithet", "SpeciesEpi"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("infraSpecificEpithet", "InfraSpeciesEpi"));\r
+               mapping.addMapper(DbStringMapper.NewInstance("appendedPhrase", "UnnamedNamePhrase"));\r
+               mapping.addMapper(DbBooleanMapper.NewInstance("isHybridFormula", "HybridFormulaFlag", false, false));\r
+               mapping.addMapper(DbBooleanMapper.NewInstance("isMonomHybrid", "MonomHybFlag", false, false));\r
+               mapping.addMapper(DbBooleanMapper.NewInstance("isBinomHybrid", "BinomHybFlag", false, false));\r
+               mapping.addMapper(DbBooleanMapper.NewInstance("isTrinomHybrid", "TrinomHybFlag", false, false));\r
+               mapping.addMapper(DbStringMapper.NewFacultativeInstance("cultivarName", "CultivarName"));\r
+               \r
+               mapping.addMapper(DbObjectMapper.NewInstance("combinationAuthorTeam", "AuthorTeamFk"));\r
+               mapping.addMapper(DbObjectMapper.NewInstance("exCombinationAuthorTeam", "ExAuthorTeamFk"));\r
+               mapping.addMapper(DbObjectMapper.NewInstance("basionymAuthorTeam", "BasAuthorTeamFk"));\r
+               mapping.addMapper(DbObjectMapper.NewInstance("exBasionymAuthorTeam", "ExBasAuthorTeamFk"));\r
+               \r
+               mapping.addMapper(DbObjectMapper.NewInstance("nomenclaturalReference", "NomRefFk"));\r
+               mapping.addMapper(RefDetailMapper.NewInstance("nomenclaturalMicroReference","nomenclaturalReference", "NomRefDetailFk"));\r
+               \r
+               \r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance(false));\r
+               //TODO\r
+               //CultivarGroupName\r
+               //NameSourceRefFk\r
+               //     ,[Source_ACC]\r
+               \r
+               //publicationYear\r
+               //originalPublicationYear\r
+               //breed\r
+               NonViralName<?> n = null;\r
+               //n.getNomenclaturalMicroReference()\r
+               return mapping;\r
+       }\r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               try{\r
+                       logger.info("start make "+pluralString+" ...");\r
+                       boolean success = true ;\r
+                       doDelete(state);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       \r
+                       List<TaxonNameBase> names = getNameService().list(100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       int count = 0;\r
+                       for (TaxonNameBase<?,?> name : names){\r
+                               doCount(count++, modCount, pluralString);\r
+                               success &= mapping.invoke(name);\r
+                               //TODO rank = null or rank < genus and genusOrUninomial != null\r
+                       }\r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make " + pluralString+ " ...");\r
+                       \r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       \r
+\r
+       \r
+       protected boolean doDelete(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               BerlinModelExportConfigurator bmeConfig = state.getConfig();\r
+               \r
+               String sql;\r
+               Source destination =  bmeConfig.getDestination();\r
+               //RelPTaxon\r
+               sql = "DELETE FROM RelPTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //Fact\r
+               sql = "DELETE FROM Fact";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //PTaxon\r
+               sql = "DELETE FROM PTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               \r
+               //NameHistory\r
+               sql = "DELETE FROM NameHistory";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //RelName\r
+               sql = "DELETE FROM RelName";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //NomStatusRel\r
+               sql = "DELETE FROM NomStatusRel";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               //Name\r
+               sql = "DELETE FROM Name";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+               return true;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoTaxonNames();\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getRankFk(NonViralName<?> name){\r
+               return BerlinModelTransformer.rank2RankId(name.getRank());\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getSupraGenericName(NonViralName<?> name){\r
+               if (name.isSupraGeneric()){\r
+                       return name.getGenusOrUninomial();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getGenus(NonViralName<?> name){\r
+               if (! name.isSupraGeneric()){\r
+                       return name.getGenusOrUninomial();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+\r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getNameCache(NonViralName<?> name){\r
+               if (name.isProtectedNameCache()){\r
+                       return name.getNameCache();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+\r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getFullNameCache(NonViralName<?> name){\r
+               if (name.isProtectedTitleCache()){\r
+                       return name.getTitleCache();\r
+               }else{\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Boolean getPreliminaryFlag(NonViralName<?> name){\r
+               if (name.isProtectedTitleCache() || name.isProtectedNameCache()){\r
+                       if (name.isProtectedTitleCache() && name.isProtectedNameCache()){\r
+                               logger.warn("protectedTitleCache and protectedNameCache do not have the same value for name " + name.getTitleCache() + ". This can not be mapped appropriately to the Berlin Model ");\r
+                       }\r
+                       return true;\r
+               }else{\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonRelationExport.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/BerlinModelTaxonRelationExport.java
new file mode 100644 (file)
index 0000000..2b669f0
--- /dev/null
@@ -0,0 +1,188 @@
+/**\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.io.berlinModel.out;\r
+\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.CreatedAndNotesMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbObjectMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.IdMapper;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.mapper.MethodMapper;\r
+import eu.etaxonomy.cdm.io.common.IExportConfigurator;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.RelationshipBase;\r
+import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 20.03.2008\r
+ * @version 1.0\r
+ */\r
+@Component\r
+public class BerlinModelTaxonRelationExport extends BerlinModelExportBase {\r
+       private static final Logger logger = Logger.getLogger(BerlinModelTaxonRelationExport.class);\r
+\r
+       private static int modCount = 1000;\r
+       private static final String dbTableName = "RelPTaxon";\r
+       private static final String pluralString = "TaxonRelationships";\r
+       private static final Class<? extends CdmBase> standardMethodParameter = RelationshipBase.class;\r
+\r
+\r
+       public BerlinModelTaxonRelationExport(){\r
+               super();\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       @Override\r
+       protected boolean doCheck(IExportConfigurator config){\r
+               boolean result = true;\r
+               logger.warn("Checking for " + pluralString + " not yet implemented");\r
+               //result &= checkArticlesWithoutJournal(bmiConfig);\r
+               //result &= checkPartOfJournal(bmiConfig);\r
+               \r
+               return result;\r
+       }\r
+       \r
+       private BerlinModelExportMapping getMapping(){\r
+               String tableName = dbTableName;\r
+               BerlinModelExportMapping mapping = new BerlinModelExportMapping(tableName);\r
+//             mapping.addMapper(IdMapper.NewInstance("RelPTaxonId"));  //is Identity column\r
+               \r
+               mapping.addMapper(MethodMapper.NewInstance("PTNameFk1", this.getClass(), "getPTNameFk1", standardMethodParameter, DbExportState.class));\r
+               mapping.addMapper(MethodMapper.NewInstance("PTRefFk1", this.getClass(), "getPTRefFk1", standardMethodParameter, DbExportState.class));\r
+               \r
+               mapping.addMapper(MethodMapper.NewInstance("PTNameFk2", this.getClass(), "getPTNameFk2", standardMethodParameter, DbExportState.class));\r
+               mapping.addMapper(MethodMapper.NewInstance("PTRefFk2", this.getClass(), "getPTRefFk2", standardMethodParameter, DbExportState.class));\r
+               \r
+               mapping.addMapper(MethodMapper.NewInstance("RelQualifierFk", this));\r
+               \r
+               mapping.addMapper(DbObjectMapper.NewInstance("citation", "RelRefFk"));\r
+//             mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));\r
+               mapping.addMapper(CreatedAndNotesMapper.NewInstance());\r
+\r
+               return mapping;\r
+       }\r
+       \r
+       protected boolean doInvoke(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               try{\r
+                       logger.info("start make " + pluralString + " ...");\r
+                       boolean success = true ;\r
+                       doDelete(state);\r
+                       \r
+                       TransactionStatus txStatus = startTransaction(true);\r
+                       \r
+                       List<RelationshipBase> list = getTaxonService().getAllRelationships(100000000, 0);\r
+                       \r
+                       BerlinModelExportMapping mapping = getMapping();\r
+                       mapping.initialize(state);\r
+                       \r
+                       int count = 0;\r
+                       for (RelationshipBase<?,?,?> rel : list){\r
+                               if (rel.isInstanceOf(TaxonRelationship.class) || rel.isInstanceOf(SynonymRelationship.class)){\r
+                                       doCount(count++, modCount, pluralString);\r
+                                       success &= mapping.invoke(rel);\r
+                               }\r
+                       }\r
+                       commitTransaction(txStatus);\r
+                       logger.info("end make " + pluralString + " ...");\r
+                       return success;\r
+               }catch(SQLException e){\r
+                       e.printStackTrace();\r
+                       logger.error(e.getMessage());\r
+                       return false;\r
+               }\r
+       }\r
+\r
+       \r
+       protected boolean doDelete(BerlinModelExportState<BerlinModelExportConfigurator> state){\r
+               BerlinModelExportConfigurator bmeConfig = state.getConfig();\r
+               \r
+               String sql;\r
+               Source destination =  bmeConfig.getDestination();\r
+               //RelPTaxon\r
+               sql = "DELETE FROM RelPTaxon";\r
+               destination.setQuery(sql);\r
+               destination.update(sql);\r
+\r
+               return true;\r
+       }\r
+               \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
+        */\r
+       protected boolean isIgnore(IExportConfigurator config){\r
+               return ! ((BerlinModelExportConfigurator)config).isDoTaxonNames();\r
+       }\r
+       \r
+       //called by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static Integer getRelQualifierFk(RelationshipBase<?, ?, ?> rel){\r
+               return BerlinModelTransformer.taxRelation2relPtQualifierFk(rel);\r
+       }\r
+       \r
+       @SuppressWarnings("unused")\r
+       private static Integer getPTNameFk1(RelationshipBase<?, ?, ?> rel, DbExportState<?> state){\r
+               return getObjectFk(rel, state, true, true);\r
+       }\r
+       \r
+       @SuppressWarnings("unused")\r
+       private static Integer getPTRefFk1(RelationshipBase<?, ?, ?> rel, DbExportState<?> state){\r
+               return getObjectFk(rel, state, false, true);\r
+       }\r
+       \r
+       @SuppressWarnings("unused")\r
+       private static Integer getPTNameFk2(RelationshipBase<?, ?, ?> rel, DbExportState<?> state){\r
+               return getObjectFk(rel, state, true, false);\r
+       }\r
+       \r
+       @SuppressWarnings("unused")\r
+       private static Integer getPTRefFk2(RelationshipBase<?, ?, ?> rel, DbExportState<?> state){\r
+               return getObjectFk(rel, state, false, false);\r
+       }\r
+\r
+       private static Integer getObjectFk(RelationshipBase<?, ?, ?> rel, DbExportState<?> state, boolean isName, boolean isFrom){\r
+               TaxonBase<?> taxon = null;\r
+               if (rel.isInstanceOf(TaxonRelationship.class)){\r
+                       TaxonRelationship tr = (TaxonRelationship)rel;\r
+                       taxon = (isFrom) ? tr.getFromTaxon():  tr.getToTaxon();\r
+               }else if (rel.isInstanceOf(SynonymRelationship.class)){\r
+                       SynonymRelationship sr = (SynonymRelationship)rel;\r
+                       taxon = (isFrom) ? sr.getSynonym() : sr.getAcceptedTaxon();\r
+               }\r
+               if (taxon != null){\r
+                       CdmBase cdmBase = (isName) ? taxon.getName(): taxon.getSec();\r
+                       return state.getDbId(cdmBase);\r
+               }\r
+               logger.warn("No taxon found for relationship: " + rel.toString());\r
+               return null;\r
+       }\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()\r
+        */\r
+       @Override\r
+       public Class<? extends CdmBase> getStandardMethodParameter() {\r
+               return standardMethodParameter;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/DbExportState.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/DbExportState.java
new file mode 100644 (file)
index 0000000..00b64eb
--- /dev/null
@@ -0,0 +1,49 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.UUID;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 11.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbExportState<CONFIG extends BerlinModelExportConfigurator> extends IoState<CONFIG> {\r
+       private static final Logger logger = Logger.getLogger(DbExportState.class);\r
+       \r
+       Map<UUID, Integer> dbIdMap = new HashMap<UUID, Integer>();\r
+       \r
+       \r
+       public void putDbId(CdmBase cdmBase, int dbId){\r
+               if (cdmBase != null){\r
+                       dbIdMap.put(cdmBase.getUuid(), dbId);\r
+               }else{\r
+                       logger.warn("CdmBase was (null) and could not be added to dbIdMap");\r
+               }\r
+       }\r
+       \r
+       public Integer getDbId(CdmBase cdmBase){\r
+               if (cdmBase != null){\r
+                       return dbIdMap.get(cdmBase.getUuid());\r
+               }else{\r
+                       logger.warn("CdmBase was (null). No entries in dbIdMap available");\r
+                       return null;\r
+               }\r
+       }\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/IoState.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/IoState.java
new file mode 100644 (file)
index 0000000..9ce3949
--- /dev/null
@@ -0,0 +1,41 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.io.common.IIoConfigurator;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 11.05.2009\r
+ * @version 1.0\r
+ */\r
+public class IoState<CONFIG extends IIoConfigurator> {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(IoState.class);\r
+       \r
+       CONFIG config;\r
+       \r
+       /**\r
+        * @return the config\r
+        */\r
+       public CONFIG getConfig() {\r
+               return config;\r
+       }\r
+\r
+       /**\r
+        * @param config the config to set\r
+        */\r
+       public void setConfig(CONFIG config) {\r
+               this.config = config;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/CreatedAndNotesMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/CreatedAndNotesMapper.java
new file mode 100644 (file)
index 0000000..c9194c4
--- /dev/null
@@ -0,0 +1,90 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.io.common.MultipleAttributeMapperBase;\r
+import eu.etaxonomy.cdm.model.common.AnnotatableEntity;\r
+import eu.etaxonomy.cdm.model.common.Annotation;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class CreatedAndNotesMapper extends MultipleAttributeMapperBase<DbSingleAttributeExportMapperBase<DbExportState<?>>> implements IDbExportMapper<DbExportState<?>>{\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(CreatedAndNotesMapper.class);\r
+       \r
+       public static CreatedAndNotesMapper NewInstance(){\r
+               return new CreatedAndNotesMapper(true);\r
+       }\r
+       \r
+       public static CreatedAndNotesMapper NewInstance(boolean withUpdate){\r
+               return new CreatedAndNotesMapper(withUpdate);\r
+       }\r
+\r
+       \r
+       /**\r
+        * @param dbAttributString\r
+        * @param cdmAttributeString\r
+        */\r
+       private CreatedAndNotesMapper(boolean withUpdate) {\r
+               singleMappers.add(DbStringMapper.NewInstance("createdBy", "Created_Who"));\r
+               singleMappers.add(DbDateMapper.NewInstance("created", "Created_When"));\r
+               singleMappers.add(MethodMapper.NewInstance("Notes", this.getClass(), "getNotes", AnnotatableEntity.class));\r
+               if (withUpdate){\r
+                       singleMappers.add(DbStringMapper.NewInstance("updatedBy", "Updated_Who"));\r
+                       singleMappers.add(DbDateMapper.NewInstance("updated", "Updated_When"));\r
+               }\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#initialize(java.sql.PreparedStatement, eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter, eu.etaxonomy.cdm.io.berlinModel.out.DbExportState)\r
+        */\r
+       public void initialize(PreparedStatement stmt, IndexCounter index, DbExportState<?> state, String tableName) {\r
+               for (DbSingleAttributeExportMapperBase<DbExportState<?>> mapper : singleMappers){\r
+                       mapper.initialize(stmt, index, state, tableName);\r
+               }       \r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#invoke(eu.etaxonomy.cdm.model.common.CdmBase)\r
+        */\r
+       public boolean invoke(CdmBase cdmBase) throws SQLException {\r
+               boolean result = true;\r
+               for (DbSingleAttributeExportMapperBase<DbExportState<?>> mapper : singleMappers){\r
+                       result &= mapper.invoke(cdmBase);\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       //used by MethodMapper\r
+       @SuppressWarnings("unused")\r
+       private static String getNotes(AnnotatableEntity obj){\r
+               String result = "";\r
+               String separator = ";";\r
+               for (Annotation annotation :obj.getAnnotations()){\r
+                       result = CdmUtils.concat(separator, result, annotation.getText());\r
+               }\r
+               return (result.trim().equals("")? null : result);\r
+       }\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbBooleanMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbBooleanMapper.java
new file mode 100644 (file)
index 0000000..fa1ff60
--- /dev/null
@@ -0,0 +1,103 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.SQLException;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.common.ImportHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbBooleanMapper extends DbSingleAttributeExportMapperBase implements IDbExportMapper {\r
+       private static final Logger logger = Logger.getLogger(DbBooleanMapper.class);\r
+       \r
+       public static DbBooleanMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new DbBooleanMapper(cdmAttributeString, dbAttributeString, null, false);\r
+       }\r
+\r
+       public static DbBooleanMapper NewInstance(String cdmAttributeString, String dbAttributeString, Boolean defaultValue){\r
+               return new DbBooleanMapper(cdmAttributeString, dbAttributeString, defaultValue, false);\r
+       }\r
+       \r
+       public static DbBooleanMapper NewFalseInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new DbBooleanMapper(cdmAttributeString, dbAttributeString, false, false);\r
+       }\r
+       \r
+       public static DbBooleanMapper NewInstance(String cdmAttributeString, String dbAttributeString, Boolean defaultValue, Boolean obligatory){\r
+               return new DbBooleanMapper(cdmAttributeString, dbAttributeString, false, obligatory);\r
+       }\r
+       \r
+       /**\r
+        * @param dbAttributeString\r
+        * @param cdmAttributeString\r
+        */\r
+       private DbBooleanMapper(String cdmAttributeString, String dbAttributeString, Boolean defaultValue, Boolean obligatory) {\r
+               super(cdmAttributeString, dbAttributeString, defaultValue, obligatory);\r
+       }\r
+       \r
+       \r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbExportMapperBase#doInvoke(eu.etaxonomy.cdm.model.common.CdmBase)\r
+//      */\r
+//     @Override\r
+//     public boolean doInvoke(CdmBase cdmBase) throws SQLException{\r
+//             try {\r
+//                     Boolean value = (Boolean)getValue(cdmBase);\r
+//                     if (value == null){\r
+//                             getPreparedStatement().setNull(getIndex(), Types.BOOLEAN);\r
+//                     }else{\r
+//                             getPreparedStatement().setBoolean(getIndex(), value);\r
+//                     }\r
+//                     return true;\r
+//             } catch (SQLException e) {\r
+//                     logger.warn("SQL Exception: " + e.getLocalizedMessage());\r
+//                     throw e;\r
+//             }\r
+//     }\r
+       \r
+\r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+//      */\r
+//     @Override\r
+//     protected Object getValue(CdmBase cdmBase) {\r
+//             boolean obligat = false;\r
+//             return (Boolean)ImportHelper.getValue(cdmBase, this.getSourceAttribute(), this.getTypeClass(), false, obligat);\r
+//     }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.BOOLEAN;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return Boolean.class;\r
+       }\r
+\r
+\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbClobMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbClobMapper.java
new file mode 100644 (file)
index 0000000..73b8800
--- /dev/null
@@ -0,0 +1,62 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbClobMapper extends DbSingleAttributeExportMapperBase<DbExportState<?>> implements IDbExportMapper<DbExportState<?>> {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(DbClobMapper.class);\r
+       \r
+       public static DbClobMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new DbClobMapper(cdmAttributeString, dbAttributeString, null);\r
+       }\r
+\r
+       public static DbClobMapper NewInstance(String cdmAttributeString, String dbAttributeString, String defaultValue){\r
+               return new DbClobMapper(cdmAttributeString, dbAttributeString, defaultValue);\r
+       }\r
+\r
+       /**\r
+        * @param dbAttributeString\r
+        * @param cdmAttributeString\r
+        */\r
+       private DbClobMapper(String cdmAttributeString, String dbAttributeString, String defaultValue) {\r
+               super(cdmAttributeString, dbAttributeString, defaultValue);\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.CLOB;\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return String.class;\r
+       }\r
+\r
+\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbDateMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbDateMapper.java
new file mode 100644 (file)
index 0000000..8b7c50f
--- /dev/null
@@ -0,0 +1,98 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+import org.joda.time.DateTime;\r
+\r
+import eu.etaxonomy.cdm.io.common.ImportHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbDateMapper extends DbSingleAttributeExportMapperBase implements IDbExportMapper {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(DbStringMapper.class);\r
+       \r
+       public static DbDateMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new DbDateMapper(cdmAttributeString, dbAttributeString, null);\r
+       }\r
+\r
+       public static DbDateMapper NewInstance(String cdmAttributeString, String dbAttributeString, DateTime defaultValue){\r
+               return new DbDateMapper(cdmAttributeString, dbAttributeString, defaultValue);\r
+       }\r
+       \r
+       /**\r
+        * @param dbAttributeString\r
+        * @param cdmAttributeString\r
+        */\r
+       private DbDateMapper(String cdmAttributeString, String dbAttributeString, DateTime defaultValue) {\r
+               super(cdmAttributeString, dbAttributeString, defaultValue);\r
+       }       \r
+       \r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbExportMapperBase#doInvoke(eu.etaxonomy.cdm.model.common.CdmBase)\r
+//      */\r
+//     @Override\r
+//     protected boolean doInvoke(CdmBase cdmBase) throws SQLException{\r
+//             boolean obligat = true;\r
+//             try {\r
+//                     DateTime value = (DateTime)ImportHelper.getValue(\r
+//                                     cdmBase, this.getSourceAttribute(), this.getTypeClass(), false, obligat);\r
+//                     if (value == null){\r
+//                             getPreparedStatement().setNull(getIndex(), Types.DATE);\r
+//                     }else{\r
+//                             java.util.Date date = value.toDate();\r
+//                             long t = date.getTime();\r
+//                             java.sql.Date sqlDate = new java.sql.Date(t);\r
+//                             getPreparedStatement().setDate(getIndex(), sqlDate);\r
+//                     }\r
+//                     return true;\r
+//             } catch (SQLException e) {\r
+//                     logger.warn("SQL Exception: " + e.getLocalizedMessage());\r
+//                     throw e;\r
+//             }\r
+//     }\r
+       \r
+//\r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+//      */\r
+//     @Override\r
+//     protected Object getValue(CdmBase cdmBase) {\r
+//             boolean obligat = true;\r
+//             return (DateTime)ImportHelper.getValue(cdmBase, this.getSourceAttribute(), this.getTypeClass(), false, obligat);\r
+//     }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.DATE;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return DateTime.class;\r
+       }\r
+\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbExportMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbExportMapperBase.java
new file mode 100644 (file)
index 0000000..eada544
--- /dev/null
@@ -0,0 +1,90 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.PreparedStatement;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportState;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbExportMapperBase<STATE extends DbExportState<?>>  /*implements IDbExportMapper */{\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(DbExportMapperBase.class);\r
+\r
+       protected PreparedStatement preparedStatement = null;\r
+       protected int index = 0;\r
+       private STATE state;\r
+       private String tableName;\r
+       \r
+\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#initialize(java.sql.PreparedStatement, int)\r
+        */\r
+       public void initialize(PreparedStatement stmt, IndexCounter index, STATE state, String tableName) {\r
+               this.preparedStatement = stmt;\r
+               this.index = index.getIncreasing();\r
+               this.state = state;\r
+               this.tableName = tableName;\r
+       }\r
+\r
+\r
+       /**\r
+        * @return the preparedStatement\r
+        */\r
+       public PreparedStatement getPreparedStatement() {\r
+               return preparedStatement;\r
+       }\r
+       \r
+       /**\r
+        * @return the index\r
+        */\r
+       public int getIndex() {\r
+               return index;\r
+       }\r
+\r
+\r
+       /**\r
+        * @return the state\r
+        */\r
+       public STATE getState() {\r
+               return state;\r
+       }\r
+\r
+\r
+       /**\r
+        * @return the tableName\r
+        */\r
+       public String getTableName() {\r
+               return tableName;\r
+       }\r
+\r
+\r
+       /**\r
+        * @param tableName the tableName to set\r
+        */\r
+       public void setTableName(String tableName) {\r
+               this.tableName = tableName;\r
+       }\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbNullMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbNullMapper.java
new file mode 100644 (file)
index 0000000..c64d602
--- /dev/null
@@ -0,0 +1,72 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.SQLException;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportConfigurator.IdType;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbNullMapper extends DbSingleAttributeExportMapperBase<DbExportState<?>> implements IDbExportMapper<DbExportState<?>>{\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(DbNullMapper.class);\r
+       private int sqlType;\r
+       \r
+       public static DbNullMapper NewInstance(String dbIdAttributeString, int sqlType){\r
+               return new DbNullMapper(dbIdAttributeString, sqlType);\r
+       }\r
+       \r
+       /**\r
+        * @param dbAttributString\r
+        * @param cdmAttributeString\r
+        */\r
+       protected DbNullMapper(String dbAttributeString, int sqlType) {\r
+               super(null, dbAttributeString, null);\r
+               this.sqlType = sqlType;\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return Integer.class;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+        */\r
+       @Override\r
+       protected Object getValue(CdmBase cdmBase) {\r
+               return null;\r
+       }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return this.sqlType;\r
+       }\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbObjectMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbObjectMapper.java
new file mode 100644 (file)
index 0000000..1695ec9
--- /dev/null
@@ -0,0 +1,88 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.Hibernate;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportConfigurator;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbObjectMapper extends DbSingleAttributeExportMapperBase<DbExportState<?>> implements IDbExportMapper<DbExportState<?>> {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(DbObjectMapper.class);\r
+       \r
+       public static DbObjectMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new DbObjectMapper(cdmAttributeString, dbAttributeString, null);\r
+       }\r
+       \r
+       /**\r
+        * @param dbAttributeString\r
+        * @param cdmAttributeString\r
+        */\r
+       protected DbObjectMapper(String cdmAttributeString, String dbAttributeString, Object defaultValue) {\r
+               super(cdmAttributeString, dbAttributeString, defaultValue);\r
+       }\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+        */\r
+       @Override\r
+       protected Object getValue(CdmBase cdmBase) {\r
+               CdmBase value = (CdmBase)super.getValue(cdmBase);\r
+               if (value == null){\r
+                       return null;\r
+               }\r
+               if (! Hibernate.isInitialized(value)){\r
+                       Hibernate.initialize(value);\r
+               }\r
+               Object result = getId(value);\r
+//             getState().getConfig().getCdmAppController().commitTransaction(tx);\r
+               return result;\r
+       }\r
+       \r
+\r
+       protected Integer getId(CdmBase cdmBase){\r
+               BerlinModelExportConfigurator config = getState().getConfig();\r
+               if (false && config.getIdType() == BerlinModelExportConfigurator.IdType.CDM_ID){\r
+                       return cdmBase.getId();\r
+               }else{\r
+                       Integer id = getState().getDbId(cdmBase);\r
+                       return id;\r
+               }\r
+       }       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.INTEGER;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return CdmBase.class;\r
+       }\r
+\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbSingleAttributeExportMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbSingleAttributeExportMapperBase.java
new file mode 100644 (file)
index 0000000..df6aca8
--- /dev/null
@@ -0,0 +1,210 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.sql.Types;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.joda.time.DateTime;\r
+\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase;\r
+import eu.etaxonomy.cdm.io.common.ImportHelper;\r
+import eu.etaxonomy.cdm.io.common.Source;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public abstract class DbSingleAttributeExportMapperBase<STATE extends DbExportState<?>> extends CdmSingleAttributeMapperBase implements IDbExportMapper<STATE>  {\r
+       private static final Logger logger = Logger.getLogger(DbSingleAttributeExportMapperBase.class);\r
+       \r
+       private DbExportMapperBase<STATE> exportMapperHelper = new DbExportMapperBase<STATE>();\r
+       private Integer precision = null;\r
+       protected boolean obligatory = true;\r
+       \r
+       /**\r
+        * @param dbAttributString\r
+        * @param cdmAttributeString\r
+        */\r
+       protected DbSingleAttributeExportMapperBase(String cdmAttributeString, String dbAttributString, Object defaultValue) {\r
+               super(cdmAttributeString, dbAttributString, defaultValue);\r
+       }\r
+       \r
+       /**\r
+        * @param dbAttributString\r
+        * @param cdmAttributeString\r
+        */\r
+       protected DbSingleAttributeExportMapperBase(String cdmAttributeString, String dbAttributString, Object defaultValue, boolean obligatory) {\r
+               super(cdmAttributeString, dbAttributString, defaultValue);\r
+               this.obligatory = obligatory;\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IStatefulDbExportMapper#initialize(java.sql.PreparedStatement, eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter, eu.etaxonomy.cdm.io.berlinModel.out.DbExportState)\r
+        */\r
+       public void initialize(PreparedStatement stmt, IndexCounter index, STATE state, String tableName) {\r
+               exportMapperHelper.initialize(stmt, index, state, tableName);\r
+               this.precision = getDbColumnIntegerInfo("c.prec");      \r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.IDbExportMapper#invoke(eu.etaxonomy.cdm.model.common.CdmBase)\r
+        */\r
+       public boolean invoke(CdmBase cdmBase) throws SQLException {\r
+               if (exportMapperHelper.preparedStatement == null){\r
+                       logger.warn("PreparedStatement is null");\r
+                       return false;\r
+               }else{\r
+                       return doInvoke(cdmBase);\r
+               }\r
+       }\r
+       \r
+       protected boolean doInvoke(CdmBase cdmBase) throws SQLException {\r
+               try {\r
+                       Object value = getValue(cdmBase);\r
+                       int sqlType = getSqlType();\r
+                       //use default value if necessary\r
+                       if (value == null && defaultValue != null){\r
+                               value = defaultValue;\r
+                       }\r
+                       if (value == null){\r
+                               getPreparedStatement().setNull(getIndex(), sqlType);\r
+                       }else{\r
+                               if (sqlType == Types.INTEGER){\r
+                                       getPreparedStatement().setInt(getIndex(), (Integer)value);\r
+                               }else if (sqlType == Types.CLOB){\r
+                                       getPreparedStatement().setString(getIndex(), (String)value);\r
+                               }else if (sqlType == Types.VARCHAR){\r
+                                       String strValue = (String)value;\r
+                                       if (strValue.length() > 255){\r
+                                               logger.warn("String to long (" + strValue.length() + ") for object " + cdmBase.toString() + ": " + value);\r
+                                       }\r
+                                       getPreparedStatement().setString(getIndex(), (String)value);\r
+                               }else if (sqlType == Types.BOOLEAN){\r
+                                       getPreparedStatement().setBoolean(getIndex(), (Boolean)value);\r
+                               }else if (sqlType == Types.DATE){\r
+                                       java.util.Date date = ((DateTime)value).toDate();\r
+                                       long t = date.getTime();\r
+                                       java.sql.Date sqlDate = new java.sql.Date(t);\r
+                                       getPreparedStatement().setDate(getIndex(), sqlDate);\r
+                               }else{\r
+                                       throw new IllegalArgumentException("SqlType not yet supported yet: " + sqlType);\r
+                               }\r
+                       }\r
+                       return true;\r
+               } catch (SQLException e) {\r
+                       logger.warn("SQL Exception: " + e.getLocalizedMessage());\r
+                       throw e;\r
+               } catch (IllegalArgumentException e) {\r
+                       logger.error("IllegalArgumentException: " + e.getLocalizedMessage() + ": " + cdmBase.toString());\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       protected Object getValue(CdmBase cdmBase){\r
+               boolean isBoolean = (this.getTypeClass() == boolean.class || this.getTypeClass() == Boolean.class);\r
+               return ImportHelper.getValue(cdmBase, this.getSourceAttribute(), isBoolean, obligatory);\r
+       }\r
+       \r
+       protected abstract int getSqlType();\r
+       \r
+       /**\r
+        * @return the preparedStatement\r
+        */\r
+       public PreparedStatement getPreparedStatement() {\r
+               return exportMapperHelper.getPreparedStatement();\r
+       }\r
+       \r
+       /**\r
+        * @return the index\r
+        */\r
+       public int getIndex() {\r
+               return exportMapperHelper.getIndex();\r
+       }\r
+       \r
+       /**\r
+        * @return the state\r
+        */\r
+       public STATE getState() {\r
+               return exportMapperHelper.getState();\r
+       }\r
+       \r
+       \r
+       /**\r
+        * @return the state\r
+        */\r
+       public String getTableName() {\r
+               return exportMapperHelper.getTableName();\r
+       }\r
+       \r
+       protected boolean checkSqlServerColumnExists(){\r
+               Source source = getState().getConfig().getDestination();\r
+               String strQuery = "SELECT  Count(t.id) as n " +\r
+                               " FROM sysobjects AS t " +\r
+                               " INNER JOIN syscolumns AS c ON t.id = c.id " +\r
+                               " WHERE (t.xtype = 'U') AND " + \r
+                               " (t.name = '" + getTableName() + "') AND " + \r
+                               " (c.name = '" + getDestinationAttribute() + "')";\r
+               ResultSet rs = source.getResultSet(strQuery) ;          \r
+               int n;\r
+               try {\r
+                       rs.next();\r
+                       n = rs.getInt("n");\r
+                       return n>0;\r
+               } catch (SQLException e) {\r
+                       e.printStackTrace();\r
+                       return false;\r
+               }\r
+               \r
+       }\r
+       \r
+       \r
+       protected int getPrecision(){\r
+               return this.precision;\r
+       }\r
+       \r
+       protected int getDbColumnIntegerInfo(String selectPart){\r
+               Source source = getState().getConfig().getDestination();\r
+               String strQuery = "SELECT  " + selectPart + " as result" +\r
+                               " FROM sysobjects AS t " +\r
+                               " INNER JOIN syscolumns AS c ON t.id = c.id " +\r
+                               " WHERE (t.xtype = 'U') AND " + \r
+                               " (t.name = '" + getTableName() + "') AND " + \r
+                               " (c.name = '" + getDestinationAttribute() + "')";\r
+               ResultSet rs = source.getResultSet(strQuery) ;          \r
+               int n;\r
+               try {\r
+                       rs.next();\r
+                       n = rs.getInt("result");\r
+                       return n;\r
+               } catch (SQLException e) {\r
+                       e.printStackTrace();\r
+                       return -1;\r
+               }\r
+                       \r
+       }\r
+       \r
+       \r
+       public String toString(){\r
+               String sourceAtt = CdmUtils.Nz(getSourceAttribute());\r
+               String destAtt = CdmUtils.Nz(getDestinationAttribute());\r
+               return this.getClass().getSimpleName() +"[" + sourceAtt + "->" + destAtt + "]";\r
+       }\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbStringMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/DbStringMapper.java
new file mode 100644 (file)
index 0000000..da54272
--- /dev/null
@@ -0,0 +1,85 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class DbStringMapper extends DbSingleAttributeExportMapperBase<DbExportState<?>> implements IDbExportMapper<DbExportState<?>> {\r
+       private static final Logger logger = Logger.getLogger(DbStringMapper.class);\r
+       \r
+       public static DbStringMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new DbStringMapper(cdmAttributeString, dbAttributeString, null, true);\r
+       }\r
+       \r
+       public static DbStringMapper NewFacultativeInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new DbStringMapper(cdmAttributeString, dbAttributeString, null, false);\r
+       }\r
+\r
+       public static DbStringMapper NewInstance(String cdmAttributeString, String dbAttributeString, String defaultValue){\r
+               return new DbStringMapper(cdmAttributeString, dbAttributeString, defaultValue, false);\r
+       }\r
+       \r
+       public static DbStringMapper NewInstance(String cdmAttributeString, String dbAttributeString, String defaultValue, boolean obligatory){\r
+               return new DbStringMapper(cdmAttributeString, dbAttributeString, defaultValue, obligatory);\r
+       }\r
+\r
+       /**\r
+        * @param dbAttributeString\r
+        * @param cdmAttributeString\r
+        */\r
+       private DbStringMapper(String cdmAttributeString, String dbAttributeString, String defaultValue, boolean obligatory) {\r
+               super(cdmAttributeString, dbAttributeString, defaultValue, obligatory);\r
+       }\r
+       \r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue(eu.etaxonomy.cdm.model.common.CdmBase)\r
+        */\r
+       @Override\r
+       protected Object getValue(CdmBase cdmBase) {\r
+               String result = (String)super.getValue(cdmBase);\r
+               if (result != null && result.length() > getPrecision()){\r
+                       logger.warn("Truncation (" + result.length() + "->" + getPrecision() + ") needed for Attribute " + getDestinationAttribute() + " in " +  cdmBase + "." );\r
+                       result = result.substring(0, getPrecision());\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.VARCHAR;\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return String.class;\r
+       }\r
+\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/FactCategoryMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/FactCategoryMapper.java
new file mode 100644 (file)
index 0000000..9b82f15
--- /dev/null
@@ -0,0 +1,141 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+import java.util.Date;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportConfigurator;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportState;\r
+import eu.etaxonomy.cdm.io.common.ImportHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.description.Feature;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class FactCategoryMapper extends DbSingleAttributeExportMapperBase<BerlinModelExportState<?>> implements IDbExportMapper<BerlinModelExportState<?>>{\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(FactCategoryMapper.class);\r
+       \r
+       private PreparedStatement preparedStatement;\r
+       \r
+       public static FactCategoryMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+               return new FactCategoryMapper(cdmAttributeString, dbAttributeString);\r
+       }\r
+       \r
+//     public static RefDetailMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+//             return new RefDetailMapper();\r
+//     }\r
+\r
+       \r
+       /**\r
+        * @param dbAttributString\r
+        * @param cdmAttributeString\r
+        */\r
+       private FactCategoryMapper(String cdmAttributeString, String dbAttributeString) {\r
+               super(cdmAttributeString, dbAttributeString, null);\r
+       }\r
+\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#initialize(java.sql.PreparedStatement, eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter, eu.etaxonomy.cdm.io.berlinModel.out.DbExportState)\r
+        */\r
+       @Override\r
+       public void initialize(PreparedStatement stmt, IndexCounter index,BerlinModelExportState<?> state, String tableName) {\r
+               super.initialize(stmt, index, state, tableName);\r
+               String inRefSql = "INSERT INTO FactCategory (FactCategoryId, FactCategory , " + \r
+                       " MaxFactNumber , RankRestrictionFk" +\r
+                       " VALUES (?,?,?,?)";    \r
+               Connection con = getState().getConfig().getDestination().getConnection();\r
+               try {\r
+                       preparedStatement = con.prepareStatement(inRefSql);\r
+               } catch (SQLException e) {\r
+                       e.printStackTrace();\r
+                       throw new RuntimeException();\r
+               }\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+        */\r
+       @Override\r
+       protected Object getValue(CdmBase cdmBase) {\r
+               String value = (String)super.getValue(cdmBase);\r
+               boolean isBoolean = false;\r
+               Feature feature = (Feature)ImportHelper.getValue(cdmBase, getSourceAttribute(), isBoolean, true);\r
+               Object result = makeRow(feature);\r
+//             getState().getConfig().getCdmAppController().commitTransaction(tx);\r
+               return result;\r
+       }\r
+\r
+       \r
+       protected Integer makeRow(Feature feature){\r
+               if (feature == null){\r
+                       return null;            \r
+               }\r
+               Integer factCategoryId = getState().getNextFactCategoryId();\r
+               String factCategory = feature.getLabel();\r
+               Integer maxFactNumber = null;\r
+               Integer RankRestrictionFk = null;\r
+               \r
+               try {\r
+                       preparedStatement.setInt(1, factCategoryId);\r
+                       preparedStatement.setString(2, factCategory);\r
+                       preparedStatement.setNull(3, Types.INTEGER) ;//.setString(3, maxFactNumber);\r
+                       preparedStatement.setNull(4, Types.INTEGER) ;//.setString(4, RankRestrictionFk);\r
+                       preparedStatement.executeUpdate();\r
+               } catch (SQLException e) {\r
+                       // TODO Auto-generated catch block\r
+                       e.printStackTrace();\r
+               }\r
+               return factCategoryId;\r
+       }\r
+\r
+       protected Integer getId(CdmBase cdmBase){\r
+               BerlinModelExportConfigurator config = getState().getConfig();\r
+               if (false && config.getIdType() == BerlinModelExportConfigurator.IdType.CDM_ID){\r
+                       return cdmBase.getId();\r
+               }else{\r
+                       Integer id = getState().getDbId(cdmBase);\r
+                       return id;\r
+               }\r
+       }       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.INTEGER;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return String.class;\r
+       }\r
+\r
+\r
+\r
+\r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IDbExportMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IDbExportMapper.java
new file mode 100644 (file)
index 0000000..218fb41
--- /dev/null
@@ -0,0 +1,32 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public interface IDbExportMapper<T extends DbExportState<?>> {\r
+\r
+//     public void initialize(PreparedStatement stmt, IndexCounter index);\r
+\r
+       public void initialize(PreparedStatement stmt, IndexCounter index, T state, String tableName);\r
+       \r
+       public boolean invoke(CdmBase cdmBase) throws SQLException;\r
+\r
+}
\ No newline at end of file
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IdMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IdMapper.java
new file mode 100644 (file)
index 0000000..8ba679d
--- /dev/null
@@ -0,0 +1,91 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.SQLException;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportConfigurator.IdType;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class IdMapper extends DbSingleAttributeExportMapperBase<DbExportState<?>> implements IDbExportMapper<DbExportState<?>>{\r
+       private static final Logger logger = Logger.getLogger(IdMapper.class);\r
+               \r
+       public static IdMapper NewInstance(String dbIdAttributeString){\r
+               return new IdMapper(dbIdAttributeString);\r
+       }\r
+       \r
+       /**\r
+        * @param dbAttributString\r
+        * @param cdmAttributeString\r
+        */\r
+       protected IdMapper(String dbIdAttributeString) {\r
+               super(null, dbIdAttributeString, null);\r
+       }\r
+\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return Integer.class;\r
+       }\r
+\r
+       @Override\r
+       protected boolean doInvoke(CdmBase cdmBase) throws SQLException{\r
+               boolean result = super.doInvoke(cdmBase);\r
+               getState().putDbId(cdmBase, (Integer)getValue(cdmBase));\r
+               return result;\r
+               \r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+        */\r
+       @Override\r
+       protected Object getValue(CdmBase cdmBase) {\r
+               IdType type = getState().getConfig().getIdType();\r
+               if (type == IdType.CDM_ID){\r
+                       return cdmBase.getId();\r
+               }else if(type == IdType.MAX_ID){\r
+                       //TODO\r
+                       logger.warn("MAX_ID not yet implemented");\r
+                       return cdmBase.getId();\r
+               }else if(type == IdType.ORIGINAL_SOURCE_ID){\r
+                       //TODO\r
+                       logger.warn("ORIGINAL_SOURCE_ID");\r
+                       return cdmBase.getId();\r
+               }else{\r
+                       logger.warn("Unknown idType: " + type);\r
+                       return cdmBase.getId();\r
+               }\r
+       }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.INTEGER;\r
+       }\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IndexCounter.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/IndexCounter.java
new file mode 100644 (file)
index 0000000..edf6a08
--- /dev/null
@@ -0,0 +1,42 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class IndexCounter {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(IndexCounter.class);\r
+\r
+       int index = 0;\r
+       \r
+       public IndexCounter(int startValue){\r
+               index = startValue;\r
+       }\r
+       \r
+       /**\r
+        * Returns the index and increases it by 1\r
+        * @return\r
+        */\r
+       public int getIncreasing(){\r
+               return index++;\r
+       }\r
+       \r
+       public String toString(){\r
+               return String.valueOf(index);\r
+       }\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/MethodMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/MethodMapper.java
new file mode 100644 (file)
index 0000000..d8d2b8b
--- /dev/null
@@ -0,0 +1,122 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.lang.reflect.InvocationTargetException;\r
+import java.lang.reflect.Method;\r
+import java.sql.Types;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class MethodMapper extends DbSingleAttributeExportMapperBase<DbExportState<?>> implements IDbExportMapper<DbExportState<?>> {\r
+       private static final Logger logger = Logger.getLogger(MethodMapper.class);\r
+       \r
+       private Method method;\r
+       private Class<?>[] parameterTypes;\r
+       \r
+       public static <T extends BerlinModelExportBase> MethodMapper NewInstance(String dbAttributeString, BerlinModelExportBase bmeb){\r
+               String methodName = "get" + dbAttributeString;\r
+               return NewInstance(dbAttributeString, bmeb, methodName);\r
+       }\r
+       \r
+       public static <T extends BerlinModelExportBase> MethodMapper NewInstance(String dbAttributeString, BerlinModelExportBase bmeb, String methodName){\r
+               Class<?> parameterTypes = bmeb.getStandardMethodParameter();\r
+               MethodMapper result = new MethodMapper(dbAttributeString, bmeb.getClass(), methodName, parameterTypes);\r
+               return result;\r
+       }\r
+\r
+       public static <T extends BerlinModelExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, String methodName, Class parameterTypes){\r
+               MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterTypes);\r
+               return result;\r
+       }\r
+       \r
+       public static <T extends BerlinModelExportBase> MethodMapper NewInstance(String dbAttributeString, Class<?> clazz, String methodName, Class<?> parameterType1, Class<?> parameterType2){\r
+               MethodMapper result = new MethodMapper(dbAttributeString, clazz, methodName, parameterType1,parameterType2);\r
+               return result;\r
+       }\r
+       \r
+       /**\r
+        * @param parameterTypes \r
+        * @param dbIdAttributString\r
+        */\r
+       protected MethodMapper(String dbAttributeString, Class<?> clazz, String methodName, Class<?>... parameterTypes) {\r
+               super(null, dbAttributeString, null);\r
+               try {\r
+                       this.parameterTypes = parameterTypes;\r
+                       method = clazz.getDeclaredMethod(methodName, parameterTypes);\r
+                       method.setAccessible(true);\r
+               } catch (SecurityException e) {\r
+                       logger.error("SecurityException", e);\r
+               } catch (NoSuchMethodException e) {\r
+                       logger.error("NoSuchMethodException", e);\r
+               }\r
+       }\r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.IdMapper#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return method.getReturnType();\r
+       }\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+        */\r
+       @Override\r
+       protected Object getValue(CdmBase cdmBase) {\r
+               try{    \r
+                       if (this.parameterTypes.length > 1 && parameterTypes[1].equals(DbExportState.class)){\r
+                               return method.invoke(null, cdmBase, getState());\r
+                       }else{\r
+                               return method.invoke(null, cdmBase);\r
+                       }\r
+                       \r
+               } catch (IllegalAccessException e) {\r
+                       logger.error("IllegalAccessException: " + e.getLocalizedMessage());\r
+                       return false;\r
+               } catch (InvocationTargetException e) {\r
+                       logger.error("InvocationTargetException: " + e.getLocalizedMessage());\r
+                       return false;\r
+               }\r
+       }\r
+       \r
+       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               Class<?> returnType = method.getReturnType();\r
+               if (returnType == Integer.class){\r
+                       return Types.INTEGER;\r
+               }else if (returnType == String.class){\r
+                       return Types.VARCHAR;\r
+               }else if (returnType == Boolean.class){\r
+                       return Types.BOOLEAN;\r
+               }else{\r
+                       logger.warn("Return type not supported yet: " + returnType.getSimpleName());\r
+                       throw new IllegalArgumentException("Return type not supported yet: " + returnType.getSimpleName());\r
+               }\r
+       }\r
+       \r
+}\r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/RefDetailMapper.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/out/mapper/RefDetailMapper.java
new file mode 100644 (file)
index 0000000..45db8e8
--- /dev/null
@@ -0,0 +1,171 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.berlinModel.out.mapper;\r
+\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.SQLException;\r
+import java.util.Date;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hsqldb.Types;\r
+\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportConfigurator;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportState;\r
+import eu.etaxonomy.cdm.io.common.ImportHelper;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public class RefDetailMapper extends DbSingleAttributeExportMapperBase<BerlinModelExportState<?>> implements IDbExportMapper<BerlinModelExportState<?>>{\r
+       private static final Logger logger = Logger.getLogger(RefDetailMapper.class);\r
+       \r
+       private String cdmRefAttributeString; \r
+       private PreparedStatement preparedStatement;\r
+       \r
+       public static RefDetailMapper NewInstance(String cdmAttributeString, String cdmRefAttributeString, String dbAttributeString){\r
+               return new RefDetailMapper(cdmAttributeString, cdmRefAttributeString, dbAttributeString);\r
+       }\r
+       \r
+//     public static RefDetailMapper NewInstance(String cdmAttributeString, String dbAttributeString){\r
+//             return new RefDetailMapper();\r
+//     }\r
+\r
+       \r
+       /**\r
+        * @param dbAttributString\r
+        * @param cdmAttributeString\r
+        */\r
+       private RefDetailMapper(String cdmAttributeString, String cdmRefAttributeString, String dbAttributeString) {\r
+               super(cdmAttributeString, dbAttributeString, null);\r
+               this.cdmRefAttributeString = cdmRefAttributeString;\r
+       }\r
+\r
+       \r
+       \r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#initialize(java.sql.PreparedStatement, eu.etaxonomy.cdm.io.berlinModel.out.mapper.IndexCounter, eu.etaxonomy.cdm.io.berlinModel.out.DbExportState)\r
+        */\r
+       @Override\r
+       public void initialize(PreparedStatement stmt, IndexCounter index,BerlinModelExportState<?> state, String tableName) {\r
+               super.initialize(stmt, index, state, tableName);\r
+               String inRefSql = "INSERT INTO RefDetail (RefDetailId, RefFk , " + \r
+                       " FullRefCache, FullNomRefCache, PreliminaryFlag , Details , " +\r
+                       " SecondarySources, " + \r
+                       " Created_When , Created_Who , Updated_When, Updated_Who, Notes ,IdInSource)"+\r
+                       " VALUES (?,?, ?,?,?,?, ?, ?,?,?,?,?,?)";    \r
+               Connection con = getState().getConfig().getDestination().getConnection();\r
+               try {\r
+                       preparedStatement = con.prepareStatement(inRefSql);\r
+               } catch (SQLException e) {\r
+                       e.printStackTrace();\r
+                       throw new RuntimeException();\r
+               }\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValue()\r
+        */\r
+       @Override\r
+       protected Object getValue(CdmBase cdmBase) {\r
+               String value = (String)super.getValue(cdmBase);\r
+               boolean isBoolean = false;\r
+               ReferenceBase<?> ref = (ReferenceBase<?>)ImportHelper.getValue(cdmBase, this.cdmRefAttributeString, isBoolean, true);\r
+               Object result = makeRefDetail(value, ref);\r
+//             getState().getConfig().getCdmAppController().commitTransaction(tx);\r
+               return result;\r
+       }\r
+\r
+       \r
+       protected Integer makeRefDetail(String microRef, ReferenceBase<?> ref){\r
+               if (ref == null){\r
+                       if (microRef == null || microRef.trim().equals("")){\r
+                               return null;            \r
+                       }else{\r
+                               //TODO microRef with no reference\r
+                               logger.warn("ref == null not yet implemented");\r
+                               return null;\r
+                       }\r
+               }\r
+               Integer refDetailId = getState().getNextRefDetailId();\r
+               Integer refId = getState().getDbId(ref);\r
+//             String fullRefCache = null;\r
+//             String fullNomRefCache = null;\r
+               Boolean preliminaryFlag = false;\r
+//             String secondarySources = null;\r
+               java.sql.Date created_When = new java.sql.Date(new Date().getTime());\r
+//             java.sql.Date updated_When = null;\r
+               String created_who = "autom.";\r
+//             String update_who = null;\r
+//             String notes = null;\r
+               \r
+               try {\r
+                       preparedStatement.setInt(1, refDetailId);\r
+                       preparedStatement.setInt(2, refId);\r
+                       preparedStatement.setNull(3, Types.VARCHAR) ;//.setString(3, fullRefCache);\r
+                       preparedStatement.setNull(4, Types.VARCHAR) ;//.setString(4, fullNomRefCache);\r
+                       preparedStatement.setBoolean(5, preliminaryFlag);\r
+                       if (microRef != null){\r
+                               preparedStatement.setString(6, microRef);\r
+                       }else{\r
+                               preparedStatement.setNull(6, Types.VARCHAR);\r
+                       }\r
+                       preparedStatement.setNull(7, Types.VARCHAR) ;//.setString(7, secondarySources);\r
+                       preparedStatement.setDate(8, created_When);\r
+                       preparedStatement.setString(9, created_who);\r
+                       preparedStatement.setNull(10, Types.DATE) ;//.setDate(10, updated_When);\r
+                       preparedStatement.setNull(11, Types.VARCHAR) ;//.setString(11, update_who);\r
+                       preparedStatement.setNull(12, Types.VARCHAR) ;//.setString(12, notes);\r
+                       preparedStatement.setNull(13, Types.VARCHAR) ;//.setString(13, secondarySources);\r
+                       \r
+                       \r
+                       preparedStatement.executeUpdate();\r
+               } catch (SQLException e) {\r
+                       // TODO Auto-generated catch block\r
+                       e.printStackTrace();\r
+               }\r
+               return refDetailId;\r
+       }\r
+\r
+       protected Integer getId(CdmBase cdmBase){\r
+               BerlinModelExportConfigurator config = getState().getConfig();\r
+               if (false && config.getIdType() == BerlinModelExportConfigurator.IdType.CDM_ID){\r
+                       return cdmBase.getId();\r
+               }else{\r
+                       Integer id = getState().getDbId(cdmBase);\r
+                       return id;\r
+               }\r
+       }       \r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.berlinModel.out.mapper.DbSingleAttributeExportMapperBase#getValueType()\r
+        */\r
+       @Override\r
+       protected int getSqlType() {\r
+               return Types.INTEGER;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmSingleAttributeMapperBase#getTypeClass()\r
+        */\r
+       @Override\r
+       public Class<?> getTypeClass() {\r
+               return String.class;\r
+       }\r
+\r
+\r
+\r
+\r
+}\r
index 6260fbffab017f91bbf63151e625122f62a4b6bf..81f274308d0d7b10fb54b671eada3fa2a8ac1030 100644 (file)
@@ -21,6 +21,8 @@ import org.springframework.stereotype.Component;
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
 import eu.etaxonomy.cdm.api.service.IService;\r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.DbExportState;\r
+import eu.etaxonomy.cdm.io.berlinModel.out.IoState;\r
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
@@ -149,6 +151,8 @@ public class CdmApplicationAwareDefaultExport<T extends IExportConfigurator> imp
                                ICdmIO<S> cdmIo = (ICdmIO<S>)applicationContext.getBean(ioBeanName, ICdmIO.class);\r
                                if (cdmIo != null){\r
                                        result &= cdmIo.invoke(config, stores);\r
+//                                     IoState<S> state = null;\r
+//                                     result &= cdmIo.invoke(state);\r
                                }else{\r
                                        logger.error("cdmIO was null");\r
                                        result = false;\r
index a081ab1e3c15a9440e0e3e50a4607e52acf68e2e..953fe05f6866748b8599d089971b38aba9425615 100644 (file)
@@ -105,7 +105,7 @@ public class CdmDefaultExport<T extends IExportConfigurator> implements ICdmExpo
                        }\r
                        return true;\r
                } catch (DataSourceNotFoundException  e) {\r
-                       logger.error("could not connect to destination database");\r
+                       logger.error("could not connect to source CDM database");\r
                        return false;\r
                }catch (TermNotFoundException e) {\r
                        logger.error("could not find needed term in destination datasource");\r
index 37684c0c80fa0c022dfd24aef0c064abba78fa0e..9b69140f647053a647751ae33f8c1a14bc1ffe00 100644 (file)
@@ -111,6 +111,22 @@ public abstract class CdmIoBase<T extends IIoConfigurator> extends CdmApplicatio
                }\r
        }\r
        \r
+//     /* (non-Javadoc)\r
+//      * @see eu.etaxonomy.cdm.io.common.ICdmIO#invoke(eu.etaxonomy.cdm.io.common.IIoConfigurator, eu.etaxonomy.cdm.api.application.CdmApplicationController, java.util.Map)\r
+//      */\r
+//     public boolean invoke(T config,\r
+////   public boolean invoke(IIoConfigurator config,\r
+//                     Map<String, MapWrapper<? extends CdmBase>> stores) {\r
+//             if (isIgnore(config)){\r
+//                     logger.warn("No invoke for " + ioName + " (ignored)");\r
+//                     return true;\r
+//             }else{\r
+//                     return doInvoke(config, stores);\r
+//             }\r
+//     }\r
+       \r
+       \r
+       \r
        protected abstract boolean doInvoke(T config,\r
                        Map<String, MapWrapper<? extends CdmBase>> stores);\r
 \r
index 71949513db9ca56de5c29ffcb77f91d419bcf1e7..b60a01e54b855d254dbea8c64a3a1d65d557cfa1 100644 (file)
@@ -16,8 +16,6 @@ import java.util.Set;
 \r
 import org.apache.log4j.Logger;\r
 \r
-import eu.etaxonomy.cdm.io.berlinModel.CdmOneToManyMapper;\r
-\r
 \r
 /**\r
  * @author a.mueller\r
@@ -25,10 +23,9 @@ import eu.etaxonomy.cdm.io.berlinModel.CdmOneToManyMapper;
  * @version 1.0\r
  */\r
 public class CdmIoMapping {\r
-       @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(CdmIoMapping.class);\r
        \r
-       List<CdmAttributeMapperBase> mapperList = new ArrayList<CdmAttributeMapperBase>();\r
+       protected List<CdmAttributeMapperBase> mapperList = new ArrayList<CdmAttributeMapperBase>();\r
        Set<String> sourceAttributes = new HashSet<String>();\r
        Set<String> destinationAttributes = new HashSet<String>();\r
        List<String> sourceAttributeList = new ArrayList<String>();\r
@@ -43,14 +40,15 @@ public class CdmIoMapping {
                        sourceAttributeList.addAll(singleMapper.getSourceAttributeList());\r
                        destinationAttributes.addAll(singleMapper.getDestinationAttributes());\r
                        destinationAttributeList.addAll(singleMapper.getDestinationAttributeList());\r
-               }else if (mapper instanceof CdmOneToManyMapper<?, ?,?>){\r
-                       CdmOneToManyMapper<?, ?,?> multipleMapper = (CdmOneToManyMapper<?, ?,?>)mapper;\r
+               }else if (mapper instanceof MultipleAttributeMapperBase){\r
+                       MultipleAttributeMapperBase<?> multipleMapper = (MultipleAttributeMapperBase<?>)mapper;\r
                        sourceAttributes.addAll(multipleMapper.getSourceAttributes());\r
                        sourceAttributeList.addAll(multipleMapper.getSourceAttributes());\r
                        destinationAttributes.addAll(multipleMapper.getDestinationAttributes());\r
-                       destinationAttributeList.addAll(multipleMapper.getDestinationAttributes());\r
+                       destinationAttributeList.addAll(multipleMapper.getDestinationAttributeList());\r
                }else{\r
-                       logger.error("Unknown mapper type");\r
+                       logger.error("Unknown mapper type: " + mapper.getClass().getSimpleName());\r
+                       throw new IllegalArgumentException("Unknown mapper type: " + mapper.getClass().getSimpleName());\r
                }\r
        }\r
        \r
@@ -78,4 +76,10 @@ public class CdmIoMapping {
                return result;\r
        }\r
        \r
+       public List<String> getDestinationAttributeList(){\r
+               List<String> result = new ArrayList<String>();\r
+               result.addAll(destinationAttributeList);\r
+               return result;\r
+       }\r
+       \r
 }\r
index 9de6a1f055e1277dc055c9b852f20230dd144250..1d0c17cb75c93960e603c10356e9c4069d5bfccf 100644 (file)
@@ -27,11 +27,18 @@ public abstract class CdmSingleAttributeMapperBase extends CdmAttributeMapperBas
        \r
        private String sourceValue;\r
        private String destinationValue;\r
+       protected Object defaultValue;\r
 \r
-       protected CdmSingleAttributeMapperBase(String dbAttributString, String cdmAttributeString){\r
-               this.sourceValue = dbAttributString;\r
-               this.destinationValue = cdmAttributeString;\r
+       protected CdmSingleAttributeMapperBase(String sourceAttributString, String destinationAttributeString){\r
+               this(sourceAttributString,destinationAttributeString, null);\r
        }\r
+\r
+       protected CdmSingleAttributeMapperBase(String sourceAttributString, String destinationAttributeString, Object defaultValue){\r
+               this.sourceValue = sourceAttributString;\r
+               this.destinationValue = destinationAttributeString;\r
+               this.defaultValue = defaultValue;\r
+       }\r
+\r
        \r
        public String getSourceAttribute(){\r
                return sourceValue;\r
index 44443acbdef96401b919a39b7d235cb7b2d07f57..86c6b34493117182faea028742755d14d72f401a 100644 (file)
@@ -21,14 +21,14 @@ import eu.etaxonomy.cdm.model.reference.ReferenceBase;
  * @author a.babadshanjan\r
  * @created 16.11.2008\r
  */\r
-public abstract class ExportConfiguratorBase extends IoConfiguratorBase {\r
+public abstract class ExportConfiguratorBase<DESTINATION extends Object> extends IoConfiguratorBase {\r
 \r
        private static final Logger logger = Logger.getLogger(ExportConfiguratorBase.class);\r
 \r
        private CHECK check = CHECK.EXPORT_WITHOUT_CHECK;\r
 \r
        private ICdmDataSource source;\r
-       private Object destination;\r
+       private DESTINATION destination;\r
        //private DbSchemaValidation dbSchemaValidation = DbSchemaValidation.VALIDATE;\r
        private CdmApplicationController cdmApp = null;\r
        protected ReferenceBase sourceReference;\r
@@ -37,7 +37,7 @@ public abstract class ExportConfiguratorBase extends IoConfiguratorBase {
        \r
        public ExportConfiguratorBase(){\r
                super();\r
-               setDbSchemaValidation(DbSchemaValidation.UPDATE);\r
+               //setDbSchemaValidation(DbSchemaValidation.UPDATE);\r
                makeIoClassList();\r
        }\r
        \r
@@ -54,14 +54,14 @@ public abstract class ExportConfiguratorBase extends IoConfiguratorBase {
        /**\r
         * @param source the source to get\r
         */\r
-       public Object getDestination() {\r
+       public DESTINATION getDestination() {\r
                return destination;\r
        }\r
        \r
        /**\r
         * @param source the source to set\r
         */\r
-       public void setDestination(Object destination) {\r
+       public void setDestination(DESTINATION destination) {\r
                this.destination = destination;\r
        }\r
        \r
index 40ce3f86689b14998981e71968f6119b0b4ccfcb..327e18a4ba3325b4d3026611c20d158caa5130e2 100644 (file)
@@ -11,6 +11,7 @@ package eu.etaxonomy.cdm.io.common;
 \r
 import java.util.Map;\r
 \r
+import eu.etaxonomy.cdm.io.berlinModel.out.IoState;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 \r
 /**\r
@@ -35,4 +36,8 @@ public interface ICdmIO<T extends IIoConfigurator> {
        \r
        public boolean invoke(T config, Map<String, MapWrapper<? extends CdmBase>> stores);\r
        \r
+//     public boolean invoke(IoState<T> state);\r
+       \r
+       \r
+       \r
 }
\ No newline at end of file
index fdb530b8f50bd8b56b10e2d0bff52e943f936365..d308b80c6e4c75c535956022238360e19edf21a0 100644 (file)
@@ -286,6 +286,61 @@ public class ImportHelper {
 \r
        }\r
 \r
+       //************** EXPORT *******************/\r
+       \r
+       \r
+       public static<T extends Object> T getValue(CdmBase cdmBase, String cdmAttrName, boolean isBoolean, boolean obligatory){\r
+               String methodName;\r
+               T result;\r
+               try {\r
+                       if (isBoolean){\r
+                               if (cdmAttrName == null || cdmAttrName.length() < 3 || !cdmAttrName.startsWith("is")){\r
+                                       throw new IllegalArgumentException("boolean CdmAttributeName should have atleast 3 characters and start with 'is': " + cdmAttrName);\r
+                               }\r
+                               methodName = cdmAttrName ;\r
+                       }else {\r
+                               if (cdmAttrName == null || cdmAttrName.length() < 1 ){\r
+                                       throw new IllegalArgumentException("CdmAttributeName should have atleast 1 character");\r
+                               }\r
+                               methodName = "get" + cdmAttrName.substring(0, 1).toUpperCase() + cdmAttrName.substring(1) ;\r
+                       }\r
+//                     else{\r
+//                             logger.error("Class not supported: " + clazz.toString());\r
+//                             return null;\r
+//                     }\r
+                       Method cdmMethod = cdmBase.getClass().getMethod(methodName);\r
+                       result = (T)cdmMethod.invoke(cdmBase);\r
+                       return result;\r
+               } catch (NullPointerException e) {\r
+                       logger.error("NullPointerException: " + e.getMessage());\r
+                       return null;\r
+               } catch (IllegalArgumentException e) {\r
+                       logger.error("IllegalArgumentException: " + e.getMessage());\r
+                       return null;\r
+               } catch (IllegalAccessException e) {\r
+                       logger.error("IllegalAccessException: " + e.getMessage());\r
+                       return null;\r
+               } catch (InvocationTargetException e) {\r
+                       logger.error("InvocationTargetException: " + e.getMessage());\r
+                       return null;\r
+               }catch (SecurityException e) {\r
+                       logger.error("SecurityException: " + e.getMessage());\r
+                       return null;\r
+               } catch (NoSuchMethodException e) {\r
+                       if (obligatory){\r
+                               logger.error("NoSuchMethod: " + e.getMessage());\r
+                               return null;\r
+                       }else{\r
+                               if (logger.isDebugEnabled()){ logger.debug("NoSuchMethod: " + e.getMessage());}\r
+                               return null;\r
+                       }\r
+               }\r
+               \r
+       }\r
+\r
+       \r
+       \r
+       \r
        \r
        //******* old *****************\r
        \r
diff --git a/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/MultipleAttributeMapperBase.java b/cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/common/MultipleAttributeMapperBase.java
new file mode 100644 (file)
index 0000000..d4ec1d2
--- /dev/null
@@ -0,0 +1,83 @@
+// $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
+\r
+package eu.etaxonomy.cdm.io.common;\r
+\r
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @created 12.05.2009\r
+ * @version 1.0\r
+ */\r
+public abstract class MultipleAttributeMapperBase<SINGLE_MAPPER extends CdmSingleAttributeMapperBase> extends CdmAttributeMapperBase {\r
+       @SuppressWarnings("unused")\r
+       private static final Logger logger = Logger.getLogger(MultipleAttributeMapperBase.class);\r
+\r
+       protected List<SINGLE_MAPPER> singleMappers = new ArrayList<SINGLE_MAPPER>();\r
+\r
+       \r
+       /**\r
+        * \r
+        */\r
+       public MultipleAttributeMapperBase() {\r
+               singleMappers = new ArrayList<SINGLE_MAPPER>();\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmAttributeMapperBase#getDestinationAttributeList()\r
+        */\r
+       @Override\r
+       public List<String> getDestinationAttributeList() {\r
+               List<String> result = new ArrayList<String>();\r
+               for (SINGLE_MAPPER singleMapper : singleMappers){\r
+                       result.add(singleMapper.getDestinationAttribute());\r
+               }\r
+               return result;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmAttributeMapperBase#getDestinationAttributes()\r
+        */\r
+       @Override\r
+       public Set<String> getDestinationAttributes() {\r
+               Set<String> result = new HashSet<String>();\r
+               result.addAll(getDestinationAttributeList());\r
+               return result;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmAttributeMapperBase#getSourceAttributeList()\r
+        */\r
+       @Override\r
+       public List<String> getSourceAttributeList() {\r
+               List<String> result = new ArrayList<String>();\r
+               for (SINGLE_MAPPER singleMapper : singleMappers){\r
+                       result.add(singleMapper.getSourceAttribute());\r
+               }\r
+               return result;\r
+       }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.io.common.CdmAttributeMapperBase#getSourceAttributes()\r
+        */\r
+       @Override\r
+       public Set<String> getSourceAttributes() {\r
+               Set<String> result = new HashSet<String>();\r
+               result.addAll(getSourceAttributeList());\r
+               return result;\r
+       }\r
+}\r
index ea316253d7cf5d0ae5f2dc3a736a0054221f86b4..e1e71a997cc662c7655fa75240164f8a32afd20e 100644 (file)
@@ -155,6 +155,29 @@ public class Source {
         }\r
     }\r
 \r
+    //******* INSERT, UPDATE, DELETE *******************//\r
+    /**\r
+     * Executes an insert, update or delete statement.\r
+     * Returns the number of rows changed or -1 if updatedStatement was 0 or and error occurred. \r
+     * Does not change the Sources query-string!!\r
+     * @return Resultset for the query.\r
+     */\r
+    public int update (String updateStatement){\r
+       int result;\r
+       try {\r
+            this.getConnection(); //establish connection\r
+               if (updateStatement == null){\r
+                       return -1;\r
+               }\r
+            mStmt = mConn.createStatement();\r
+            result = mStmt.executeUpdate(updateStatement);\r
+            return result;\r
+        }catch(SQLException e){\r
+            logger.error("Problems when creating Resultset for query \n  " + updateStatement + " \n" + "Exception: " + e);\r
+            return -1;\r
+        }\r
+    }\r
+\r
     \r
     /** \r
      * Returns the Resultset for Sources query. \r