Project

General

Profile

Download (7.18 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.SynonymRelationship;
29
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
30
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
31

    
32

    
33
/**
34
 * @author a.mueller
35
 * @created 20.03.2008
36
 * @version 1.0
37
 */
38
@Component
39
public class BerlinModelTaxonRelationExport extends BerlinModelExportBase<RelationshipBase> {
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
	/* (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(MethodMapper.NewInstance("RelQualifierFk", this));
77
		
78
		mapping.addMapper(DbObjectMapper.NewInstance("citation", "RelRefFk"));
79
//		mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "FactRefDetailFk"));
80
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
81

    
82
		return mapping;
83
	}
84
	
85
	protected void doInvoke(BerlinModelExportState state){
86
		try{
87
			logger.info("start make " + pluralString + " ...");
88
			boolean success = true ;
89
			doDelete(state);
90
			
91
			TransactionStatus txStatus = startTransaction(true);
92
			
93
			List<RelationshipBase> list = getTaxonService().getAllRelationships(100000000, 0);
94
			
95
			CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = getMapping();
96
			mapping.initialize(state);
97
			
98
			int count = 0;
99
			for (RelationshipBase<?,?,?> rel : list){
100
				if (rel.isInstanceOf(TaxonRelationship.class) || rel.isInstanceOf(SynonymRelationship.class)){
101
					doCount(count++, modCount, pluralString);
102
					success &= mapping.invoke(rel);
103
				}
104
			}
105
			commitTransaction(txStatus);
106
			logger.info("end make " + pluralString + " ..." + getSuccessString(success));
107
			if (!success){
108
				state.setUnsuccessfull();
109
			}
110
			return;
111
		}catch(SQLException e){
112
			e.printStackTrace();
113
			logger.error(e.getMessage());
114
			state.setUnsuccessfull();
115
			return;
116
		}
117
	}
118

    
119
	
120
	protected boolean doDelete(BerlinModelExportState state){
121
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
122
		
123
		String sql;
124
		Source destination =  bmeConfig.getDestination();
125
		//RelPTaxon
126
		sql = "DELETE FROM RelPTaxon";
127
		destination.setQuery(sql);
128
		destination.update(sql);
129

    
130
		return true;
131
	}
132
		
133
	
134
	/* (non-Javadoc)
135
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
136
	 */
137
	protected boolean isIgnore(BerlinModelExportState state){
138
		return ! state.getConfig().isDoRelTaxa();
139
	}
140
	
141
	//called by MethodMapper
142
	@SuppressWarnings("unused")
143
	private static Integer getRelQualifierFk(RelationshipBase<?, ?, ?> rel){
144
		return BerlinModelTransformer.taxRelation2relPtQualifierFk(rel);
145
	}
146
	
147
	@SuppressWarnings("unused")
148
	private static Integer getPTNameFk1(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
149
		return getObjectFk(rel, state, true, true);
150
	}
151
	
152
	@SuppressWarnings("unused")
153
	private static Integer getPTRefFk1(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
154
		return getObjectFk(rel, state, false, true);
155
	}
156
	
157
	@SuppressWarnings("unused")
158
	private static Integer getPTNameFk2(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
159
		return getObjectFk(rel, state, true, false);
160
	}
161
	
162
	@SuppressWarnings("unused")
163
	private static Integer getPTRefFk2(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state){
164
		return getObjectFk(rel, state, false, false);
165
	}
166

    
167
	private static Integer getObjectFk(RelationshipBase<?, ?, ?> rel, DbExportStateBase<?, IExportTransformer> state, boolean isName, boolean isFrom){
168
		TaxonBase<?> taxon = null;
169
		if (rel.isInstanceOf(TaxonRelationship.class)){
170
			TaxonRelationship tr = (TaxonRelationship)rel;
171
			taxon = (isFrom) ? tr.getFromTaxon():  tr.getToTaxon();
172
		}else if (rel.isInstanceOf(SynonymRelationship.class)){
173
			SynonymRelationship sr = (SynonymRelationship)rel;
174
			taxon = (isFrom) ? sr.getSynonym() : sr.getAcceptedTaxon();
175
		}
176
		if (taxon != null){
177
			CdmBase cdmBase = (isName) ? taxon.getName(): taxon.getSec();
178
			return state.getDbId(cdmBase);
179
		}
180
		logger.warn("No taxon found for relationship: " + rel.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
}
(12-12/12)