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