Project

General

Profile

Download (6.85 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.log4j.Logger;
20
import org.springframework.stereotype.Component;
21

    
22
import eu.etaxonomy.cdm.io.algaterra.validation.AlgaTerraTypeImportValidator;
23
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
24
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
25
import eu.etaxonomy.cdm.io.common.IOValidator;
26
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
27
import eu.etaxonomy.cdm.model.common.CdmBase;
28
import eu.etaxonomy.cdm.model.media.Media;
29
import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
30
import eu.etaxonomy.cdm.model.occurrence.FieldObservation;
31
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
32

    
33

    
34
/**
35
 * @author a.mueller
36
 * @created 20.03.2008
37
 * @version 1.0
38
 */
39
@Component
40
public class AlgaTerraSiteImagesImport  extends AlgaTerraImageImportBase {
41
	private static final Logger logger = Logger.getLogger(AlgaTerraSiteImagesImport.class);
42

    
43
	
44
	private static int modCount = 5000;
45
	private static final String pluralString = "site images";
46
	private static final String dbTableName = "SiteImages";  //??  
47
	
48
	public AlgaTerraSiteImagesImport(){
49
		super();
50
	}
51
	
52
	
53
	/* (non-Javadoc)
54
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
55
	 */
56
	@Override
57
	protected String getIdQuery(BerlinModelImportState state) {
58
		String result = " SELECT SiteId "  
59
				+ " FROM SiteImages " 
60
				+ " ORDER BY EcoFactFk ";
61
		return result;
62
	}
63

    
64
	/* (non-Javadoc)
65
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
66
	 */
67
	@Override
68
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
69
			String strQuery =    
70
						
71
				" SELECT si.*, si.Comment as FigurePhrase, si.Picture as fileName " +
72
	            " FROM SiteImages si  " 
73
	            + 	" WHERE (si.SiteID IN (" + ID_LIST_TOKEN + ")  )"  
74
	            + " ORDER BY EcoFactFk ";
75
            ;
76
		return strQuery;
77
	}
78

    
79
	/* (non-Javadoc)
80
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
81
	 */
82
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
83
		boolean success = true;
84
		
85
		AlgaTerraImportState state = (AlgaTerraImportState)bmState;
86
		
87
		Set<SpecimenOrObservationBase> unitsToSave = new HashSet<SpecimenOrObservationBase>();
88
		
89
		Map<String, FieldObservation> ecoFactFieldObservationMap = (Map<String, FieldObservation>) partitioner.getObjectMap(AlgaTerraSpecimenImportBase.ECO_FACT_FIELD_OBSERVATION_NAMESPACE);
90
		
91
		ResultSet rs = partitioner.getResultSet();
92

    
93
		try {
94
			
95
			int i = 0;
96

    
97
			//for each reference
98
            while (rs.next()){
99
                
100
        		if ((i++ % modCount) == 0 && i!= 1 ){ logger.info(pluralString + " handled: " + (i-1));}
101
				
102
				int figureId = rs.getInt("VoucherImageID");
103
				int ecoFactFk = rs.getInt("EcoFactFk");
104
				
105
				
106
				//TODO etc. Created, Notes, Copyright, TermsOfUse etc.
107
				
108
				try {
109
					
110
					//TODO use deduplicated ecofact
111
					FieldObservation fieldObservation = ecoFactFieldObservationMap.get(ecoFactFk);
112
					
113
					if (fieldObservation == null){
114
						logger.warn("Could not find eco fact field observation (" + ecoFactFk +") for site image " +  figureId);
115
					}else{
116
						
117
					}
118
					
119
					//field observation
120
					Media media = handleSingleImage(rs, fieldObservation, state, partitioner);
121
					
122
					handleTypeImageSpecificFields(rs, media, state);
123
					
124
					unitsToSave.add(fieldObservation); 
125
					
126

    
127
				} catch (Exception e) {
128
					logger.warn("Exception in " + getTableName() + ": SiteId " + figureId + ". " + e.getMessage());
129
					e.printStackTrace();
130
				} 
131
                
132
            }
133
           
134
//            logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
135

    
136
			logger.warn(pluralString + " to save: " + unitsToSave.size());
137
			getOccurrenceService().save(unitsToSave);	
138
			
139
			return success;
140
		} catch (SQLException e) {
141
			logger.error("SQLException:" +  e);
142
			return false;
143
		}
144
	}
145

    
146

    
147

    
148
	private void handleTypeImageSpecificFields(ResultSet rs, Media media, AlgaTerraImportState state) throws SQLException {
149
		//TODO
150
		
151
	}
152

    
153
	
154
	/* (non-Javadoc)
155
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
156
	 */
157
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
158
		String nameSpace;
159
		Class cdmClass;
160
		Set<String> idSet;
161
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
162
		
163
		try{
164
			Set<String> ecoFactIdSet = new HashSet<String>();
165
			
166
			while (rs.next()){
167
				handleForeignKey(rs, ecoFactIdSet, "EcoFactFk");
168
			}
169
			
170
			//type specimen map
171
			nameSpace = AlgaTerraSpecimenImportBase.ECO_FACT_DERIVED_UNIT_NAMESPACE;
172
			cdmClass = DerivedUnitBase.class;
173
			idSet = ecoFactIdSet;
174
			Map<String, DerivedUnitBase> typeSpecimenMap = (Map<String,DerivedUnitBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
175
			result.put(nameSpace, typeSpecimenMap);
176

    
177
			
178
		} catch (SQLException e) {
179
			throw new RuntimeException(e);
180
		}
181
		return result;
182
	}
183

    
184

    
185
	
186

    
187
	/* (non-Javadoc)
188
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
189
	 */
190
	@Override
191
	protected boolean doCheck(BerlinModelImportState state){
192
		IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
193
		return validator.validate(state);
194
	}
195
	
196
	/* (non-Javadoc)
197
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
198
	 */
199
	@Override
200
	protected String getTableName() {
201
		return dbTableName;
202
	}
203
	
204
	/* (non-Javadoc)
205
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
206
	 */
207
	@Override
208
	public String getPluralString() {
209
		return pluralString;
210
	}
211

    
212
	/* (non-Javadoc)
213
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
214
	 */
215
	protected boolean isIgnore(BerlinModelImportState bmState){
216
		AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
217
//		return !  ( config.isDoTypes() && config.isDoImages()) ;
218
		return false;
219
	}
220
	
221
}
(6-6/11)