Project

General

Profile

Download (11.7 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.ArrayList;
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.berlinModel.BerlinModelTransformer;
20
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonNameImport;
21
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.RefDetailMapper;
22
import eu.etaxonomy.cdm.io.berlinModel.out.mapper.TeamOrPersonMapper;
23
import eu.etaxonomy.cdm.io.common.Source;
24
import eu.etaxonomy.cdm.io.common.mapping.out.CdmDbExportMapping;
25
import eu.etaxonomy.cdm.io.common.mapping.out.CollectionExportMapping;
26
import eu.etaxonomy.cdm.io.common.mapping.out.CreatedAndNotesMapper;
27
import eu.etaxonomy.cdm.io.common.mapping.out.DbBooleanMapper;
28
import eu.etaxonomy.cdm.io.common.mapping.out.DbExtensionMapper;
29
import eu.etaxonomy.cdm.io.common.mapping.out.DbMarkerMapper;
30
import eu.etaxonomy.cdm.io.common.mapping.out.DbObjectMapper;
31
import eu.etaxonomy.cdm.io.common.mapping.out.DbStringMapper;
32
import eu.etaxonomy.cdm.io.common.mapping.out.IExportTransformer;
33
import eu.etaxonomy.cdm.io.common.mapping.out.IdMapper;
34
import eu.etaxonomy.cdm.io.common.mapping.out.MethodMapper;
35
import eu.etaxonomy.cdm.model.common.CdmBase;
36
import eu.etaxonomy.cdm.model.common.ExtensionType;
37
import eu.etaxonomy.cdm.model.common.MarkerType;
38
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
39
import eu.etaxonomy.cdm.model.name.NonViralName;
40
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
41

    
42

    
43
/**
44
 * @author a.mueller
45
 * @created 20.03.2008
46
 * @version 1.0
47
 */
48
@Component
49
public class BerlinModelTaxonNameExport extends BerlinModelExportBase<TaxonNameBase> {
50
	private static final Logger logger = Logger.getLogger(BerlinModelTaxonNameExport.class);
51

    
52
	private static int modCount = 2500;
53
	private static final String dbTableName = "Name";
54
	private static final String pluralString = "TaxonNames";
55
	private static final Class<? extends CdmBase> standardMethodParameter = NonViralName.class;
56

    
57
	public BerlinModelTaxonNameExport(){
58
		super();
59
	}
60

    
61
	/* (non-Javadoc)
62
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
63
	 */
64
	@Override
65
	protected boolean doCheck(BerlinModelExportState state){
66
		boolean result = true;
67
		logger.warn("Checking for " + pluralString + " not yet fully implemented");
68
		List<TaxonNameBase> list = getObjectList();
69
		checkRank(list);
70

    
71
		//result &= checkRank(config);
72

    
73
		return result;
74
	}
75

    
76
	private boolean checkRank(List<TaxonNameBase> list){
77
		List<TaxonNameBase> errorNames = new ArrayList<TaxonNameBase>();
78
		for (TaxonNameBase<?,?> name : list){
79
			if (name.getRank() == null) {
80
                ;
81
            }
82
			errorNames.add(name);
83
		}
84
		if (errorNames.size() >0){
85
			System.out.println("The following names have no Rank:\n=======================");
86
			for (TaxonNameBase<?,?> name : errorNames){
87
				System.out.println("  " + name.toString());
88
				System.out.println("  " + name.getUuid());
89
				System.out.println("  " + name.getTitleCache());
90
			}
91
			return false;
92
		}else{
93
			return true;
94
		}
95
	}
96

    
97
	private CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> getMapping(){
98
		String tableName = dbTableName;
99
		CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = new CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer>(tableName);
100
		mapping.addMapper(IdMapper.NewInstance("NameId"));
101
		mapping.addMapper(MethodMapper.NewInstance("RankFk", this));
102
		mapping.addMapper(MethodMapper.NewInstance("SupraGenericName", this));
103
		mapping.addMapper(MethodMapper.NewInstance("Genus", this));
104
		mapping.addMapper(MethodMapper.NewInstance("NameCache", this));
105
		mapping.addMapper(MethodMapper.NewInstance("FullNameCache", this));
106
		mapping.addMapper(MethodMapper.NewInstance("PreliminaryFlag", this));
107
		mapping.addMapper(DbStringMapper.NewInstance("infraGenericEpithet", "GenusSubDivisionEpi"));
108
		mapping.addMapper(DbStringMapper.NewInstance("SpecificEpithet", "SpeciesEpi"));
109
		mapping.addMapper(DbStringMapper.NewInstance("infraSpecificEpithet", "InfraSpeciesEpi"));
110
		mapping.addMapper(DbStringMapper.NewInstance("appendedPhrase", "UnnamedNamePhrase"));
111
		mapping.addMapper(DbBooleanMapper.NewInstance("isHybridFormula", "HybridFormulaFlag", false, false));
112
		mapping.addMapper(DbBooleanMapper.NewInstance("isMonomHybrid", "MonomHybFlag", false, false));
113
		mapping.addMapper(DbBooleanMapper.NewInstance("isBinomHybrid", "BinomHybFlag", false, false));
114
		mapping.addMapper(DbBooleanMapper.NewInstance("isTrinomHybrid", "TrinomHybFlag", false, false));
115
		mapping.addMapper(DbStringMapper.NewFacultativeInstance("cultivarName", "CultivarName"));
116

    
117
		mapping.addMapper(TeamOrPersonMapper.NewInstance("combinationAuthorship", "AuthorTeamFk"));
118
		mapping.addMapper(TeamOrPersonMapper.NewInstance("exCombinationAuthorship", "ExAuthorTeamFk"));
119
		mapping.addMapper(TeamOrPersonMapper.NewInstance("basionymAuthorship", "BasAuthorTeamFk"));
120
		mapping.addMapper(TeamOrPersonMapper.NewInstance("exBasionymAuthorship", "ExBasAuthorTeamFk"));
121

    
122
		mapping.addMapper(DbObjectMapper.NewInstance("nomenclaturalReference", "NomRefFk"));
123
		mapping.addMapper(RefDetailMapper.NewInstance("nomenclaturalMicroReference","nomenclaturalReference", "NomRefDetailFk"));
124
		mapping.addMapper(CreatedAndNotesMapper.NewInstance(false));
125
		ExtensionType sourceAccExtensionType = (ExtensionType)getTermService().find(BerlinModelTaxonNameImport.SOURCE_ACC_UUID);
126
		if (sourceAccExtensionType != null){
127
			mapping.addMapper(DbExtensionMapper.NewInstance(sourceAccExtensionType, "Source_Acc"));
128
		}
129
		mapping.addCollectionMapping(getNomStatusMapping());
130

    
131

    
132

    
133
		//TODO
134
		//CultivarGroupName
135
		//NameSourceRefFk
136
		//     ,[Source_ACC]
137

    
138
		//publicationYear
139
		//originalPublicationYear
140
		//breed
141
		NonViralName<?> n = null;
142
		//n.getNomenclaturalMicroReference()
143
		return mapping;
144
	}
145

    
146
	private CollectionExportMapping getNomStatusMapping(){
147
		String tableName = "NomStatusRel";
148
		String collectionAttribute = "status";
149
		IdMapper parentMapper = IdMapper.NewInstance("NameFk");
150
		CollectionExportMapping mapping = CollectionExportMapping.NewInstance(tableName, collectionAttribute, parentMapper);
151
		mapping.addMapper(MethodMapper.NewInstance("NomStatusFk", this.getClass(), "getNomStatusFk", NomenclaturalStatus.class));
152
		mapping.addMapper(DbObjectMapper.NewInstance("citation", "NomStatusRefFk"));
153
		mapping.addMapper(RefDetailMapper.NewInstance("citationMicroReference","citation", "NomStatusRefDetailFk"));
154
		mapping.addMapper(DbMarkerMapper.NewInstance(MarkerType.IS_DOUBTFUL(), "DoubtfulFlag", false));
155
		mapping.addMapper(CreatedAndNotesMapper.NewInstance());
156

    
157
		return mapping;
158
	}
159

    
160
	@Override
161
    protected void doInvoke(BerlinModelExportState state){
162
		try{
163
			logger.info("start make "+pluralString+" ...");
164
			boolean success = true ;
165
			doDelete(state);
166

    
167
			TransactionStatus txStatus = startTransaction(true);
168
			logger.info("load "+pluralString+" ...");
169
			List<TaxonNameBase> names = getObjectList();
170

    
171
			CdmDbExportMapping<BerlinModelExportState, BerlinModelExportConfigurator, IExportTransformer> mapping = getMapping();
172
			mapping.initialize(state);
173
			logger.info("save "+pluralString+" ...");
174
			int count = 0;
175
			for (TaxonNameBase<?,?> name : names){
176
				doCount(count++, modCount, pluralString);
177
				success &= mapping.invoke(name);
178
				//TODO rank = null or rank < genus and genusOrUninomial != null
179
			}
180
			commitTransaction(txStatus);
181
			logger.info("end make " + pluralString+ " ..." + getSuccessString(success));
182

    
183
			if (!success){
184
				state.setUnsuccessfull();
185
			}
186
			return;
187
		}catch(SQLException e){
188
			e.printStackTrace();
189
			logger.error(e.getMessage());
190
			state.setUnsuccessfull();
191
			return;
192
		}
193
	}
194

    
195
	protected List<TaxonNameBase> getObjectList(){
196
		List<TaxonNameBase> list = getNameService().list(null,100000000, null,null,null);
197
		return list;
198
	}
199

    
200

    
201
	protected boolean doDelete(BerlinModelExportState state){
202
		BerlinModelExportConfigurator bmeConfig = state.getConfig();
203

    
204
		String sql;
205
		Source destination =  bmeConfig.getDestination();
206
		//RelPTaxon
207
		sql = "DELETE FROM RelPTaxon";
208
		destination.setQuery(sql);
209
		destination.update(sql);
210
		//Fact
211
		sql = "DELETE FROM Fact";
212
		destination.setQuery(sql);
213
		destination.update(sql);
214
		//PTaxon
215
		sql = "DELETE FROM PTaxon";
216
		destination.setQuery(sql);
217
		destination.update(sql);
218

    
219
		//NameHistory
220
		sql = "DELETE FROM NameHistory";
221
		destination.setQuery(sql);
222
		destination.update(sql);
223
		//RelName
224
		sql = "DELETE FROM RelName";
225
		destination.setQuery(sql);
226
		destination.update(sql);
227
		//NomStatusRel
228
		sql = "DELETE FROM NomStatusRel";
229
		destination.setQuery(sql);
230
		destination.update(sql);
231
		//Name
232
		sql = "DELETE FROM Name";
233
		destination.setQuery(sql);
234
		destination.update(sql);
235
		return true;
236
	}
237

    
238

    
239
	/* (non-Javadoc)
240
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
241
	 */
242
	@Override
243
    protected boolean isIgnore(BerlinModelExportState state){
244
		return ! state.getConfig().isDoTaxonNames();
245
	}
246

    
247
	//called by MethodMapper
248
	@SuppressWarnings("unused")
249
	private static Integer getRankFk(NonViralName<?> name){
250
		Integer result = BerlinModelTransformer.rank2RankId(name.getRank());
251
		if (result == null){
252
			logger.warn ("Rank = null is not allowed in Berlin Model. Rank was changed to KINGDOM: " + name);
253
			result = 1;
254
		}
255
		return result;
256
	}
257

    
258
	//called by MethodMapper
259
	@SuppressWarnings("unused")
260
	private static Integer getNomStatusFk(NomenclaturalStatus status){
261
		return BerlinModelTransformer.nomStatus2nomStatusFk(status.getType());
262
	}
263

    
264
	//called by MethodMapper
265
	@SuppressWarnings("unused")
266
	private static String getSupraGenericName(NonViralName<?> name){
267
		if (name.isSupraGeneric()){
268
			return name.getGenusOrUninomial();
269
		}else{
270
			return null;
271
		}
272
	}
273

    
274
	//called by MethodMapper
275
	@SuppressWarnings("unused")
276
	private static String getGenus(NonViralName<?> name){
277
		if (! name.isSupraGeneric()){
278
			return name.getGenusOrUninomial();
279
		}else{
280
			return null;
281
		}
282
	}
283

    
284
	//called by MethodMapper
285
	@SuppressWarnings("unused")
286
	private static String getNameCache(NonViralName<?> name){
287
		if (name.isProtectedNameCache()){
288
			return name.getNameCache();
289
		}else{
290
			return null;
291
		}
292
	}
293

    
294
	//called by MethodMapper
295
	@SuppressWarnings("unused")
296
	private static String getFullNameCache(NonViralName<?> name){
297
		if (name.isProtectedTitleCache()){
298
			return name.getTitleCache();
299
		}else{
300
			return null;
301
		}
302
	}
303

    
304
	//called by MethodMapper
305
	@SuppressWarnings("unused")
306
	private static Boolean getPreliminaryFlag(NonViralName<?> name){
307
		if (name.isProtectedTitleCache() || name.isProtectedNameCache()){
308
			if (name.isProtectedTitleCache() && name.isProtectedNameCache()){
309
				logger.warn("protectedTitleCache and protectedNameCache do not have the same value for name " + name.getTitleCache() + ". This can not be mapped appropriately to the Berlin Model ");
310
			}
311
			return true;
312
		}else{
313
			return false;
314
		}
315
	}
316

    
317

    
318

    
319
	/* (non-Javadoc)
320
	 * @see eu.etaxonomy.cdm.io.berlinModel.out.BerlinModelExportBase#getStandardMethodParameter()
321
	 */
322
	@Override
323
	public Class<? extends CdmBase> getStandardMethodParameter() {
324
		return standardMethodParameter;
325
	}
326

    
327
}
(11-11/12)