Project

General

Profile

Download (6.28 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
 * @created 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
	/* (non-Javadoc)
59
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
60
	 */
61
	@Override
62
	protected String getIdQuery(BerlinModelImportState state) {
63
		String result = " SELECT authorId FROM " + getTableName();
64
		if (StringUtils.isNotBlank(state.getConfig().getAuthorFilter())){
65
			result += " WHERE " +  state.getConfig().getAuthorFilter(); 
66
		} 
67
		return result;
68
	}
69

    
70
	/* (non-Javadoc)
71
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
72
	 */
73
	@Override
74
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
75
		String strRecordQuery = 
76
			" SELECT * " +
77
            " FROM " + dbTableName + " " + 
78
            " WHERE authorId IN ( " + ID_LIST_TOKEN + " )";
79
		return strRecordQuery;
80
	}
81

    
82

    
83
	/**
84
	 * @param partitioner
85
	 * @throws SQLException 
86
	 */
87
	//TODO public ??
88
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state)  {
89
		String dbAttrName;
90
		String cdmAttrName;
91
		Map<Integer, Person> personMap = new HashMap<Integer, Person>();
92
		
93
		boolean success = true;
94
		ResultSet rs = partitioner.getResultSet();
95
		try{
96
			//for each author
97
			while (rs.next()){
98
					
99
			//	partitioner.doLogPerLoop(recordsPerLog, pluralString);
100
				
101
					//create Agent element
102
					int authorId = rs.getInt("AuthorId");
103
					
104
					Person author = Person.NewInstance();
105
					
106
					dbAttrName = "Abbrev";
107
					cdmAttrName = "nomenclaturalTitle";
108
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
109

    
110
					dbAttrName = "FirstName";
111
					cdmAttrName = "firstname";
112
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
113
					
114
					dbAttrName = "LastName";
115
					cdmAttrName = "lastname";
116
					success &= ImportHelper.addStringValue(rs, author, dbAttrName, cdmAttrName, BLANK_TO_NULL);
117
					
118
					String dates = rs.getString("dates");
119
					if (dates != null){
120
						dates.trim();
121
						TimePeriod lifespan = TimePeriodParser.parseString(dates);
122
						author.setLifespan(lifespan);
123
					}
124
					
125
//				//AreaOfInterest
126
					String areaOfInterest = rs.getString("AreaOfInterest");
127
					if (CdmUtils.isNotEmpty(areaOfInterest)){
128
						Extension datesExtension = Extension.NewInstance(author, areaOfInterest, ExtensionType.AREA_OF_INTREREST());
129
					}
130

    
131
					//nomStandard
132
					String nomStandard = rs.getString("NomStandard");
133
					if (CdmUtils.isNotEmpty(nomStandard)){
134
						Extension nomStandardExtension = Extension.NewInstance(author, nomStandard, ExtensionType.NOMENCLATURAL_STANDARD());
135
					}
136
					//initials
137
					String initials = null;
138
					for (int j = 1; j <= rs.getMetaData().getColumnCount(); j++){
139
						String label = rs.getMetaData().getColumnLabel(j);
140
						if (label.equalsIgnoreCase("Initials") || label.equalsIgnoreCase("Kürzel")){
141
							initials = rs.getString(j);
142
							break;
143
						}
144
					}
145
					if (StringUtils.isNotBlank(initials)){
146
						Extension initialsExtension = Extension.NewInstance(author, initials, ExtensionType.ABBREVIATION());
147
					}
148

    
149
					//created, notes
150
				doIdCreatedUpdatedNotes(state, author, rs, authorId, NAMESPACE);
151

    
152
				personMap.put(authorId, author);
153
	
154
			} //while rs.hasNext()
155
			//logger.info("save " + i + " "+pluralString + " ...");
156
			getAgentService().save((Collection)personMap.values());
157
			
158
				}catch(Exception ex){
159
					logger.error(ex.getMessage());
160
					ex.printStackTrace();
161
					success = false;
162
				}
163
		return success;
164
		}
165

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

    
174
	/* (non-Javadoc)
175
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
176
	 */
177
	@Override
178
	protected boolean doCheck(BerlinModelImportState state){
179
		IOValidator<BerlinModelImportState> validator = new BerlinModelAuthorImportValidator();
180
		return validator.validate(state);
181
	}
182
	
183

    
184

    
185
	/* (non-Javadoc)
186
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
187
	 */
188
	protected boolean isIgnore(BerlinModelImportState state){
189
		return ! state.getConfig().isDoAuthors();
190
	}
191

    
192
}
(1-1/21)