Project

General

Profile

Download (5.66 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.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
import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;
32

    
33

    
34
/**
35
 * Supported attributes:
36
 * - AuthorId, Abbrev, FirstName, LastName, Dates, AreaOfInterest, NomStandard, createUpdateNotes
37
 * 
38
 * @author a.mueller
39
 * @since 20.03.2008
40
 * @version 1.0
41
 */
42
@Component
43
public class BerlinModelAuthorImport extends BerlinModelImportBase {
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
		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
	@Override
68
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
69
		String strRecordQuery = 
70
			" SELECT * " +
71
            " FROM " + dbTableName + " " + 
72
            " WHERE authorId IN ( " + ID_LIST_TOKEN + " )";
73
		return strRecordQuery;
74
	}
75

    
76
	@Override
77
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state)  {
78
		String dbAttrName;
79
		String cdmAttrName;
80
		Map<Integer, Person> personMap = new HashMap<Integer, Person>();
81
		
82
		boolean success = true;
83
		ResultSet rs = partitioner.getResultSet();
84
		try{
85
			//for each author
86
			while (rs.next()){
87
					
88
			//	partitioner.doLogPerLoop(recordsPerLog, pluralString);
89
				
90
					//create Agent element
91
					int authorId = rs.getInt("AuthorId");
92
					
93
					Person author = Person.NewInstance();
94
					
95
					dbAttrName = "Abbrev";
96
					cdmAttrName = "nomenclaturalTitle";
97
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
98

    
99
					dbAttrName = "FirstName";
100
					cdmAttrName = "firstname";
101
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
102
					
103
					dbAttrName = "LastName";
104
					cdmAttrName = "lastname";
105
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
106
					
107
					String dates = rs.getString("dates");
108
					if (dates != null){
109
						dates.trim();
110
						TimePeriod lifespan = TimePeriodParser.parseString(dates);
111
						author.setLifespan(lifespan);
112
					}
113
					
114
//				    //AreaOfInterest
115
					String areaOfInterest = rs.getString("AreaOfInterest");
116
					if (StringUtils.isNotBlank(areaOfInterest)){
117
						Extension.NewInstance(author, areaOfInterest, ExtensionType.AREA_OF_INTREREST());
118
					}
119

    
120
					//nomStandard
121
					String nomStandard = rs.getString("NomStandard");
122
					if (StringUtils.isNotBlank(nomStandard)){
123
						Extension.NewInstance(author, nomStandard, ExtensionType.NOMENCLATURAL_STANDARD());
124
					}
125
					
126
					
127
					//initials
128
					String initials = null;
129
					for (int j = 1; j <= rs.getMetaData().getColumnCount(); j++){
130
						String label = rs.getMetaData().getColumnLabel(j);
131
						if (label.equalsIgnoreCase("Initials") || label.equalsIgnoreCase("Kürzel")){
132
							initials = rs.getString(j);
133
							break;
134
						}
135
					}
136
					if (StringUtils.isNotBlank(initials)){
137
						Extension initialsExtension = Extension.NewInstance(author, initials, ExtensionType.ABBREVIATION());
138
					}
139

    
140
					//created, notes
141
				doIdCreatedUpdatedNotes(state, author, rs, authorId, NAMESPACE);
142

    
143
				personMap.put(authorId, author);
144
	
145
			} //while rs.hasNext()
146
			//logger.info("save " + i + " "+pluralString + " ...");
147
			getAgentService().save((Collection)personMap.values());
148
			
149
				}catch(Exception ex){
150
					logger.error(ex.getMessage());
151
					ex.printStackTrace();
152
					success = false;
153
				}
154
		return success;
155
		}
156

    
157
	@Override
158
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state)  {
159
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
160
		// no related objects exist
161
		return result;
162
	}
163
			
164
	@Override
165
	protected boolean doCheck(BerlinModelImportState state){
166
		IOValidator<BerlinModelImportState> validator = new BerlinModelAuthorImportValidator();
167
		return validator.validate(state);
168
	}
169
	
170
	@Override
171
	protected boolean isIgnore(BerlinModelImportState state){
172
		return ! state.getConfig().isDoAuthors();
173
	}
174

    
175
}
(1-1/21)