4a56682d0ff3ca29cb480e63876f5b96af004724
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / in / BerlinModelAuthorImport.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 package eu.etaxonomy.cdm.io.berlinModel.in;
10
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13 import java.util.Collection;
14 import java.util.HashMap;
15 import java.util.Map;
16
17 import org.apache.commons.lang.StringUtils;
18 import org.apache.log4j.Logger;
19 import org.springframework.stereotype.Component;
20
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;
31
32
33 /**
34 * Supported attributes:
35 * - AuthorId, Abbrev, FirstName, LastName, Dates, AreaOfInterest, NomStandard, createUpdateNotes
36 *
37 * @author a.mueller
38 * @created 20.03.2008
39 * @version 1.0
40 */
41 @Component
42 public class BerlinModelAuthorImport extends BerlinModelImportBase {
43 private static final Logger logger = Logger.getLogger(BerlinModelAuthorImport.class);
44
45 public static final String NAMESPACE = "Author";
46
47 private static int recordsPerLog = 5000;
48 private static final String dbTableName = "Author";
49 private static final String pluralString = "Authors";
50
51 public BerlinModelAuthorImport(){
52 super();
53 }
54
55 /* (non-Javadoc)
56 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
57 */
58 @Override
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();
63 }
64 return result;
65 }
66
67 /* (non-Javadoc)
68 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
69 */
70 @Override
71 protected String getRecordQuery(BerlinModelImportConfigurator config) {
72 String strRecordQuery =
73 " SELECT * " +
74 " FROM " + dbTableName + " " +
75 " WHERE authorId IN ( " + ID_LIST_TOKEN + " )";
76 return strRecordQuery;
77 }
78
79
80 /**
81 * @param partitioner
82 * @throws SQLException
83 */
84 //TODO public ??
85 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {
86 String dbAttrName;
87 String cdmAttrName;
88 Map<Integer, Person> personMap = new HashMap<Integer, Person>();
89
90 boolean success = true;
91 ResultSet rs = partitioner.getResultSet();
92 try{
93 //for each author
94 while (rs.next()){
95
96 // partitioner.doLogPerLoop(recordsPerLog, pluralString);
97
98 //create Agent element
99 int authorId = rs.getInt("AuthorId");
100
101 Person author = Person.NewInstance();
102
103 dbAttrName = "Abbrev";
104 cdmAttrName = "nomenclaturalTitle";
105 success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName);
106
107 dbAttrName = "FirstName";
108 cdmAttrName = "firstname";
109 success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName);
110
111 dbAttrName = "LastName";
112 cdmAttrName = "lastname";
113 success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName);
114
115 String dates = rs.getString("dates");
116 if (dates != null){
117 dates.trim();
118 TimePeriod lifespan = TimePeriod.parseString(dates);
119 author.setLifespan(lifespan);
120 }
121
122 // //AreaOfInterest
123 String areaOfInterest = rs.getString("AreaOfInterest");
124 if (CdmUtils.isNotEmpty(areaOfInterest)){
125 Extension datesExtension = Extension.NewInstance(author, areaOfInterest, ExtensionType.AREA_OF_INTREREST());
126 }
127
128 //nomStandard
129 String nomStandard = rs.getString("NomStandard");
130 if (CdmUtils.isNotEmpty(nomStandard)){
131 Extension nomStandardExtension = Extension.NewInstance(author, nomStandard, ExtensionType.NOMENCLATURAL_STANDARD());
132 }
133 //initials
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);
139 break;
140 }
141 }
142 if (CdmUtils.isNotEmpty(initials)){
143 Extension initialsExtension = Extension.NewInstance(author, initials, ExtensionType.ABBREVIATION());
144 }
145
146 //created, notes
147 doIdCreatedUpdatedNotes(state, author, rs, authorId, NAMESPACE);
148
149 personMap.put(authorId, author);
150
151 } //while rs.hasNext()
152 //logger.info("save " + i + " "+pluralString + " ...");
153 getAgentService().save((Collection)personMap.values());
154
155 }catch(Exception ex){
156 logger.error(ex.getMessage());
157 ex.printStackTrace();
158 success = false;
159 }
160 return success;
161 }
162
163 /* (non-Javadoc)
164 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
165 */
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
169 return result;
170 }
171
172
173 /* (non-Javadoc)
174 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
175 */
176 @Override
177 protected boolean doCheck(BerlinModelImportState state){
178 IOValidator<BerlinModelImportState> validator = new BerlinModelAuthorImportValidator();
179 return validator.validate(state);
180 }
181
182
183 /* (non-Javadoc)
184 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
185 */
186 @Override
187 protected String getTableName() {
188 return dbTableName;
189 }
190
191
192 /* (non-Javadoc)
193 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
194 */
195 @Override
196 public String getPluralString() {
197 return pluralString;
198 }
199
200 /* (non-Javadoc)
201 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
202 */
203 protected boolean isIgnore(BerlinModelImportState state){
204 return ! state.getConfig().isDoAuthors();
205 }
206
207 }