Import ex authors
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / berlinModel / out / BerlinModelClassificationExport.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.cdm.io.berlinModel.out;
10
11 import java.sql.SQLException;
12 import java.sql.Types;
13 import java.util.List;
14
15 import org.apache.log4j.Logger;
16 import org.springframework.stereotype.Component;
17 import org.springframework.transaction.TransactionStatus;
18
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;
32
33
34 /**
35 * @author a.mueller
36 * @created 20.03.2008
37 * @version 1.0
38 */
39 @Component
40 public class BerlinModelClassificationExport extends BerlinModelExportBase<RelationshipBase> {
41 private static final Logger logger = Logger.getLogger(BerlinModelClassificationExport.class);
42
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;
47
48
49 public BerlinModelClassificationExport(){
50 super();
51 }
52
53 /* (non-Javadoc)
54 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
55 */
56 @Override
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);
62
63 return result;
64 }
65
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
70
71 mapping.addMapper(MethodMapper.NewInstance("PTNameFk1", this.getClass(), "getPTNameFk1", standardMethodParameter, DbExportStateBase.class));
72 mapping.addMapper(MethodMapper.NewInstance("PTRefFk1", this.getClass(), "getPTRefFk1", standardMethodParameter, DbExportStateBase.class));
73
74 mapping.addMapper(MethodMapper.NewInstance("PTNameFk2", this.getClass(), "getPTNameFk2", standardMethodParameter, DbExportStateBase.class));
75 mapping.addMapper(MethodMapper.NewInstance("PTRefFk2", this.getClass(), "getPTRefFk2", standardMethodParameter, DbExportStateBase.class));
76
77 mapping.addMapper(DbConstantMapper.NewInstance("RelQualifierFk", Types.INTEGER, 1));
78
79 mapping.addMapper(DbObjectMapper.NewInstance("referenceForParentChildRelation", "RelRefFk"));
80 // mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));
81 mapping.addMapper(CreatedAndNotesMapper.NewInstance());
82
83 return mapping;
84 }
85
86 protected void doInvoke(BerlinModelExportState state){
87 if (state.getConfig().isUseClassification() == false){
88 return;
89 }
90
91 try{
92 logger.info("start make " + pluralString + " ...");
93 boolean success = true ;
94 doDelete(state);
95
96 TransactionStatus txStatus = startTransaction(true);
97
98 List<Classification> list = getClassificationService().list(null,10000000,0,null,null);
99
100 CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = getMapping();
101 mapping.initialize(state);
102
103 int count = 0;
104 for (Classification tree : list){
105 for (TaxonNode node : tree.getAllNodes()){
106 if (node.isTopmostNode()){
107 continue;
108 }else{
109 doCount(count++, modCount, pluralString);
110 success &= mapping.invoke(node);
111 }
112 }
113 }
114 commitTransaction(txStatus);
115 logger.info("end make " + pluralString + " ..." + getSuccessString(success));
116 if (!success){
117 state.setUnsuccessfull();
118 }
119 return;
120 }catch(SQLException e){
121 e.printStackTrace();
122 logger.error(e.getMessage());
123 state.setUnsuccessfull();
124 return;
125 }
126 }
127
128
129 protected boolean doDelete(BerlinModelExportState state){
130 BerlinModelExportConfigurator bmeConfig = state.getConfig();
131
132 //already deleted in BerlinModelTaxonRelationExport
133 // String sql;
134 // Source destination = bmeConfig.getDestination();
135 // //RelPTaxon
136 // sql = "DELETE FROM RelPTaxon ";
137 // destination.setQuery(sql);
138 // destination.update(sql);
139
140 return true;
141 }
142
143
144 /* (non-Javadoc)
145 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
146 */
147 protected boolean isIgnore(BerlinModelExportState state){
148 return ! state.getConfig().isDoRelTaxa();
149 }
150
151 //called by MethodMapper
152
153 @SuppressWarnings("unused")
154 private static Integer getPTNameFk1(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
155 return getObjectFk(node, state, true, true);
156 }
157
158 @SuppressWarnings("unused")
159 private static Integer getPTRefFk1(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
160 return getObjectFk(node, state, false, true);
161 }
162
163 @SuppressWarnings("unused")
164 private static Integer getPTNameFk2(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
165 return getObjectFk(node, state, true, false);
166 }
167
168 @SuppressWarnings("unused")
169 private static Integer getPTRefFk2(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
170 return getObjectFk(node, state, false, false);
171 }
172
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);
179 }
180 logger.warn("No taxon or parent taxon found for taxon node: " + node.toString());
181 return null;
182 }
183
184
185 /* (non-Javadoc)
186 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
187 */
188 @Override
189 public Class<? extends CdmBase> getStandardMethodParameter() {
190 return standardMethodParameter;
191 }
192 }