Project

General

Profile

Download (6.95 KB) Statistics
| Branch: | Revision:
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.Classification;
29
import eu.etaxonomy.cdm.model.taxon.Taxon;
30
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
31

    
32

    
33
/**
34
 * @author a.mueller
35
 * @created 20.03.2008
36
 * @version 1.0
37
 */
38
@Component
39
public class BerlinModelClassificationExport extends BerlinModelExportBase<RelationshipBase> {
40
	private static final Logger logger = Logger.getLogger(BerlinModelClassificationExport.class);
41

    
42
	private static int modCount = 1000;
43
	private static final String dbTableName = "RelPTaxon";
44
	private static final String pluralString = "TaxonNodes";
45
	private static final Class<? extends CdmBase> standardMethodParameter = TaxonNode.class;
46

    
47

    
48
	public BerlinModelClassificationExport(){
49
		super();
50
	}
51

    
52
	/* (non-Javadoc)
53
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
54
	 */
55
	@Override
56
	protected boolean doCheck(BerlinModelExportState state){
57
		boolean result = true;
58
		logger.warn("Checking for " + pluralString + " not yet implemented");
59
		//result &= checkArticlesWithoutJournal(bmiConfig);
60
		//result &= checkPartOfJournal(bmiConfig);
61

    
62
		return result;
63
	}
64

    
65
	private CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> getMapping(){
66
		String tableName = dbTableName;
67
		CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = new CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer>(tableName);
68
//		mapping.addMapper(IdMapper.NewInstance("RelPTaxonId"));  //is Identity column
69

    
70
		mapping.addMapper(MethodMapper.NewInstance("PTNameFk1", this.getClass(), "getPTNameFk1", standardMethodParameter, DbExportStateBase.class));
71
		mapping.addMapper(MethodMapper.NewInstance("PTRefFk1", this.getClass(), "getPTRefFk1", standardMethodParameter, DbExportStateBase.class));
72

    
73
		mapping.addMapper(MethodMapper.NewInstance("PTNameFk2", this.getClass(), "getPTNameFk2", standardMethodParameter, DbExportStateBase.class));
74
		mapping.addMapper(MethodMapper.NewInstance("PTRefFk2", this.getClass(), "getPTRefFk2", standardMethodParameter, DbExportStateBase.class));
75

    
76
		mapping.addMapper(DbConstantMapper.NewInstance("RelQualifierFk", Types.INTEGER, 1));
77

    
78
		mapping.addMapper(DbObjectMapper.NewInstance("referenceForParentChildRelation", "RelRefFk"));
79
//		mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));
80
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
81

    
82
		return mapping;
83
	}
84

    
85
	@Override
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
                String message = "An undefined error occurred during Classification export";
118
                state.getResult().addError(message);
119
			}
120
			return;
121
		}catch(SQLException e){
122
			e.printStackTrace();
123
			logger.error(e.getMessage());
124
			state.getResult().addException(e);
125
			return;
126
		}
127
	}
128

    
129

    
130
	protected boolean doDelete(BerlinModelExportState state){
131
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
132

    
133
		//already deleted in BerlinModelTaxonRelationExport
134
//		String sql;
135
//		Source destination =  bmeConfig.getDestination();
136
//		//RelPTaxon
137
//		sql = "DELETE FROM RelPTaxon ";
138
//		destination.setQuery(sql);
139
//		destination.update(sql);
140

    
141
		return true;
142
	}
143

    
144

    
145
	/* (non-Javadoc)
146
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
147
	 */
148
	@Override
149
    protected boolean isIgnore(BerlinModelExportState state){
150
		return ! state.getConfig().isDoRelTaxa();
151
	}
152

    
153
	//called by MethodMapper
154

    
155
	@SuppressWarnings("unused")
156
	private static Integer getPTNameFk1(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
157
		return getObjectFk(node, state, true, true);
158
	}
159

    
160
	@SuppressWarnings("unused")
161
	private static Integer getPTRefFk1(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
162
		return getObjectFk(node, state, false, true);
163
	}
164

    
165
	@SuppressWarnings("unused")
166
	private static Integer getPTNameFk2(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
167
		return getObjectFk(node, state, true, false);
168
	}
169

    
170
	@SuppressWarnings("unused")
171
	private static Integer getPTRefFk2(TaxonNode node, DbExportStateBase<?, IExportTransformer> state){
172
		return getObjectFk(node, state, false, false);
173
	}
174

    
175
	private static Integer getObjectFk(TaxonNode node, DbExportStateBase<?, IExportTransformer> state, boolean isName, boolean isFrom){
176
		TaxonNode treeNode = (isFrom) ? node :  node.getParent();
177
		if (treeNode != null){
178
			Taxon taxon = treeNode.getTaxon();
179
			CdmBase cdmBase = (isName) ? taxon.getName(): taxon.getSec();
180
			return state.getDbId(cdmBase);
181
		}
182
		logger.warn("No taxon or parent taxon found for taxon node: " + node.toString());
183
		return null;
184
	}
185

    
186

    
187
	/* (non-Javadoc)
188
	 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
189
	 */
190
	@Override
191
	public Class<? extends CdmBase> getStandardMethodParameter() {
192
		return standardMethodParameter;
193
	}
194
}
(3-3/12)