Project

General

Profile

Download (5.51 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.eflora.centralAfrica.checklist;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.Map;
17
import java.util.Set;
18

    
19
import org.apache.log4j.Logger;
20
import org.springframework.stereotype.Component;
21

    
22
import eu.etaxonomy.cdm.common.CdmUtils;
23
import eu.etaxonomy.cdm.io.common.IOValidator;
24
import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
25
import eu.etaxonomy.cdm.io.common.mapping.DbImportObjectCreationMapper;
26
import eu.etaxonomy.cdm.io.common.mapping.IMappingImport;
27
import eu.etaxonomy.cdm.io.eflora.centralAfrica.checklist.validation.CentralAfricaChecklistTaxonImportValidator;
28
import eu.etaxonomy.cdm.model.common.CdmBase;
29
import eu.etaxonomy.cdm.model.name.IBotanicalName;
30
import eu.etaxonomy.cdm.model.name.Rank;
31
import eu.etaxonomy.cdm.model.name.TaxonNameFactory;
32
import eu.etaxonomy.cdm.model.reference.Reference;
33
import eu.etaxonomy.cdm.model.taxon.Synonym;
34
import eu.etaxonomy.cdm.model.taxon.SynonymType;
35
import eu.etaxonomy.cdm.model.taxon.Taxon;
36
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
37
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
38

    
39

    
40
/**
41
 * @author a.mueller
42
 * @created 20.02.2010
43
 */
44
@Component
45
public class CentralAfricaChecklistSynonymImport  extends CentralAfricaChecklistImportBase<TaxonBase> implements IMappingImport<TaxonBase, CentralAfricaChecklistImportState>{
46
    private static final long serialVersionUID = 954395388404224712L;
47

    
48
    private static final Logger logger = Logger.getLogger(CentralAfricaChecklistSynonymImport.class);
49

    
50
	private NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
51

    
52

    
53
	private DbImportMapping<?, ?> mapping;
54

    
55
	//second path is not used anymore, there is now an ErmsTaxonRelationImport class instead
56
//	private boolean isSecondPath = false;
57

    
58
//	private int modCount = 10000;
59
	private static final String pluralString = "synonyms";
60
	private static final String dbTableName = "synonyms";
61
	private static final Class<?> cdmTargetClass = TaxonBase.class;
62
	private static final String strOrderBy = "";
63

    
64
	public CentralAfricaChecklistSynonymImport(){
65
		super(pluralString, dbTableName, cdmTargetClass);
66
	}
67

    
68

    
69
	@Override
70
	protected String getIdQuery() {
71
		String strQuery = " SELECT syn_id FROM " + dbTableName + strOrderBy;
72
		return strQuery;
73
	}
74

    
75
	@Override
76
    protected DbImportMapping getMapping() {
77
		if (mapping == null){
78
			mapping = new DbImportMapping();
79

    
80
			mapping.addMapper(DbImportObjectCreationMapper.NewInstance(this, "syn_id", SYNONYM_NAMESPACE));
81
			//TODO Synonym mapper gibts es auch
82

    
83
		}
84
		return mapping;
85
	}
86

    
87
	@Override
88
	protected String getRecordQuery(CentralAfricaChecklistImportConfigurator config) {
89
		String strSelect = " SELECT * ";
90
		String strFrom = " FROM " + dbTableName;
91
		String strWhere = " WHERE ( syn_id IN (" + ID_LIST_TOKEN + ") )";
92
		String strRecordQuery = strSelect + strFrom + strWhere + strOrderBy;
93
		return strRecordQuery;
94
	}
95

    
96
	@Override
97
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, CentralAfricaChecklistImportState state) {
98
		String nameSpace;
99
		Class<?> cdmClass;
100
		Set<String> idSet;
101
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
102

    
103
		try{
104
				Set<String> taxonIdSet = new HashSet<String>();
105
				while (rs.next()){
106
					handleForeignKey(rs, taxonIdSet, "acc_id");
107
				}
108

    
109
			//taxon map
110
			nameSpace = TAXON_NAMESPACE;
111
			cdmClass = Taxon.class;
112
			idSet = taxonIdSet;
113
			Map<String, Taxon> taxonMap = (Map<String, Taxon>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
114
			result.put(nameSpace, taxonMap);
115

    
116
		} catch (SQLException e) {
117
			throw new RuntimeException(e);
118
		}
119
		return result;
120
	}
121

    
122
	@Override
123
    public TaxonBase createObject(ResultSet rs, CentralAfricaChecklistImportState state) throws SQLException {
124
		IBotanicalName speciesName = TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES());
125

    
126

    
127
		Integer accId = rs.getInt("acc_id");
128
		Taxon taxon = CdmBase.deproxy(state.getRelatedObject(TAXON_NAMESPACE, String.valueOf(accId)), Taxon.class);
129

    
130
		Reference sec = taxon.getSec();
131

    
132
		String genusString = rs.getString("synonym genus");
133
		String speciesString = rs.getString("synonym species");
134
		String authorityString = rs.getString("synonym authority");
135

    
136
		Synonym synonym = Synonym.NewInstance(speciesName, sec);
137

    
138
		speciesName.setGenusOrUninomial(genusString);
139
		speciesName.setSpecificEpithet(speciesString);
140
		parser.handleAuthors(speciesName, CdmUtils.concat(" ", new String[] {"", genusString, speciesString, authorityString}), authorityString);
141

    
142
		if (taxon != null){
143
			taxon.addSynonym(synonym, SynonymType.SYNONYM_OF());
144
		}else{
145
			logger.warn("Taxon (" + accId + ") not available for Synonym " + synonym.getTitleCache());
146
		}
147
		return synonym;
148
	}
149

    
150

    
151
	@Override
152
	protected boolean doCheck(CentralAfricaChecklistImportState state){
153
		IOValidator<CentralAfricaChecklistImportState> validator = new CentralAfricaChecklistTaxonImportValidator();
154
		return validator.validate(state);
155
	}
156

    
157
	@Override
158
    protected boolean isIgnore(CentralAfricaChecklistImportState state){
159
		return ! state.getConfig().isDoTaxa();
160
	}
161

    
162
}
(5-5/7)