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
.berlinModel
.out
.mapper
.CreatedAndNotesMapper
;
20 import eu
.etaxonomy
.cdm
.io
.berlinModel
.out
.mapper
.DbConstantMapper
;
21 import eu
.etaxonomy
.cdm
.io
.berlinModel
.out
.mapper
.DbObjectMapper
;
22 import eu
.etaxonomy
.cdm
.io
.berlinModel
.out
.mapper
.MethodMapper
;
23 import eu
.etaxonomy
.cdm
.io
.common
.DbExportStateBase
;
24 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
25 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipBase
;
26 import eu
.etaxonomy
.cdm
.model
.taxon
.ITreeNode
;
27 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
28 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
29 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonomicTree
;
38 public class BerlinModelTaxonomicTreeExport
extends BerlinModelExportBase
<RelationshipBase
> {
39 private static final Logger logger
= Logger
.getLogger(BerlinModelTaxonomicTreeExport
.class);
41 private static int modCount
= 1000;
42 private static final String dbTableName
= "RelPTaxon";
43 private static final String pluralString
= "TaxonNodes";
44 private static final Class
<?
extends CdmBase
> standardMethodParameter
= TaxonNode
.class;
47 public BerlinModelTaxonomicTreeExport(){
52 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
55 protected boolean doCheck(BerlinModelExportState state
){
56 boolean result
= true;
57 logger
.warn("Checking for " + pluralString
+ " not yet implemented");
58 //result &= checkArticlesWithoutJournal(bmiConfig);
59 //result &= checkPartOfJournal(bmiConfig);
64 private BerlinModelExportMapping
getMapping(){
65 String tableName
= dbTableName
;
66 BerlinModelExportMapping mapping
= new BerlinModelExportMapping(tableName
);
67 // mapping.addMapper(IdMapper.NewInstance("RelPTaxonId")); //is Identity column
69 mapping
.addMapper(MethodMapper
.NewInstance("PTNameFk1", this.getClass(), "getPTNameFk1", standardMethodParameter
, DbExportStateBase
.class));
70 mapping
.addMapper(MethodMapper
.NewInstance("PTRefFk1", this.getClass(), "getPTRefFk1", standardMethodParameter
, DbExportStateBase
.class));
72 mapping
.addMapper(MethodMapper
.NewInstance("PTNameFk2", this.getClass(), "getPTNameFk2", standardMethodParameter
, DbExportStateBase
.class));
73 mapping
.addMapper(MethodMapper
.NewInstance("PTRefFk2", this.getClass(), "getPTRefFk2", standardMethodParameter
, DbExportStateBase
.class));
75 mapping
.addMapper(DbConstantMapper
.NewInstance("RelQualifierFk", Types
.INTEGER
, 1));
77 mapping
.addMapper(DbObjectMapper
.NewInstance("referenceForParentChildRelation", "RelRefFk"));
78 // mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));
79 mapping
.addMapper(CreatedAndNotesMapper
.NewInstance());
84 protected boolean doInvoke(BerlinModelExportState state
){
85 if (state
.getConfig().isUseTaxonomicTree() == false){
90 logger
.info("start make " + pluralString
+ " ...");
91 boolean success
= true ;
94 TransactionStatus txStatus
= startTransaction(true);
96 List
<TaxonomicTree
> list
= getTaxonTreeService().list(null,10000000,0,null,null);
98 BerlinModelExportMapping mapping
= getMapping();
99 mapping
.initialize(state
);
102 for (TaxonomicTree tree
: list
){
103 for (TaxonNode node
: tree
.getAllNodes()){
104 if (node
.getParent() == null){
107 doCount(count
++, modCount
, pluralString
);
108 success
&= mapping
.invoke(node
);
112 commitTransaction(txStatus
);
113 logger
.info("end make " + pluralString
+ " ..." + getSuccessString(success
));
115 }catch(SQLException e
){
117 logger
.error(e
.getMessage());
123 protected boolean doDelete(BerlinModelExportState state
){
124 BerlinModelExportConfigurator bmeConfig
= state
.getConfig();
126 //already deleted in BerlinModelTaxonRelationExport
128 // Source destination = bmeConfig.getDestination();
130 // sql = "DELETE FROM RelPTaxon ";
131 // destination.setQuery(sql);
132 // destination.update(sql);
139 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
141 protected boolean isIgnore(BerlinModelExportState state
){
142 return ! state
.getConfig().isDoTaxonNames();
145 //called by MethodMapper
147 @SuppressWarnings("unused")
148 private static Integer
getPTNameFk1(TaxonNode node
, DbExportStateBase
<?
> state
){
149 return getObjectFk(node
, state
, true, true);
152 @SuppressWarnings("unused")
153 private static Integer
getPTRefFk1(TaxonNode node
, DbExportStateBase
<?
> state
){
154 return getObjectFk(node
, state
, false, true);
157 @SuppressWarnings("unused")
158 private static Integer
getPTNameFk2(TaxonNode node
, DbExportStateBase
<?
> state
){
159 return getObjectFk(node
, state
, true, false);
162 @SuppressWarnings("unused")
163 private static Integer
getPTRefFk2(TaxonNode node
, DbExportStateBase
<?
> state
){
164 return getObjectFk(node
, state
, false, false);
167 private static Integer
getObjectFk(TaxonNode node
, DbExportStateBase
<?
> state
, boolean isName
, boolean isFrom
){
168 ITreeNode treeNode
= (isFrom
) ? node
: node
.getParent();
169 if (treeNode
instanceof TaxonNode
){
170 Taxon taxon
= ((TaxonNode
) treeNode
).getTaxon();
171 CdmBase cdmBase
= (isName
) ? taxon
.getName(): taxon
.getSec();
172 return state
.getDbId(cdmBase
);
174 logger
.warn("No taxon or parent taxon found for taxon node: " + node
.toString());
180 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
183 public Class
<?
extends CdmBase
> getStandardMethodParameter() {
184 return standardMethodParameter
;