Project

General

Profile

Download (5.77 KB) Statistics
| Branch: | Revision:
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.Collection;
13
import java.util.HashMap;
14
import java.util.Map;
15

    
16
import org.apache.commons.lang.StringUtils;
17
import org.apache.log4j.Logger;
18
import org.springframework.stereotype.Component;
19

    
20
import eu.etaxonomy.cdm.io.berlinModel.in.validation.BerlinModelAuthorImportValidator;
21
import eu.etaxonomy.cdm.io.common.IOValidator;
22
import eu.etaxonomy.cdm.io.common.ImportHelper;
23
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
24
import eu.etaxonomy.cdm.model.agent.Person;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.model.common.Extension;
27
import eu.etaxonomy.cdm.model.common.ExtensionType;
28
import eu.etaxonomy.cdm.model.common.TimePeriod;
29
import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
30

    
31

    
32
/**
33
 * Supported attributes:
34
 * - AuthorId, Abbrev, FirstName, LastName, Dates, AreaOfInterest, NomStandard, createUpdateNotes
35
 *
36
 * @author a.mueller
37
 * @since 20.03.2008
38
 */
39
@Component
40
public class BerlinModelAuthorImport extends BerlinModelImportBase {
41
    private static final long serialVersionUID = 2155984573495140615L;
42

    
43
    private static final boolean BLANK_TO_NULL = true;
44

    
45
	private static final Logger logger = Logger.getLogger(BerlinModelAuthorImport.class);
46

    
47
	public static final String NAMESPACE = "Author";
48

    
49
//	private static int recordsPerLog = 5000;
50
	private static final String dbTableName = "Author";
51
	private static final String pluralString = "Authors";
52

    
53
	public BerlinModelAuthorImport(){
54
		super(dbTableName, pluralString);
55
	}
56

    
57
	@Override
58
	protected String getIdQuery(BerlinModelImportState state) {
59
	      if (state.getConfig().isEuroMed() && state.getConfig().getAuthorFilter() != null ){
60
	          //for performance reasons we do not use a subquery
61
	          return " SELECT authorId "
62
	                 + " FROM v_cdm_exp_authorsAll "
63
	                 + " ORDER BY authorId "
64
	                 ;
65
	        }
66

    
67
	    String result = " SELECT authorId FROM " + getTableName();
68
		if (StringUtils.isNotBlank(state.getConfig().getAuthorFilter())){
69
			result += " WHERE " +  state.getConfig().getAuthorFilter();
70
		}
71
		return result;
72
	}
73

    
74
	@Override
75
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
76
		String strRecordQuery =
77
			" SELECT * " +
78
            " FROM " + dbTableName + " " +
79
            " WHERE authorId IN ( " + ID_LIST_TOKEN + " )";
80
		return strRecordQuery;
81
	}
82

    
83
	@Override
84
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state)  {
85
		String dbAttrName;
86
		String cdmAttrName;
87
		Map<Integer, Person> personMap = new HashMap<>();
88

    
89
		boolean success = true;
90
		ResultSet rs = partitioner.getResultSet();
91
		try{
92
			//for each author
93
			while (rs.next()){
94

    
95
			//	partitioner.doLogPerLoop(recordsPerLog, pluralString);
96

    
97
					//create Agent element
98
					int authorId = rs.getInt("AuthorId");
99

    
100
					Person author = Person.NewInstance();
101

    
102
					dbAttrName = "Abbrev";
103
					cdmAttrName = "nomenclaturalTitle";
104
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
105

    
106
					dbAttrName = "FirstName";
107
					cdmAttrName = "givenName";
108
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
109

    
110
					dbAttrName = "LastName";
111
					cdmAttrName = "familyName";
112
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
113

    
114
					String dates = rs.getString("dates");
115
					if (dates != null){
116
						dates.trim();
117
						TimePeriod lifespan = TimePeriodParser.parseString(dates);
118
						author.setLifespan(lifespan);
119
					}
120

    
121
//				    //AreaOfInterest
122
					String areaOfInterest = rs.getString("AreaOfInterest");
123
					if (isNotBlank(areaOfInterest)){
124
						Extension.NewInstance(author, areaOfInterest, ExtensionType.AREA_OF_INTREREST());
125
					}
126

    
127
					//nomStandard
128
					String nomStandard = rs.getString("NomStandard");
129
					if (isNotBlank(nomStandard)){
130
						Extension.NewInstance(author, nomStandard, ExtensionType.NOMENCLATURAL_STANDARD());
131
					}
132

    
133

    
134
					//initials
135
					String initials = null;
136
					for (int j = 1; j <= rs.getMetaData().getColumnCount(); j++){
137
						String label = rs.getMetaData().getColumnLabel(j);
138
						if (label.equalsIgnoreCase("Initials") || label.equalsIgnoreCase("Kürzel")){
139
							initials = rs.getString(j);
140
							break;
141
						}
142
					}
143
					if (isNotBlank(initials)){
144
						author.setInitials(initials);
145
					}
146

    
147
					//created, notes
148
				doIdCreatedUpdatedNotes(state, author, rs, authorId, NAMESPACE);
149

    
150
				personMap.put(authorId, author);
151

    
152
			} //while rs.hasNext()
153
			//logger.info("save " + i + " "+pluralString + " ...");
154
			getAgentService().save((Collection)personMap.values());
155

    
156
		}catch(Exception ex){
157
			logger.error(ex.getMessage());
158
			ex.printStackTrace();
159
			success = false;
160
		}
161
		return success;
162
		}
163

    
164
	@Override
165
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state)  {
166
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
167
		// no related objects exist
168
		return result;
169
	}
170

    
171
	@Override
172
	protected boolean doCheck(BerlinModelImportState state){
173
		IOValidator<BerlinModelImportState> validator = new BerlinModelAuthorImportValidator();
174
		return validator.validate(state);
175
	}
176

    
177
	@Override
178
	protected boolean isIgnore(BerlinModelImportState state){
179
		return ! state.getConfig().isDoAuthors();
180
	}
181

    
182
}
(2-2/22)