2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.cdm
.io
.berlinModel
.out
;
11 import java
.sql
.SQLException
;
12 import java
.sql
.Types
;
13 import java
.util
.List
;
15 import org
.apache
.log4j
.Logger
;
16 import org
.springframework
.stereotype
.Component
;
17 import org
.springframework
.transaction
.TransactionStatus
;
19 import eu
.etaxonomy
.cdm
.io
.common
.DbExportStateBase
;
20 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.CdmDbExportMapping
;
21 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.CreatedAndNotesMapper
;
22 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.DbConstantMapper
;
23 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.DbObjectMapper
;
24 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.IExportTransformer
;
25 import eu
.etaxonomy
.cdm
.io
.common
.mapping
.out
.MethodMapper
;
26 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
27 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipBase
;
28 import eu
.etaxonomy
.cdm
.model
.taxon
.ITaxonTreeNode
;
29 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
30 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
31 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
40 public class BerlinModelClassificationExport
extends BerlinModelExportBase
<RelationshipBase
> {
41 private static final Logger logger
= Logger
.getLogger(BerlinModelClassificationExport
.class);
43 private static int modCount
= 1000;
44 private static final String dbTableName
= "RelPTaxon";
45 private static final String pluralString
= "TaxonNodes";
46 private static final Class
<?
extends CdmBase
> standardMethodParameter
= TaxonNode
.class;
49 public BerlinModelClassificationExport(){
54 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
57 protected boolean doCheck(BerlinModelExportState state
){
58 boolean result
= true;
59 logger
.warn("Checking for " + pluralString
+ " not yet implemented");
60 //result &= checkArticlesWithoutJournal(bmiConfig);
61 //result &= checkPartOfJournal(bmiConfig);
66 private CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
> getMapping(){
67 String tableName
= dbTableName
;
68 CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
> mapping
= new CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
>(tableName
);
69 // mapping.addMapper(IdMapper.NewInstance("RelPTaxonId")); //is Identity column
71 mapping
.addMapper(MethodMapper
.NewInstance("PTNameFk1", this.getClass(), "getPTNameFk1", standardMethodParameter
, DbExportStateBase
.class));
72 mapping
.addMapper(MethodMapper
.NewInstance("PTRefFk1", this.getClass(), "getPTRefFk1", standardMethodParameter
, DbExportStateBase
.class));
74 mapping
.addMapper(MethodMapper
.NewInstance("PTNameFk2", this.getClass(), "getPTNameFk2", standardMethodParameter
, DbExportStateBase
.class));
75 mapping
.addMapper(MethodMapper
.NewInstance("PTRefFk2", this.getClass(), "getPTRefFk2", standardMethodParameter
, DbExportStateBase
.class));
77 mapping
.addMapper(DbConstantMapper
.NewInstance("RelQualifierFk", Types
.INTEGER
, 1));
79 mapping
.addMapper(DbObjectMapper
.NewInstance("referenceForParentChildRelation", "RelRefFk"));
80 // mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));
81 mapping
.addMapper(CreatedAndNotesMapper
.NewInstance());
86 protected void doInvoke(BerlinModelExportState state
){
87 if (state
.getConfig().isUseClassification() == false){
92 logger
.info("start make " + pluralString
+ " ...");
93 boolean success
= true ;
96 TransactionStatus txStatus
= startTransaction(true);
98 List
<Classification
> list
= getClassificationService().list(null,10000000,0,null,null);
100 CdmDbExportMapping
<BerlinModelExportState
, BerlinModelExportConfigurator
, IExportTransformer
> mapping
= getMapping();
101 mapping
.initialize(state
);
104 for (Classification tree
: list
){
105 for (TaxonNode node
: tree
.getAllNodes()){
106 if (node
.isTopmostNode()){
109 doCount(count
++, modCount
, pluralString
);
110 success
&= mapping
.invoke(node
);
114 commitTransaction(txStatus
);
115 logger
.info("end make " + pluralString
+ " ..." + getSuccessString(success
));
117 state
.setUnsuccessfull();
120 }catch(SQLException e
){
122 logger
.error(e
.getMessage());
123 state
.setUnsuccessfull();
129 protected boolean doDelete(BerlinModelExportState state
){
130 BerlinModelExportConfigurator bmeConfig
= state
.getConfig();
132 //already deleted in BerlinModelTaxonRelationExport
134 // Source destination = bmeConfig.getDestination();
136 // sql = "DELETE FROM RelPTaxon ";
137 // destination.setQuery(sql);
138 // destination.update(sql);
145 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
147 protected boolean isIgnore(BerlinModelExportState state
){
148 return ! state
.getConfig().isDoRelTaxa();
151 //called by MethodMapper
153 @SuppressWarnings("unused")
154 private static Integer
getPTNameFk1(TaxonNode node
, DbExportStateBase
<?
, IExportTransformer
> state
){
155 return getObjectFk(node
, state
, true, true);
158 @SuppressWarnings("unused")
159 private static Integer
getPTRefFk1(TaxonNode node
, DbExportStateBase
<?
, IExportTransformer
> state
){
160 return getObjectFk(node
, state
, false, true);
163 @SuppressWarnings("unused")
164 private static Integer
getPTNameFk2(TaxonNode node
, DbExportStateBase
<?
, IExportTransformer
> state
){
165 return getObjectFk(node
, state
, true, false);
168 @SuppressWarnings("unused")
169 private static Integer
getPTRefFk2(TaxonNode node
, DbExportStateBase
<?
, IExportTransformer
> state
){
170 return getObjectFk(node
, state
, false, false);
173 private static Integer
getObjectFk(TaxonNode node
, DbExportStateBase
<?
, IExportTransformer
> state
, boolean isName
, boolean isFrom
){
174 TaxonNode treeNode
= (isFrom
) ? node
: node
.getParent();
175 if (treeNode
!= null){
176 Taxon taxon
= treeNode
.getTaxon();
177 CdmBase cdmBase
= (isName
) ? taxon
.getName(): taxon
.getSec();
178 return state
.getDbId(cdmBase
);
180 logger
.warn("No taxon or parent taxon found for taxon node: " + node
.toString());
186 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
189 public Class
<?
extends CdmBase
> getStandardMethodParameter() {
190 return standardMethodParameter
;