Project

General

Profile

Download (6.04 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
import java.util.UUID;
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.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
    private static final long serialVersionUID = 2155984573495140615L;
43

    
44
    private static final boolean BLANK_TO_NULL = true;
45

    
46
	private static final Logger logger = Logger.getLogger(BerlinModelAuthorImport.class);
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
	        }
67

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

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

    
84
	@Override
85
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state)  {
86
		String dbAttrName;
87
		String cdmAttrName;
88
		Map<Integer, Person> personMap = new HashMap<>();
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, BLANK_TO_NULL);
106

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

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

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

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

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

    
134

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

    
148
                String uuid = null;
149
                if (resultSetHasColumn(rs,"UUID")){
150
                    uuid = rs.getString("UUID");
151
                    if (uuid != null){
152
                        author.setUuid(UUID.fromString(uuid));
153
                    }
154
                }
155

    
156
			    //created, notes
157
				doIdCreatedUpdatedNotes(state, author, rs, authorId, NAMESPACE);
158

    
159
				personMap.put(authorId, author);
160

    
161
			} //while rs.hasNext()
162
			//logger.info("save " + i + " "+pluralString + " ...");
163
			getAgentService().save((Collection)personMap.values());
164

    
165
		}catch(Exception ex){
166
			logger.error(ex.getMessage());
167
			ex.printStackTrace();
168
			success = false;
169
		}
170
		return success;
171
		}
172

    
173
	@Override
174
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state)  {
175
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
176
		// no related objects exist
177
		return result;
178
	}
179

    
180
	@Override
181
	protected boolean doCheck(BerlinModelImportState state){
182
		IOValidator<BerlinModelImportState> validator = new BerlinModelAuthorImportValidator();
183
		return validator.validate(state);
184
	}
185

    
186
	@Override
187
	protected boolean isIgnore(BerlinModelImportState state){
188
		return ! state.getConfig().isDoAuthors();
189
	}
190

    
191
}
(2-2/22)