Project

General

Profile

Download (4.15 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.erms;
11

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

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

    
20
import eu.etaxonomy.cdm.io.common.IOValidator;
21
import eu.etaxonomy.cdm.io.common.Source;
22
import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
23
import eu.etaxonomy.cdm.io.pesi.erms.validation.ErmsRankImportValidator;
24
import eu.etaxonomy.cdm.model.common.CdmBase;
25
import eu.etaxonomy.cdm.model.common.OrderedTermVocabulary;
26
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
27
import eu.etaxonomy.cdm.model.name.Rank;
28
import eu.etaxonomy.cdm.model.name.RankClass;
29
import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
30

    
31
/**
32
 * @author a.mueller
33
 * @since 01.03.2010
34
 */
35
@Component
36
public class ErmsImportRankMap extends ErmsImportBase<Rank>{
37

    
38
    private static final long serialVersionUID = -3956071827341860580L;
39
    private static final Logger logger = Logger.getLogger(ErmsImportRankMap.class);
40

    
41
	private Map<Integer, Map<Integer,Rank>> rankMap;
42

    
43
	/**
44
	 * @param pluralString
45
	 * @param dbTableName
46
	 */
47
	public ErmsImportRankMap() {
48
		super(null, null, null);
49
	}
50

    
51

    
52
	@Override
53
	public void invoke (ErmsImportState state){
54
		rankMap = new HashMap<>();
55
		Source source = state.getConfig().getSource() ;
56
		String strSQL = " SELECT * FROM ranks ";
57
		ResultSet rs = source.getResultSet(strSQL);
58
		try {
59
			while (rs.next()){
60
				Integer kingdomId = rs.getInt("kingdom_id");
61
				Integer rankId = rs.getInt("rank_id");
62
				String rankName = rs.getString("rank_name");
63
				NomenclaturalCode nc = ErmsTransformer.kingdomId2NomCode(kingdomId);
64

    
65
				Map<Integer, Rank> kingdomMap = makeKingdomMap(rankMap, rankId);
66
				try {
67
					rankName = rankName.replace("Forma", "Form").replace("Subforma", "Subform");
68
					Rank rank;
69
					if (nc == null && kingdomId == 1){
70
						rank = getRank(state, ErmsTransformer.uuidRankSuperdomain, "Superdomain", "Superdomain", "Superdomain", CdmBase.deproxy(Rank.GENUS().getVocabulary(), OrderedTermVocabulary.class), Rank.DOMAIN(), RankClass.Suprageneric);
71
					}else{
72
						rank = Rank.getRankByEnglishName(rankName, nc, false);
73
					}
74
					if (rank == null){
75
						logger.warn("Rank is null: " + rankName);
76
					}
77
					kingdomMap.put(kingdomId, rank);
78
				} catch (UnknownCdmTypeException e) {
79
					String errorMessage = "Rank '" + rankName + "' is not well mapped for code " + nc + ", kingdom_id = " + kingdomId + ". Rank is ignored!";
80
					logger.warn(errorMessage);
81
				}
82
			}
83
		} catch (SQLException e) {
84
			logger.error(e.getMessage());
85
			throw new RuntimeException(e);
86
		}
87
		state.setRankMap(rankMap);
88
		return ; //state.getResult();
89
	}
90

    
91
	/**
92
	 * Retrieves or creates the kingdom map (mapping kingdom to rank for a defined rank_id) and
93
	 * adds it to the rank map.
94
	 * @param rankMap
95
	 * @param rankId
96
	 * @return
97
	 */
98
	private Map<Integer, Rank> makeKingdomMap(Map<Integer, Map<Integer, Rank>> rankMap, Integer rankId) {
99
		Map<Integer, Rank> result = rankMap.get(rankId);
100
		if (result == null){
101
			result = new HashMap<>();
102
			rankMap.put(rankId, result);
103
		}
104
		return result;
105
	}
106

    
107
	@Override
108
	protected String getRecordQuery(ErmsImportConfigurator config) {
109
		return null;   // not needed
110
	}
111

    
112
	@Override
113
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, ErmsImportState state) {
114
		return null;  // not needed
115
	}
116

    
117
	@Override
118
	protected DbImportMapping<?, ?> getMapping() {
119
		return null;  //not needed
120
	}
121

    
122
    @Override
123
    protected boolean doCheck(ErmsImportState state) {
124
        IOValidator<ErmsImportState> rankImport = new ErmsRankImportValidator();
125
        return rankImport.validate(state);
126
    }
127

    
128
    @Override
129
    protected boolean isIgnore(ErmsImportState state) {
130
        return false;  //should always be called
131
    }
132
}
(6-6/17)