ref #6241 replaced @created by @since in cdmlib-app
[cdmlib-apps.git] / cdm-pesi / src / main / java / eu / etaxonomy / cdm / io / pesi / erms / ErmsVernacularImport.java
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.HashSet;
16 import java.util.Map;
17 import java.util.Set;
18 import java.util.UUID;
19
20 import org.apache.log4j.Logger;
21 import org.springframework.stereotype.Component;
22
23 import eu.etaxonomy.cdm.io.common.IOValidator;
24 import eu.etaxonomy.cdm.io.common.mapping.DbImportAnnotationMapper;
25 import eu.etaxonomy.cdm.io.common.mapping.DbImportCommonNameCreationMapper;
26 import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
27 import eu.etaxonomy.cdm.io.common.mapping.DbImportObjectMapper;
28 import eu.etaxonomy.cdm.io.common.mapping.DbImportStringMapper;
29 import eu.etaxonomy.cdm.io.common.mapping.UndefinedTransformerMethodException;
30 import eu.etaxonomy.cdm.io.pesi.erms.validation.ErmsVernacularImportValidator;
31 import eu.etaxonomy.cdm.model.common.AnnotationType;
32 import eu.etaxonomy.cdm.model.common.CdmBase;
33 import eu.etaxonomy.cdm.model.common.Language;
34 import eu.etaxonomy.cdm.model.description.CommonTaxonName;
35 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
36
37
38 /**
39 * @author a.mueller
40 * @since 20.02.2010
41 */
42 @Component
43 public class ErmsVernacularImport extends ErmsImportBase<CommonTaxonName> {
44 @SuppressWarnings("unused")
45 private static final Logger logger = Logger.getLogger(ErmsVernacularImport.class);
46
47 private DbImportMapping<ErmsImportState, ErmsImportConfigurator> mapping;
48 private ErmsImportState state; //import instance is never used more than once for Erms ; dirty
49
50
51 private static final String pluralString = "vernaculars";
52 private static final String dbTableName = "vernaculars";
53 private static final Class<?> cdmTargetClass = CommonTaxonName.class;
54
55 public ErmsVernacularImport(){
56 super(pluralString, dbTableName, cdmTargetClass);
57 }
58
59 @Override
60 protected String getRecordQuery(ErmsImportConfigurator config) {
61 String strRecordQuery =
62 " SELECT vernaculars.*, tu.tu_acctaxon, tu.id " +
63 " FROM vernaculars INNER JOIN tu ON vernaculars.tu_id = tu.id " +
64 " WHERE ( vernaculars.id IN (" + ID_LIST_TOKEN + ") )";
65 return strRecordQuery;
66 }
67
68 @Override
69 protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() {
70 if (mapping == null){
71 mapping = new DbImportMapping<ErmsImportState, ErmsImportConfigurator>();
72
73 mapping.addMapper(DbImportCommonNameCreationMapper.NewInstance("id", VERNACULAR_NAMESPACE, "tu_id", ErmsTaxonImport.TAXON_NAMESPACE));
74
75 mapping.addMapper(DbImportObjectMapper.NewInstance("lan_id", "language", LANGUAGE_NAMESPACE));
76 mapping.addMapper(DbImportStringMapper.NewInstance("vername", "name"));
77 mapping.addMapper(DbImportAnnotationMapper.NewInstance("note", AnnotationType.EDITORIAL(), Language.DEFAULT()));
78 }
79 return mapping;
80 }
81
82 @Override
83 protected void doInvoke(ErmsImportState state) {
84 this.state = state;
85 super.doInvoke(state);
86 }
87
88 @Override
89 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, ErmsImportState state) {
90 String nameSpace;
91 Class<?> cdmClass;
92 Set<String> idSet;
93 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
94
95 try{
96 Set<String> taxonIdSet = new HashSet<String>();
97 Set<String> languageIdSet = new HashSet<String>();
98 while (rs.next()){
99 handleForeignKey(rs, taxonIdSet, "tu_id");
100 handleForeignKey(rs, languageIdSet, "lan_id");
101 }
102
103 //taxon map
104 nameSpace = ErmsTaxonImport.TAXON_NAMESPACE;
105 cdmClass = TaxonBase.class;
106 idSet = taxonIdSet;
107 Map<String, TaxonBase<?>> taxonMap = (Map<String, TaxonBase<?>>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
108 result.put(nameSpace, taxonMap);
109
110 //language map
111 nameSpace = LANGUAGE_NAMESPACE;
112 Map<String, Language> languageMap = new HashMap<String, Language>();
113 ErmsTransformer transformer = new ErmsTransformer();
114 for (String lanAbbrev: languageIdSet){
115 Language language = null;
116 try {
117 language = transformer.getLanguageByKey(lanAbbrev);
118 if (language == null || language.equals(Language.UNDETERMINED())){
119 UUID uuidLang = transformer.getLanguageUuid(lanAbbrev);
120 if (uuidLang != null){
121 language = getLanguage(state, uuidLang, lanAbbrev, lanAbbrev, lanAbbrev);
122
123 }
124 if (language == null || language.equals(Language.UNDETERMINED() )){
125 logger.warn("Langauge undefined: " + lanAbbrev);
126 }
127 }
128
129 } catch (IllegalArgumentException e) {
130 e.printStackTrace();
131 } catch (UndefinedTransformerMethodException e) {
132 e.printStackTrace();
133 }
134 languageMap.put(lanAbbrev, language);
135 }
136 result.put(nameSpace, languageMap);
137
138 } catch (SQLException e) {
139 throw new RuntimeException(e);
140 }
141 return result;
142 }
143
144 @Override
145 protected boolean doCheck(ErmsImportState state){
146 IOValidator<ErmsImportState> validator = new ErmsVernacularImportValidator();
147 return validator.validate(state);
148 }
149
150
151 @Override
152 protected boolean isIgnore(ErmsImportState state){
153 return ! state.getConfig().isDoVernaculars();
154 }
155
156 }