Project

General

Profile

Download (6.93 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.util.List;
13

    
14
import org.apache.log4j.Logger;
15
import org.springframework.stereotype.Component;
16
import org.springframework.transaction.TransactionStatus;
17

    
18
import eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer;
19
import eu.etaxonomy.cdm.io.common.DbExportStateBase;
20
import eu.etaxonomy.cdm.io.common.Source;
21
import eu.etaxonomy.cdm.io.common.mapping.out.CdmDbExportMapping;
22
import eu.etaxonomy.cdm.io.common.mapping.out.CreatedAndNotesMapper;
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.TaxonBase;
29
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
30

    
31

    
32
/**
33
 * @author a.mueller
34
 * @created 20.03.2008
35
 */
36
@Component
37
public class BerlinModelTaxonRelationExport extends BerlinModelExportBase<RelationshipBase> {
38
    private static final long serialVersionUID = -7568153921512019118L;
39

    
40
    private static final Logger logger = Logger.getLogger(BerlinModelTaxonRelationExport.class);
41

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

    
47

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

    
52
	@Override
53
	protected boolean doCheck(BerlinModelExportState state){
54
		boolean result = true;
55
		logger.warn("Exporting synonym relationships not implemented anymore. See https://dev.e-taxonomy.eu/redmine/issues/5974 for reasons.");
56
		logger.warn("Checking for " + pluralString + " not yet implemented");
57

    
58
		return result;
59
	}
60

    
61
	private CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> getMapping(){
62
		String tableName = dbTableName;
63
		CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = new CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer>(tableName);
64
//		mapping.addMapper(IdMapper.NewInstance("RelPTaxonId"));  //is Identity column
65

    
66
		mapping.addMapper(MethodMapper.NewInstance("PTNameFk1", this.getClass(), "getPTNameFk1", standardMethodParameter, DbExportStateBase.class));
67
		mapping.addMapper(MethodMapper.NewInstance("PTRefFk1", this.getClass(), "getPTRefFk1", standardMethodParameter, DbExportStateBase.class));
68

    
69
		mapping.addMapper(MethodMapper.NewInstance("PTNameFk2", this.getClass(), "getPTNameFk2", standardMethodParameter, DbExportStateBase.class));
70
		mapping.addMapper(MethodMapper.NewInstance("PTRefFk2", this.getClass(), "getPTRefFk2", standardMethodParameter, DbExportStateBase.class));
71

    
72
		mapping.addMapper(MethodMapper.NewInstance("RelQualifierFk", this));
73

    
74
		mapping.addMapper(DbObjectMapper.NewInstance("citation", "RelRefFk"));
75
//		mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));
76
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
77

    
78
		return mapping;
79
	}
80

    
81
	@Override
82
    protected void doInvoke(BerlinModelExportState state){
83
		try{
84
			logger.info("start make " + pluralString + " ...");
85
			boolean success = true ;
86
			doDelete(state);
87

    
88
			TransactionStatus txStatus = startTransaction(true);
89

    
90
			List<TaxonRelationship> list = getTaxonService().listTaxonRelationships(null,  null,  null,  null,  null);
91

    
92
			CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = getMapping();
93
			mapping.initialize(state);
94

    
95
			int count = 0;
96
			for (TaxonRelationship rel : list){
97
				doCount(count++, modCount, pluralString);
98
				success &= mapping.invoke(rel);
99

    
100
			}
101
			commitTransaction(txStatus);
102
			logger.info("end make " + pluralString + " ..." + getSuccessString(success));
103
			if (!success){
104
                String message = "An undefined error occurred during taxon relation export";
105
                state.getResult().addError(message);
106
			}
107
			return;
108
		}catch(SQLException e){
109
			e.printStackTrace();
110
			logger.error(e.getMessage());
111
			state.getResult().addException(e);
112
			return;
113
		}
114
	}
115

    
116

    
117
	protected boolean doDelete(BerlinModelExportState state){
118
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
119

    
120
		String sql;
121
		Source destination =  bmeConfig.getDestination();
122
		//RelPTaxon
123
		sql = "DELETE FROM RelPTaxon";
124
		destination.setQuery(sql);
125
		destination.update(sql);
126

    
127
		return true;
128
	}
129

    
130
	@Override
131
    protected boolean isIgnore(BerlinModelExportState state){
132
		return ! state.getConfig().isDoRelTaxa();
133
	}
134

    
135
	//called by MethodMapper
136
	@SuppressWarnings("unused")
137
	private static Integer getRelQualifierFk(RelationshipBase<?, ?, ?> rel){
138
		return BerlinModelTransformer.taxRelation2relPtQualifierFk(rel);
139
	}
140

    
141
	@SuppressWarnings("unused")
142
	private static Integer getPTNameFk1(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
143
		return getObjectFk(rel, state, true, true);
144
	}
145

    
146
	@SuppressWarnings("unused")
147
	private static Integer getPTRefFk1(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
148
		return getObjectFk(rel, state, false, true);
149
	}
150

    
151
	@SuppressWarnings("unused")
152
	private static Integer getPTNameFk2(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
153
		return getObjectFk(rel, state, true, false);
154
	}
155

    
156
	@SuppressWarnings("unused")
157
	private static Integer getPTRefFk2(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
158
		return getObjectFk(rel, state, false, false);
159
	}
160

    
161
	private static Integer getObjectFk(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state, boolean isName, boolean isFrom){
162
		TaxonBase<?> taxon = null;
163
		if (rel.isInstanceOf(TaxonRelationship.class)){
164
			TaxonRelationship tr = (TaxonRelationship)rel;
165
			taxon = (isFrom) ? tr.getFromTaxon():  tr.getToTaxon();
166
		//#5974 we need a new mapper for synonym relationships
167
//		}else if (rel.isInstanceOf(SynonymRelationship.class)){
168
//			SynonymRelationship sr = (SynonymRelationship)rel;
169
//			taxon = (isFrom) ? sr.getSynonym() : sr.getAcceptedTaxon();
170
		}
171
		if (taxon != null){
172
			CdmBase cdmBase = (isName) ? taxon.getName(): taxon.getSec();
173
			return state.getDbId(cdmBase);
174
		}
175
		logger.warn("No taxon found for relationship: " + rel.toString());
176
		return null;
177
	}
178

    
179
	@Override
180
	public Class<? extends CdmBase> getStandardMethodParameter() {
181
		return standardMethodParameter;
182
	}
183
}
(12-12/12)