ref #1444, ref #7976 better logging for unhandled unacceptReason
[cdmlib-apps.git] / cdm-pesi / src / main / java / eu / etaxonomy / cdm / io / pesi / erms / ErmsNotesImport.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.DbImportFeatureCreationMapper;
25 import eu.etaxonomy.cdm.io.common.mapping.DbImportMapping;
26 import eu.etaxonomy.cdm.io.common.mapping.DbImportMultiLanguageTextMapper;
27 import eu.etaxonomy.cdm.io.common.mapping.DbImportTextDataCreationMapper;
28 import eu.etaxonomy.cdm.io.common.mapping.out.DbLastActionMapper;
29 import eu.etaxonomy.cdm.io.pesi.erms.validation.ErmsNoteImportValidator;
30 import eu.etaxonomy.cdm.model.common.Annotation;
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.common.MarkerType;
35 import eu.etaxonomy.cdm.model.description.TextData;
36 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
37
38 /**
39 * @author a.mueller
40 * @since 20.02.2010
41 */
42 @Component
43 public class ErmsNotesImport extends ErmsImportBase<Annotation> {
44
45 private static final long serialVersionUID = 3597110192009910328L;
46
47 @SuppressWarnings("unused")
48 private static final Logger logger = Logger.getLogger(ErmsNotesImport.class);
49
50 private DbImportMapping<ErmsImportState, ErmsImportConfigurator> mapping;
51
52 private static final String pluralString = "notes";
53 private static final String dbTableName = "notes";
54 private static final Class<?> cdmTargetClass = TextData.class;
55
56 public ErmsNotesImport(){
57 super(pluralString, dbTableName, cdmTargetClass);
58 }
59
60 @Override
61 protected String getRecordQuery(ErmsImportConfigurator config) {
62 String strRecordQuery =
63 " SELECT n.*, " +
64 " s.sessiondate lastActionDate, a.action_name lastAction, s.ExpertName " +
65 " FROM notes n " +
66 " LEFT OUTER JOIN notes_sessions MN ON MN.note_id = n.id " +
67 " LEFT OUTER JOIN [sessions] s ON s.id = MN.session_id " +
68 " LEFT OUTER JOIN actions a ON a.id = MN.action_id " +
69 " WHERE ( n.id IN (" + ID_LIST_TOKEN + ") )" +
70 " ORDER BY n.id, s.sessiondate DESC, a.id DESC ";
71 return strRecordQuery;
72 }
73
74 Integer lastNoteId = null;
75 @Override
76 protected boolean ignoreRecord(ResultSet rs) throws SQLException {
77 Integer id = rs.getInt("id");
78 boolean result = id.equals(lastNoteId);
79 lastNoteId = id;
80 return result;
81 }
82
83 @Override
84 protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() {
85 if (mapping == null){
86 mapping = new DbImportMapping<>();
87 mapping.addMapper(DbImportTextDataCreationMapper.NewInstance("id", NOTES_NAMESPACE, "tu_id", TAXON_NAMESPACE));
88 mapping.addMapper(DbImportFeatureCreationMapper.NewInstance("type", FEATURE_NAMESPACE, "type", "type", "type"));
89 mapping.addMapper(DbImportMultiLanguageTextMapper.NewInstance("note", "lan_id", LANGUAGE_NAMESPACE, "Text", true));
90 Language notesNoteLanguage = null;
91 mapping.addMapper(DbImportAnnotationMapper.NewInstance("note", AnnotationType.EDITORIAL(), notesNoteLanguage));
92 //last action
93 AnnotationType speciesExpertNameAnnType = getAnnotationType(ErmsTransformer.uuidAnnSpeciesExpertName, "species expert name", "species expert name", "species expert name");
94 mapping.addMapper(DbImportAnnotationMapper.NewInstance("ExpertName", speciesExpertNameAnnType)); //according to sql script ExpertName maps to SpeciesExpertName in ERMS
95 AnnotationType lastActionDateType = getAnnotationType(DbLastActionMapper.uuidAnnotationTypeLastActionDate, "Last action date", "Last action date", null);
96 mapping.addMapper(DbImportAnnotationMapper.NewInstance("lastActionDate", lastActionDateType));
97 AnnotationType lastActionType = getAnnotationType(DbLastActionMapper.uuidAnnotationTypeLastAction, "Last action", "Last action", null);
98 MarkerType hasNoLastActionMarkerType = getMarkerType(DbLastActionMapper.uuidMarkerTypeHasNoLastAction, "has no last action", "No last action information available", "no last action");
99 mapping.addMapper(DbImportAnnotationMapper.NewInstance("lastAction", lastActionType, hasNoLastActionMarkerType));
100 }
101 return mapping;
102 }
103
104 @Override
105 public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, ErmsImportState state) {
106
107 String nameSpace;
108 Set<String> idSet;
109 Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>();
110
111 try{
112 Set<String> taxonIdSet = new HashSet<>();
113 Set<String> languageIdSet = new HashSet<>();
114 while (rs.next()){
115 handleForeignKey(rs, taxonIdSet, "tu_id");
116 handleForeignKey(rs, languageIdSet, "lan_id");
117 }
118
119 //taxon map
120 nameSpace = ErmsImportBase.TAXON_NAMESPACE;
121 idSet = taxonIdSet;
122 @SuppressWarnings("rawtypes")
123 Map<String, TaxonBase> taxonMap = getCommonService().getSourcedObjectsByIdInSourceC(TaxonBase.class, idSet, nameSpace);
124 result.put(nameSpace, taxonMap);
125
126 //language map
127 nameSpace = LANGUAGE_NAMESPACE;
128 Map<String, Language> languageMap = new HashMap<>();
129 ErmsTransformer transformer = new ErmsTransformer();
130 for (String lanAbbrev: languageIdSet){
131 Language language = transformer.getLanguageByKey(lanAbbrev);
132 languageMap.put(lanAbbrev, language);
133 }
134 result.put(nameSpace, languageMap);
135
136 } catch (SQLException e) {
137 throw new RuntimeException(e);
138 }
139 return result;
140 }
141
142 @Override
143 protected boolean doCheck(ErmsImportState state){
144 IOValidator<ErmsImportState> validator = new ErmsNoteImportValidator();
145 return validator.validate(state);
146 }
147
148 @Override
149 protected boolean isIgnore(ErmsImportState state){
150 return ! state.getConfig().isDoNotes();
151 }
152 }