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
.sql
.SQLException
;
13 import java
.util
.Collection
;
14 import java
.util
.HashMap
;
17 import org
.apache
.commons
.lang
.StringUtils
;
18 import org
.apache
.log4j
.Logger
;
19 import org
.springframework
.stereotype
.Component
;
21 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
22 import eu
.etaxonomy
.cdm
.io
.berlinModel
.in
.validation
.BerlinModelAuthorImportValidator
;
23 import eu
.etaxonomy
.cdm
.io
.common
.IOValidator
;
24 import eu
.etaxonomy
.cdm
.io
.common
.ImportHelper
;
25 import eu
.etaxonomy
.cdm
.io
.common
.ResultSetPartitioner
;
26 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
27 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
28 import eu
.etaxonomy
.cdm
.model
.common
.Extension
;
29 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
30 import eu
.etaxonomy
.cdm
.model
.common
.TimePeriod
;
34 * Supported attributes:
35 * - AuthorId, Abbrev, FirstName, LastName, Dates, AreaOfInterest, NomStandard, createUpdateNotes
42 public class BerlinModelAuthorImport
extends BerlinModelImportBase
{
43 private static final Logger logger
= Logger
.getLogger(BerlinModelAuthorImport
.class);
45 public static final String NAMESPACE
= "Author";
47 private static int recordsPerLog
= 5000;
48 private static final String dbTableName
= "Author";
49 private static final String pluralString
= "Authors";
51 public BerlinModelAuthorImport(){
56 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
59 protected String
getIdQuery(BerlinModelImportState state
) {
60 String result
= " SELECT authorId FROM " + getTableName();
61 if (StringUtils
.isNotBlank(state
.getConfig().getAuthorFilter())){
62 result
+= " WHERE " + state
.getConfig().getAuthorFilter();
68 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
71 protected String
getRecordQuery(BerlinModelImportConfigurator config
) {
72 String strRecordQuery
=
74 " FROM " + dbTableName
+ " " +
75 " WHERE authorId IN ( " + ID_LIST_TOKEN
+ " )";
76 return strRecordQuery
;
82 * @throws SQLException
85 public boolean doPartition(ResultSetPartitioner partitioner
, BerlinModelImportState state
) {
88 Map
<Integer
, Person
> personMap
= new HashMap
<Integer
, Person
>();
90 boolean success
= true;
91 ResultSet rs
= partitioner
.getResultSet();
96 // partitioner.doLogPerLoop(recordsPerLog, pluralString);
98 //create Agent element
99 int authorId
= rs
.getInt("AuthorId");
101 Person author
= Person
.NewInstance();
103 dbAttrName
= "Abbrev";
104 cdmAttrName
= "nomenclaturalTitle";
105 success
&= ImportHelper
.addStringValue(rs
, author
, dbAttrName
, cdmAttrName
);
107 dbAttrName
= "FirstName";
108 cdmAttrName
= "firstname";
109 success
&= ImportHelper
.addStringValue(rs
, author
, dbAttrName
, cdmAttrName
);
111 dbAttrName
= "LastName";
112 cdmAttrName
= "lastname";
113 success
&= ImportHelper
.addStringValue(rs
, author
, dbAttrName
, cdmAttrName
);
115 String dates
= rs
.getString("dates");
118 TimePeriod lifespan
= TimePeriod
.parseString(dates
);
119 author
.setLifespan(lifespan
);
123 String areaOfInterest
= rs
.getString("AreaOfInterest");
124 if (CdmUtils
.isNotEmpty(areaOfInterest
)){
125 Extension datesExtension
= Extension
.NewInstance(author
, areaOfInterest
, ExtensionType
.AREA_OF_INTREREST());
129 String nomStandard
= rs
.getString("NomStandard");
130 if (CdmUtils
.isNotEmpty(nomStandard
)){
131 Extension nomStandardExtension
= Extension
.NewInstance(author
, nomStandard
, ExtensionType
.NOMENCLATURAL_STANDARD());
134 String initials
= null;
135 for (int j
= 1; j
<= rs
.getMetaData().getColumnCount(); j
++){
136 String label
= rs
.getMetaData().getColumnLabel(j
);
137 if (label
.equalsIgnoreCase("Initials") || label
.equalsIgnoreCase("Kürzel")){
138 initials
= rs
.getString(j
);
142 if (CdmUtils
.isNotEmpty(initials
)){
143 Extension initialsExtension
= Extension
.NewInstance(author
, initials
, ExtensionType
.ABBREVIATION());
147 doIdCreatedUpdatedNotes(state
, author
, rs
, authorId
, NAMESPACE
);
149 personMap
.put(authorId
, author
);
151 } //while rs.hasNext()
152 //logger.info("save " + i + " "+pluralString + " ...");
153 getAgentService().save((Collection
)personMap
.values());
155 }catch(Exception ex
){
156 logger
.error(ex
.getMessage());
157 ex
.printStackTrace();
164 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
166 public Map
<Object
, Map
<String
, ?
extends CdmBase
>> getRelatedObjectsForPartition(ResultSet rs
) {
167 Map
<Object
, Map
<String
, ?
extends CdmBase
>> result
= new HashMap
<Object
, Map
<String
, ?
extends CdmBase
>>();
168 // no related objects exist
174 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
177 protected boolean doCheck(BerlinModelImportState state
){
178 IOValidator
<BerlinModelImportState
> validator
= new BerlinModelAuthorImportValidator();
179 return validator
.validate(state
);
184 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
187 protected String
getTableName() {
193 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
196 public String
getPluralString() {
201 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
203 protected boolean isIgnore(BerlinModelImportState state
){
204 return ! state
.getConfig().isDoAuthors();