View Javadoc

1   // $Id$
2   /**
3   * Copyright (C) 2007 EDIT
4   * European Distributed Institute of Taxonomy 
5   * http://www.e-taxonomy.eu
6   * 
7   * The contents of this file are subject to the Mozilla Public License Version 1.1
8   * See LICENSE.TXT at the top of this package for the full license terms.
9   */
10  
11  package eu.etaxonomy.cdm.io.erms;
12  
13  import java.sql.ResultSet;
14  import java.sql.SQLException;
15  import java.util.HashMap;
16  import java.util.Map;
17  
18  import org.apache.log4j.Logger;
19  import org.springframework.stereotype.Component;
20  
21  import eu.etaxonomy.cdm.io.common.IOValidator;
22  import eu.etaxonomy.cdm.io.common.Source;
23  import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
24  import eu.etaxonomy.cdm.io.erms.validation.ErmsRankImportValidator;
25  import eu.etaxonomy.cdm.model.common.CdmBase;
26  import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
27  import eu.etaxonomy.cdm.model.name.Rank;
28  import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
29  
30  /**
31   * @author a.mueller
32   * @created 01.03.2010
33   * @version 1.0
34   */
35  @Component
36  public class ErmsImportRankMap extends ErmsImportBase<Rank>{
37  	private static final Logger logger = Logger.getLogger(ErmsImportRankMap.class);
38  
39  	private Map<Integer, Map<Integer,Rank>> rankMap;
40  
41  	/**
42  	 * @param pluralString
43  	 * @param dbTableName
44  	 */
45  	public ErmsImportRankMap() {
46  		super(null, null, null);
47  	}
48  
49  	
50  	/* (non-Javadoc)
51  	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#invoke(eu.etaxonomy.cdm.io.common.IoStateBase)
52  	 */
53  	public boolean invoke (ErmsImportState state){
54  		rankMap = new HashMap<Integer, Map<Integer,Rank>>();
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 = Rank.getRankByEnglishName(rankName, nc, false);
69  					if (rank == null){
70  						logger.warn("Rank is null: " + rankName);
71  					}
72  					kingdomMap.put(kingdomId, rank);	
73  				} catch (UnknownCdmTypeException e) {
74  					String errorMessage = "Rank '" + rankName + "' is not well mapped for code " + nc + ", kingdom_id = " + kingdomId + ". Rank is ignored!";
75  					logger.warn(errorMessage);
76  				}
77  			}
78  		} catch (SQLException e) {
79  			logger.error(e.getMessage());
80  			throw new RuntimeException(e);
81  		}
82  		state.setRankMap(rankMap);
83  		return true;
84  	}
85  	
86  	/**
87  	 * Retrieves or creates the kingdom map (mapping kingdom to rank for a defined rank_id) and
88  	 * adds it to the rank map.
89  	 * @param rankMap
90  	 * @param rankId
91  	 * @return
92  	 */
93  	private Map<Integer, Rank> makeKingdomMap(Map<Integer, Map<Integer, Rank>> rankMap, Integer rankId) {
94  		Map<Integer, Rank> result = rankMap.get(rankId);
95  		if (result == null){
96  			result = new HashMap<Integer, Rank>();
97  			rankMap.put(rankId, result);
98  		}
99  		return result;
100 	}
101 
102 
103 	/* (non-Javadoc)
104 	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
105 	 */
106 	@Override
107 	protected boolean doCheck(ErmsImportState state) {
108 		IOValidator rankImport = new ErmsRankImportValidator();
109 		return rankImport.validate(state);
110 	}
111 
112 
113 	/* (non-Javadoc)
114 	 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getRecordQuery(eu.etaxonomy.cdm.io.erms.ErmsImportConfigurator)
115 	 */
116 	@Override
117 	protected String getRecordQuery(ErmsImportConfigurator config) {
118 		// TODO Auto-generated method stub
119 		return null;
120 	}
121 
122 	
123 	/* (non-Javadoc)
124 	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IoStateBase)
125 	 */
126 	@Override
127 	protected boolean isIgnore(ErmsImportState state) {
128 		return false;  //should always be called
129 	}
130 
131 
132 	/* (non-Javadoc)
133 	 * @see eu.etaxonomy.cdm.io.common.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
134 	 */
135 	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
136 		return null;  // not needed
137 	}
138 
139 	/* (non-Javadoc)
140 	 * @see eu.etaxonomy.cdm.io.common.mapping.IMappingImport#createObject(java.sql.ResultSet, eu.etaxonomy.cdm.io.common.ImportStateBase)
141 	 */
142 	public Rank createObject(ResultSet rs, ErmsImportState state)
143 			throws SQLException {
144 		return null;  // not needed
145 	}
146 
147 
148 	/* (non-Javadoc)
149 	 * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getMapping()
150 	 */
151 	@Override
152 	protected DbImportMapping<?, ?> getMapping() {
153 		return null;  //not needed
154 	}
155 	
156 	
157 	
158 }