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