Project

General

Profile

Download (5.6 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.eflora.centralAfrica.checklist;
10

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

    
18
import org.apache.logging.log4j.LogManager;
19
import org.apache.logging.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.ISourceable;
33
import eu.etaxonomy.cdm.model.reference.Reference;
34
import eu.etaxonomy.cdm.model.taxon.Synonym;
35
import eu.etaxonomy.cdm.model.taxon.SynonymType;
36
import eu.etaxonomy.cdm.model.taxon.Taxon;
37
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
38
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
39

    
40
/**
41
 * @author a.mueller
42
 * @since 20.02.2010
43
 */
44
@Component
45
public class CentralAfricaChecklistSynonymImport
46
        extends CentralAfricaChecklistImportBase<TaxonBase>
47
        implements IMappingImport<TaxonBase, CentralAfricaChecklistImportState>{
48

    
49
    private static final long serialVersionUID = 954395388404224712L;
50
    private static Logger logger = LogManager.getLogger();
51

    
52
    private NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
53

    
54
	private DbImportMapping<?, ?> mapping;
55

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

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

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

    
69

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

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

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

    
84
		}
85
		return mapping;
86
	}
87

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

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

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

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

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

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

    
127

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

    
131
		Reference sec = taxon.getSec();
132

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

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

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

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

    
151

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

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

    
163
}
(5-5/7)