ref #2934 some adaptations for "Moose" import in app-import
[cdmlib-apps.git] / app-import / 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.util.HashMap;
13 import java.util.Map;
14 import java.util.UUID;
15
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;
20
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;
31
32
33 /**
34 * Supported attributes:
35 * - AuthorId, Abbrev, FirstName, LastName, Dates, AreaOfInterest, NomStandard, createUpdateNotes
36 *
37 * @author a.mueller
38 * @since 20.03.2008
39 */
40 @Component
41 public class BerlinModelAuthorImport extends BerlinModelImportBase {
42
43 private static final long serialVersionUID = 2155984573495140615L;
44 private static final Logger logger = LogManager.getLogger();
45
46 private static final boolean BLANK_TO_NULL = true;
47
48 public static final String NAMESPACE = "Author";
49
50 // private static int recordsPerLog = 5000;
51 private static final String dbTableName = "Author";
52 private static final String pluralString = "Authors";
53
54 public BerlinModelAuthorImport(){
55 super(dbTableName, pluralString);
56 }
57
58 @Override
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 "
65 ;
66 }else if ("v_cdmExport_authors".equals(state.getConfig().getAuthorFilter())) {
67 //Moose
68 return " SELECT authorId "
69 + " FROM v_cdmExport_authors "
70 + " ORDER BY authorId "
71 ;
72 }
73
74 String result = " SELECT authorId FROM " + getTableName();
75 if (StringUtils.isNotBlank(state.getConfig().getAuthorFilter())){
76 result += " WHERE " + state.getConfig().getAuthorFilter();
77 }
78 return result;
79 }
80
81 @Override
82 protected String getRecordQuery(BerlinModelImportConfigurator config) {
83 String strRecordQuery =
84 " SELECT * " +
85 " FROM " + dbTableName + " " +
86 " WHERE authorId IN ( " + ID_LIST_TOKEN + " )";
87 return strRecordQuery;
88 }
89
90 @Override
91 public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {
92 String dbAttrName;
93 String cdmAttrName;
94 Map<Integer, Person> personMap = new HashMap<>();
95
96 boolean success = true;
97 ResultSet rs = partitioner.getResultSet();
98 try{
99 //for each author
100 while (rs.next()){
101
102 // partitioner.doLogPerLoop(recordsPerLog, pluralString);
103
104 //create Agent element
105 int authorId = rs.getInt("AuthorId");
106
107 Person author = Person.NewInstance();
108
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);
114
115 dbAttrName = "FirstName";
116 cdmAttrName = "givenName";
117 success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
118
119 dbAttrName = "LastName";
120 cdmAttrName = "familyName";
121 success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
122
123 String dates = rs.getString("dates");
124 if (dates != null){
125 dates.trim();
126 TimePeriod lifespan = TimePeriodParser.parseString(dates);
127 author.setLifespan(lifespan);
128 }
129
130 //AreaOfInterest
131 String areaOfInterest = rs.getString("AreaOfInterest");
132 if (isNotBlank(areaOfInterest)){
133 Extension.NewInstance(author, areaOfInterest, ExtensionType.AREA_OF_INTREREST());
134 }
135
136 //nomStandard
137 String nomStandard = rs.getString("NomStandard");
138 if (isNotBlank(nomStandard)){
139 Extension.NewInstance(author, nomStandard, ExtensionType.NOMENCLATURAL_STANDARD());
140 }
141
142
143 //initials
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);
149 break;
150 }
151 }
152 if (isNotBlank(initials)){
153 author.setInitials(initials);
154 }
155
156 String uuid = null;
157 if (resultSetHasColumn(rs,"UUID")){
158 uuid = rs.getString("UUID");
159 if (uuid != null){
160 author.setUuid(UUID.fromString(uuid));
161 }
162 }
163
164 //created, notes
165 doIdCreatedUpdatedNotes(state, author, rs, authorId, NAMESPACE);
166
167 personMap.put(authorId, author);
168
169 } //while rs.hasNext()
170 //logger.info("save " + i + " "+pluralString + " ...");
171 getAgentService().save(personMap.values());
172
173 }catch(Exception ex){
174 logger.error(ex.getMessage());
175 ex.printStackTrace();
176 success = false;
177 }
178 return success;
179 }
180
181 @Override
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
185 return result;
186 }
187
188 @Override
189 protected boolean doCheck(BerlinModelImportState state){
190 IOValidator<BerlinModelImportState> validator = new BerlinModelAuthorImportValidator();
191 return validator.validate(state);
192 }
193
194 @Override
195 protected boolean isIgnore(BerlinModelImportState state){
196 return ! state.getConfig().isDoAuthors();
197 }
198
199 }