Project

General

Profile

Download (8.02 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

    
10
package eu.etaxonomy.cdm.io.algaterra;
11

    
12
import java.sql.ResultSet;
13
import java.sql.SQLException;
14
import java.util.HashMap;
15
import java.util.HashSet;
16
import java.util.Map;
17
import java.util.Set;
18

    
19
import org.apache.commons.lang.StringUtils;
20
import org.apache.log4j.Logger;
21
import org.springframework.stereotype.Component;
22

    
23
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;
24
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade.DerivedUnitType;
25
import eu.etaxonomy.cdm.api.facade.DerivedUnitFacadeNotSupportedException;
26
import eu.etaxonomy.cdm.database.update.TableNameChanger;
27
import eu.etaxonomy.cdm.io.algaterra.validation.AlgaTerraTypeImportValidator;
28
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
29
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
30
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelReferenceImport;
31
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonNameImport;
32
import eu.etaxonomy.cdm.io.common.IOValidator;
33
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
34
import eu.etaxonomy.cdm.model.common.CdmBase;
35
import eu.etaxonomy.cdm.model.media.Media;
36
import eu.etaxonomy.cdm.model.name.BotanicalName;
37
import eu.etaxonomy.cdm.model.name.Rank;
38
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
39
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
40
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
41
import eu.etaxonomy.cdm.model.occurrence.Collection;
42
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
43
import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
44
import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
45
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
46
import eu.etaxonomy.cdm.model.reference.Reference;
47

    
48

    
49
/**
50
 * @author a.mueller
51
 * @created 20.03.2008
52
 * @version 1.0
53
 */
54
@Component
55
public class AlgaTerraTypeImagesImport  extends AlgaTerraImageImportBase {
56
	private static final Logger logger = Logger.getLogger(AlgaTerraTypeImagesImport.class);
57

    
58
	
59
	private static int modCount = 5000;
60
	private static final String pluralString = "type images";
61
	private static final String dbTableName = "SpecimenFigure";  //??  
62
	
63
	public AlgaTerraTypeImagesImport(){
64
		super();
65
	}
66
	
67
	
68
	/* (non-Javadoc)
69
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
70
	 */
71
	@Override
72
	protected String getIdQuery(BerlinModelImportState state) {
73
		String result = " SELECT SpecimenFigureId "  
74
				+ " FROM SpecimenFigure " 
75
				+ " WHERE TypeSpecimenFk is NOT NULL "
76
				+ " ORDER BY TypeSpecimenFk ";
77
		return result;
78
	}
79

    
80
	/* (non-Javadoc)
81
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
82
	 */
83
	@Override
84
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
85
			String strQuery =    
86
					
87
			" SELECT sf.*, sf.SpecimenFigurePhrase as FigurePhrase, sf.SpecimenFigure as fileName" +
88
            " FROM SpecimenFigure sf  " 
89
     	+ 	" WHERE (sf.SpecimenFigureId IN (" + ID_LIST_TOKEN + ")  )"  
90
     	+ " ORDER BY TypeSpecimenFk ";
91
            ;
92
		return strQuery;
93
	}
94

    
95
	/* (non-Javadoc)
96
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
97
	 */
98
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
99
		boolean success = true;
100
		
101
		AlgaTerraImportState state = (AlgaTerraImportState)bmState;
102
		
103
		Set<SpecimenOrObservationBase> unitsToSave = new HashSet<SpecimenOrObservationBase>();
104
		
105
		Map<String, DerivedUnit> typeSpecimenMap = (Map<String, DerivedUnit>) partitioner.getObjectMap(AlgaTerraSpecimenImportBase.TYPE_SPECIMEN_DERIVED_UNIT_NAMESPACE);
106
		Map<String, Reference> biblioReference = (Map<String, Reference>) partitioner.getObjectMap(BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE);
107
		
108
		
109
		ResultSet rs = partitioner.getResultSet();
110

    
111
		try {
112
			
113
			int i = 0;
114

    
115
			//for each reference
116
            while (rs.next()){
117
                
118
        		if ((i++ % modCount) == 0 && i!= 1 ){ logger.info(pluralString + " handled: " + (i-1));}
119
				
120
				int figureId = rs.getInt("SpecimenFigureId");
121
				int typeSpecimenFk = rs.getInt("typeSpecimenFk");
122
				
123
				
124
				//TODO etc. Created, Notes, Copyright, TermsOfUse etc.
125
				
126
				try {
127
					
128
					//source ref
129
					Reference<?> sourceRef = state.getTransactionalSourceReference();
130
				
131
					DerivedUnitBase derivedUnit = typeSpecimenMap.get(String.valueOf(typeSpecimenFk));
132
					
133
					if (derivedUnit == null){
134
						logger.warn("Could not find type specimen (" + typeSpecimenFk +") for specimen figure " +  figureId);
135
					}else{
136
						
137
						//field observation
138
						Media media = handleSingleImage(rs, derivedUnit, state, partitioner);
139
						
140
						handleTypeImageSpecificFields(rs, media, state);
141
						
142
						unitsToSave.add(derivedUnit); 
143
					}
144

    
145

    
146
				} catch (Exception e) {
147
					logger.warn("Exception in " + getTableName() + ": SpecimenFigureId " + figureId + ". " + e.getMessage());
148
					e.printStackTrace();
149
				} 
150
                
151
            }
152
           
153
//            logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
154

    
155
			logger.warn(pluralString + " to save: " + unitsToSave.size());
156
			getOccurrenceService().saveOrUpdate(unitsToSave);	
157
			
158
			return success;
159
		} catch (SQLException e) {
160
			logger.error("SQLException:" +  e);
161
			return false;
162
		}
163
	}
164

    
165

    
166

    
167
	private void handleTypeImageSpecificFields(ResultSet rs, Media media, AlgaTerraImportState state) throws SQLException {
168
		//TODO
169
		
170
	}
171

    
172
	
173
	/* (non-Javadoc)
174
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
175
	 */
176
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
177
		String nameSpace;
178
		Class cdmClass;
179
		Set<String> idSet;
180
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
181
		
182
		try{
183
			Set<String> typeSpecimenIdSet = new HashSet<String>();
184
			
185
			while (rs.next()){
186
				handleForeignKey(rs, typeSpecimenIdSet, "TypeSpecimenFk");
187
			}
188
			
189
			//type specimen map
190
			nameSpace = AlgaTerraSpecimenImportBase.TYPE_SPECIMEN_DERIVED_UNIT_NAMESPACE;
191
			cdmClass = SpecimenOrObservationBase.class;
192
			idSet = typeSpecimenIdSet;
193
			Map<String, DerivedUnit> typeSpecimenMap = (Map<String, DerivedUnit>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
194
			result.put(nameSpace, typeSpecimenMap);
195

    
196
			
197
		} catch (SQLException e) {
198
			throw new RuntimeException(e);
199
		}
200
		return result;
201
	}
202

    
203

    
204
	
205

    
206
	/* (non-Javadoc)
207
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
208
	 */
209
	@Override
210
	protected boolean doCheck(BerlinModelImportState state){
211
		IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
212
		return validator.validate(state);
213
	}
214
	
215
	/* (non-Javadoc)
216
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
217
	 */
218
	@Override
219
	protected String getTableName() {
220
		return dbTableName;
221
	}
222
	
223
	/* (non-Javadoc)
224
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
225
	 */
226
	@Override
227
	public String getPluralString() {
228
		return pluralString;
229
	}
230

    
231
	/* (non-Javadoc)
232
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
233
	 */
234
	protected boolean isIgnore(BerlinModelImportState bmState){
235
		AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
236
//		return !  ( config.isDoTypes() && config.isDoImages()) ;
237
		return false;
238
	}
239
	
240
}
(9-9/11)