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