Project

General

Profile

Download (4.44 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

    
10
package eu.etaxonomy.cdm.io.pesi.indexFungorum;
11

    
12
import java.sql.ResultSet;
13
import java.util.HashMap;
14
import java.util.Map;
15

    
16
import org.apache.log4j.Logger;
17
import org.springframework.stereotype.Component;
18
import org.springframework.transaction.TransactionStatus;
19

    
20
import eu.etaxonomy.cdm.io.pesi.out.PesiTransformer;
21
import eu.etaxonomy.cdm.model.common.CdmBase;
22
import eu.etaxonomy.cdm.model.name.Rank;
23
import eu.etaxonomy.cdm.model.name.TaxonName;
24
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
25
import eu.etaxonomy.cdm.model.reference.Reference;
26
import eu.etaxonomy.cdm.model.taxon.Taxon;
27

    
28
/**
29
 * @author a.mueller
30
 * @since 27.02.2012
31
 */
32
@Component
33
public class IndexFungorumSupraGeneraImport  extends IndexFungorumImportBase {
34

    
35
    private static final long serialVersionUID = -8504227175493151403L;
36
    private static final Logger logger = Logger.getLogger(IndexFungorumSupraGeneraImport.class);
37

    
38
	private static final String pluralString = "Supragenera";
39
	private static final String dbTableName = "tblSupragenericNames";
40

    
41
	private static final String SUPRAGENERIC_NAMES = "Suprageneric names";
42
	private static final String COL_RECORD_NUMBER = "RECORD NUMBER";
43

    
44
	public IndexFungorumSupraGeneraImport(){
45
		super(pluralString, dbTableName);
46
	}
47

    
48
	@Override
49
	protected String getRecordQuery(IndexFungorumImportConfigurator config) {
50
		String strRecordQuery =
51
			" SELECT * " +
52
			" FROM [tblSupragenericNames] " +
53
			"";
54
		return strRecordQuery;
55
	}
56

    
57
	@Override
58
	protected void doInvoke(IndexFungorumImportState state) {
59

    
60
	    logger.info("Start supra genera ...");
61

    
62
	    //handle source reference first
63
		Reference sourceReference = state.getConfig().getSourceReference();
64
		getReferenceService().save(sourceReference);
65

    
66
		//query
67
		String sql = getRecordQuery(state.getConfig());
68
		ResultSet rs = state.getConfig().getSource().getResultSet(sql);
69

    
70
		//transaction and related objects
71
		TransactionStatus tx = startTransaction();
72
		state.setRelatedObjects(getRelatedObjectsForPartition(null, state));
73
		sourceReference = state.getRelatedObject(NAMESPACE_REFERENCE, SOURCE_REFERENCE, Reference.class);
74

    
75
		try {
76
			while (rs.next()){
77

    
78
				//Don't use (created by Marc): DisplayName, NomRefCache
79

    
80
				Integer id = rs.getInt(COL_RECORD_NUMBER);
81

    
82
				String supragenericNames = rs.getString(SUPRAGENERIC_NAMES);
83
				Integer rankFk = rs.getInt("PESI_RankFk");
84

    
85
				//name
86
				Rank rank = state.getTransformer().getRankByKey(String.valueOf(rankFk));
87
				TaxonName name = TaxonNameFactory.NewBotanicalInstance(rank);
88
				name.setGenusOrUninomial(supragenericNames);
89

    
90
				//taxon
91
				Taxon taxon = Taxon.NewInstance(name, sourceReference);
92
				//author + nom.ref.
93
				makeAuthorAndPublication(state, rs, name);
94
				//source
95
				makeSource(state, taxon, id, NAMESPACE_SUPRAGENERIC_NAMES );
96
				makeSource(state, name, id, NAMESPACE_SUPRAGENERIC_NAMES );
97

    
98
				getTaxonService().saveOrUpdate(taxon);
99
			}
100
		} catch (Exception e) {
101
			e.printStackTrace();
102
			logger.error(e.getMessage());
103
			tx.setRollbackOnly();
104
			state.setSuccess(false);
105
		}
106
		commitTransaction(tx);
107
	    logger.info("End supra genera ...");
108
		return;
109
	}
110

    
111
	private Taxon makeTaxon(IndexFungorumImportState state, String uninomial, Rank rank) {
112
	    TaxonName name = TaxonNameFactory.NewBotanicalInstance(rank);
113
		name.setGenusOrUninomial(uninomial);
114
		return Taxon.NewInstance(name, state.getConfig().getSourceReference());
115
	}
116

    
117
	@Override
118
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, IndexFungorumImportState state) {
119
		HashMap<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();  //not needed here
120

    
121
		//sourceReference
122
		Reference sourceReference = getReferenceService().find(PesiTransformer.uuidSourceRefIndexFungorum);
123
		Map<String, Reference> referenceMap = new HashMap<>();
124
		referenceMap.put(SOURCE_REFERENCE, sourceReference);
125
		result.put(NAMESPACE_REFERENCE, referenceMap);
126

    
127
		return result;
128
	}
129

    
130
	@Override
131
	protected boolean doCheck(IndexFungorumImportState state){
132
		return true;
133
	}
134

    
135
	@Override
136
	protected boolean isIgnore(IndexFungorumImportState state){
137
		return ! state.getConfig().isDoTaxa();
138
	}
139
}
(9-9/10)