Project

General

Profile

Download (6.78 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.AlgaTerraImageImportBase.PathType;
23
import eu.etaxonomy.cdm.io.algaterra.validation.AlgaTerraTypeImportValidator;
24
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
25
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
26
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelReferenceImport;
27
import eu.etaxonomy.cdm.io.common.IOValidator;
28
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
29
import eu.etaxonomy.cdm.model.common.CdmBase;
30
import eu.etaxonomy.cdm.model.media.Media;
31
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
32
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
33
import eu.etaxonomy.cdm.model.reference.Reference;
34

    
35

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

    
44
	
45
	private static int modCount = 5000;
46
	private static final String pluralString = "type images";
47
	private static final String dbTableName = "SpecimenFigure";  //??  
48
	
49
	public AlgaTerraTypeImagesImport(){
50
		super(dbTableName, pluralString);
51
	}
52
	
53
	
54
	/* (non-Javadoc)
55
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
56
	 */
57
	@Override
58
	protected String getIdQuery(BerlinModelImportState state) {
59
		String result = " SELECT SpecimenFigureId "  
60
				+ " FROM SpecimenFigure " 
61
				+ " WHERE TypeSpecimenFk is NOT NULL "
62
				+ " ORDER BY TypeSpecimenFk ";
63
		return result;
64
	}
65

    
66
	/* (non-Javadoc)
67
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
68
	 */
69
	@Override
70
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
71
			String strQuery =    
72
					
73
			" SELECT sf.*, sf.SpecimenFigurePhrase as FigurePhrase, sf.SpecimenFigure as fileName, sf.PicturePath as filePath" +
74
            " FROM SpecimenFigure sf  " 
75
     	+ 	" WHERE (sf.SpecimenFigureId IN (" + ID_LIST_TOKEN + ")  )"  
76
     	+ " ORDER BY TypeSpecimenFk ";
77
            ;
78
		return strQuery;
79
	}
80

    
81
	/* (non-Javadoc)
82
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
83
	 */
84
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState bmState) {
85
		boolean success = true;
86
		
87
		AlgaTerraImportState state = (AlgaTerraImportState)bmState;
88
		
89
		Set<SpecimenOrObservationBase> unitsToSave = new HashSet<SpecimenOrObservationBase>();
90
		
91
		Map<String, DerivedUnit> typeSpecimenMap = (Map<String, DerivedUnit>) partitioner.getObjectMap(AlgaTerraSpecimenImportBase.TYPE_SPECIMEN_DERIVED_UNIT_NAMESPACE);
92
		Map<String, Reference> referenceMap = (Map<String, Reference>) partitioner.getObjectMap(BerlinModelReferenceImport.REFERENCE_NAMESPACE);
93
		
94
		
95
		ResultSet rs = partitioner.getResultSet();
96

    
97
		try {
98
			
99
			int i = 0;
100

    
101
			//for each reference
102
            while (rs.next()){
103
                
104
        		if ((i++ % modCount) == 0 && i!= 1 ){ logger.info(pluralString + " handled: " + (i-1));}
105
				
106
				int figureId = rs.getInt("SpecimenFigureId");
107
				int typeSpecimenFk = rs.getInt("typeSpecimenFk");
108
				
109
				
110
				//TODO etc. Created, Notes, Copyright, TermsOfUse etc.
111
				
112
				try {
113
					
114
					//source ref
115
					Reference<?> sourceRef = state.getTransactionalSourceReference();
116
				
117
					DerivedUnit derivedUnit = typeSpecimenMap.get(String.valueOf(typeSpecimenFk));
118
					
119
					if (derivedUnit == null){
120
						logger.warn("Could not find type specimen (" + typeSpecimenFk +") for specimen figure " +  figureId);
121
					}else{
122
						
123
						//field observation
124
						Media media = handleSingleImage(rs, derivedUnit, state, partitioner, PathType.Image);
125
						
126
						handleTypeImageSpecificFields(rs, media, state);
127
						
128
						unitsToSave.add(derivedUnit); 
129
					}
130

    
131

    
132
				} catch (Exception e) {
133
					logger.warn("Exception in " + getTableName() + ": SpecimenFigureId " + figureId + ". " + e.getMessage());
134
					e.printStackTrace();
135
				} 
136
                
137
            }
138
           
139
//            logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
140

    
141
			logger.warn(pluralString + " to save: " + unitsToSave.size());
142
			getOccurrenceService().saveOrUpdate(unitsToSave);	
143
			
144
			return success;
145
		} catch (SQLException e) {
146
			logger.error("SQLException:" +  e);
147
			return false;
148
		}
149
	}
150

    
151

    
152

    
153
	private void handleTypeImageSpecificFields(ResultSet rs, Media media, AlgaTerraImportState state) throws SQLException {
154
		//TODO refFk, refDetailFk, publishFlag
155
		Integer refFk = nullSafeInt(rs, "refFk");
156
		Integer refDetailFk = nullSafeInt(rs, "refDetailFk");
157
		
158
		//TODO
159
		
160
		
161
	}
162

    
163
	@Override
164
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, BerlinModelImportState state) {
165
		String nameSpace;
166
		Class<?> cdmClass;
167
		Set<String> idSet;
168
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
169
		
170
		try{
171
			Set<String> typeSpecimenIdSet = new HashSet<String>();
172
			
173
			while (rs.next()){
174
				handleForeignKey(rs, typeSpecimenIdSet, "TypeSpecimenFk");
175
			}
176
			
177
			//type specimen map
178
			nameSpace = AlgaTerraSpecimenImportBase.TYPE_SPECIMEN_DERIVED_UNIT_NAMESPACE;
179
			cdmClass = SpecimenOrObservationBase.class;
180
			idSet = typeSpecimenIdSet;
181
			Map<String, DerivedUnit> typeSpecimenMap = (Map<String, DerivedUnit>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
182
			result.put(nameSpace, typeSpecimenMap);
183

    
184
			
185
		} catch (SQLException e) {
186
			throw new RuntimeException(e);
187
		}
188
		return result;
189
	}
190

    
191
	@Override
192
	protected boolean doCheck(BerlinModelImportState state){
193
		IOValidator<BerlinModelImportState> validator = new AlgaTerraTypeImportValidator();
194
		return validator.validate(state);
195
	}
196

    
197

    
198
	@Override
199
	protected boolean isIgnore(BerlinModelImportState bmState){
200
		AlgaTerraImportConfigurator config = ((AlgaTerraImportState) bmState).getAlgaTerraConfigurator();
201
		return !  ( config.isDoTypes() && config.isDoImages()) ;
202
//		return false;
203
	}
204
	
205
}
(13-13/15)