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.
9 package eu
.etaxonomy
.cdm
.io
.berlinModel
.in
;
11 import java
.sql
.ResultSet
;
12 import java
.util
.HashMap
;
14 import java
.util
.UUID
;
16 import org
.apache
.commons
.lang
.StringUtils
;
17 import org
.apache
.logging
.log4j
.LogManager
;
18 import org
.apache
.logging
.log4j
.Logger
;
19 import org
.springframework
.stereotype
.Component
;
21 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.validation
.BerlinModelAuthorImportValidator
;
22 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
23 import eu
.etaxonomy
.cdm
.io
.common
.ImportHelper
;
24 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
25 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
26 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
27 import eu
.etaxonomy
.cdm
.model
.common
.Extension
;
28 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
29 import eu
.etaxonomy
.cdm
.model
.common
.TimePeriod
;
30 import eu
.etaxonomy
.cdm
.strategy
.parser
.TimePeriodParser
;
34 * Supported attributes:
35 * - AuthorId, Abbrev, FirstName, LastName, Dates, AreaOfInterest, NomStandard, createUpdateNotes
41 public class BerlinModelAuthorImport
extends BerlinModelImportBase
{
43 private static final long serialVersionUID
= 2155984573495140615L;
44 private static final Logger logger
= LogManager
.getLogger();
46 private static final boolean BLANK_TO_NULL
= true;
48 public static final String NAMESPACE
= "Author";
50 // private static int recordsPerLog = 5000;
51 private static final String dbTableName
= "Author";
52 private static final String pluralString
= "Authors";
54 public BerlinModelAuthorImport(){
55 super(dbTableName
, pluralString
);
59 protected String
getIdQuery(BerlinModelImportState state
) {
60 if (state
.getConfig().isEuroMed() && state
.getConfig().getAuthorFilter() != null ){
61 //for performance reasons we do not use a subquery
62 return " SELECT authorId "
63 + " FROM v_cdm_exp_authorsAll "
64 + " ORDER BY authorId "
66 }else if ("v_cdmExport_authors".equals(state
.getConfig().getAuthorFilter())) {
68 return " SELECT authorId "
69 + " FROM v_cdmExport_authors "
70 + " ORDER BY authorId "
74 String result
= " SELECT authorId FROM " + getTableName();
75 if (StringUtils
.isNotBlank(state
.getConfig().getAuthorFilter())){
76 result
+= " WHERE " + state
.getConfig().getAuthorFilter();
82 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
83 String strRecordQuery
=
85 " FROM " + dbTableName
+ " " +
86 " WHERE authorId IN ( " + ID_LIST_TOKEN
+ " )";
87 return strRecordQuery
;
91 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState state
) {
94 Map
<Integer
, Person
> personMap
= new HashMap
<>();
96 boolean success
= true;
97 ResultSet rs
= partitioner
.getResultSet();
102 // partitioner.doLogPerLoop(recordsPerLog, pluralString);
104 //create Agent element
105 int authorId
= rs
.getInt("AuthorId");
107 Person author
= Person
.NewInstance();
109 dbAttrName
= "Abbrev";
110 cdmAttrName
= "nomenclaturalTitle";
111 success
&= ImportHelper
.addStringValue(rs
, author
, dbAttrName
, cdmAttrName
, BLANK_TO_NULL
);
112 //not yet supported by model
113 success
&= ImportHelper
.addStringValue(rs
, author
, dbAttrName
, "originalNomenclaturalTitle", BLANK_TO_NULL
);
115 dbAttrName
= "FirstName";
116 cdmAttrName
= "givenName";
117 success
&= ImportHelper
.addStringValue(rs
, author
, dbAttrName
, cdmAttrName
, BLANK_TO_NULL
);
119 dbAttrName
= "LastName";
120 cdmAttrName
= "familyName";
121 success
&= ImportHelper
.addStringValue(rs
, author
, dbAttrName
, cdmAttrName
, BLANK_TO_NULL
);
123 String dates
= rs
.getString("dates");
126 TimePeriod lifespan
= TimePeriodParser
.parseString(dates
);
127 author
.setLifespan(lifespan
);
131 String areaOfInterest
= rs
.getString("AreaOfInterest");
132 if (isNotBlank(areaOfInterest
)){
133 Extension
.NewInstance(author
, areaOfInterest
, ExtensionType
.AREA_OF_INTREREST());
137 String nomStandard
= rs
.getString("NomStandard");
138 if (isNotBlank(nomStandard
)){
139 Extension
.NewInstance(author
, nomStandard
, ExtensionType
.NOMENCLATURAL_STANDARD());
144 String initials
= null;
145 for (int j
= 1; j
<= rs
.getMetaData().getColumnCount(); j
++){
146 String label
= rs
.getMetaData().getColumnLabel(j
);
147 if (label
.equalsIgnoreCase("Initials") || label
.equalsIgnoreCase("Kürzel")){
148 initials
= rs
.getString(j
);
152 if (isNotBlank(initials
)){
153 author
.setInitials(initials
);
157 if (resultSetHasColumn(rs
,"UUID")){
158 uuid
= rs
.getString("UUID");
160 author
.setUuid(UUID
.fromString(uuid
));
165 doIdCreatedUpdatedNotes(state
, author
, rs
, authorId
, NAMESPACE
);
167 personMap
.put(authorId
, author
);
169 } //while rs.hasNext()
170 //logger.info("save " + i + " "+pluralString + " ...");
171 getAgentService().save(personMap
.values());
173 }catch(Exception ex
){
174 logger
.error(ex
.getMessage());
175 ex
.printStackTrace();
182 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
, BerlinModelImportState state
) {
183 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<>();
184 // no related objects exist
189 protected boolean doCheck(BerlinModelImportState state
){
190 IOValidator
<BerlinModelImportState
> validator
= new BerlinModelAuthorImportValidator();
191 return validator
.validate(state
);
195 protected boolean isIgnore(BerlinModelImportState state
){
196 return ! state
.getConfig().isDoAuthors();