2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.cdm
.io
.pesi
.erms
;
12 import java
.sql
.ResultSet
;
13 import java
.sql
.SQLException
;
14 import java
.util
.HashMap
;
15 import java
.util
.HashSet
;
19 import org
.apache
.log4j
.Logger
;
20 import org
.springframework
.stereotype
.Component
;
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
;
43 public class ErmsNotesImport
extends ErmsImportBase
<Annotation
> {
45 private static final long serialVersionUID
= 3597110192009910328L;
47 @SuppressWarnings("unused")
48 private static final Logger logger
= Logger
.getLogger(ErmsNotesImport
.class);
50 private DbImportMapping
<ErmsImportState
, ErmsImportConfigurator
> mapping
;
52 private static final String pluralString
= "notes";
53 private static final String dbTableName
= "notes";
54 private static final Class
<?
> cdmTargetClass
= TextData
.class;
56 public ErmsNotesImport(){
57 super(pluralString
, dbTableName
, cdmTargetClass
);
61 protected String
getRecordQuery(ErmsImportConfigurator config
) {
62 String strRecordQuery
=
64 " s.sessiondate lastActionDate, a.action_name lastAction, s.ExpertName " +
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
;
74 Integer lastNoteId
= null;
76 protected boolean ignoreRecord(ResultSet rs
) throws SQLException
{
77 Integer id
= rs
.getInt("id");
78 boolean result
= id
.equals(lastNoteId
);
84 protected DbImportMapping
<ErmsImportState
, ErmsImportConfigurator
> getMapping() {
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
));
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
));
105 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
, ErmsImportState state
) {
109 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<>();
112 Set
<String
> taxonIdSet
= new HashSet
<>();
113 Set
<String
> languageIdSet
= new HashSet
<>();
115 handleForeignKey(rs
, taxonIdSet
, "tu_id");
116 handleForeignKey(rs
, languageIdSet
, "lan_id");
120 nameSpace
= ErmsImportBase
.TAXON_NAMESPACE
;
122 @SuppressWarnings("rawtypes")
123 Map
<String
, TaxonBase
> taxonMap
= getCommonService().getSourcedObjectsByIdInSourceC(TaxonBase
.class, idSet
, nameSpace
);
124 result
.put(nameSpace
, taxonMap
);
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
);
134 result
.put(nameSpace
, languageMap
);
136 } catch (SQLException e
) {
137 throw new RuntimeException(e
);
143 protected boolean doCheck(ErmsImportState state
){
144 IOValidator
<ErmsImportState
> validator
= new ErmsNoteImportValidator();
145 return validator
.validate(state
);
149 protected boolean isIgnore(ErmsImportState state
){
150 return ! state
.getConfig().isDoNotes();