Project

General

Profile

Download (6.49 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.FieldObservation;
30
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
31

    
32

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

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

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

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

    
92
		try {
93
			
94
			int i = 0;
95

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

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

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

    
145

    
146

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

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

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

    
183
	/* (non-Javadoc)
184
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
185
	 */
186
	@Override
187
	protected boolean doCheck(BerlinModelImportState state){
188
		IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
189
		return validator.validate(state);
190
	}
191

    
192
	/* (non-Javadoc)
193
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
194
	 */
195
	protected boolean isIgnore(BerlinModelImportState bmState){
196
		AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
197
		return !  ( config.isDoEcoFacts() && config.isDoImages()) ;
198
	}
199
	
200
}
(10-10/14)