Project

General

Profile

Download (6.52 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.berlinModel.in.BerlinModelReferenceImport;
26
import eu.etaxonomy.cdm.io.common.IOValidator;
27
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
28
import eu.etaxonomy.cdm.model.common.CdmBase;
29
import eu.etaxonomy.cdm.model.media.Media;
30
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
31
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
32
import eu.etaxonomy.cdm.model.reference.Reference;
33

    
34

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

    
43

    
44
	private static int modCount = 5000;
45
	private static final String pluralString = "type images";
46
	private static final String dbTableName = "SpecimenFigure";  //??
47

    
48
	public AlgaTerraTypeImagesImport(){
49
		super(dbTableName, pluralString);
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 SpecimenFigureId "
59
				+ " FROM SpecimenFigure "
60
				+ " WHERE TypeSpecimenFk is NOT NULL "
61
				+ " ORDER BY TypeSpecimenFk ";
62
		return result;
63
	}
64

    
65
	/* (non-Javadoc)
66
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
67
	 */
68
	@Override
69
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
70
			String strQuery =
71

    
72
			" SELECT sf.*, sf.SpecimenFigurePhrase as FigurePhrase, sf.SpecimenFigure as fileName, sf.PicturePath as filePath" +
73
            " FROM SpecimenFigure sf  "
74
     	+ 	" WHERE (sf.SpecimenFigureId IN (" + ID_LIST_TOKEN + ")  )"
75
     	+ " ORDER BY TypeSpecimenFk ";
76
            ;
77
		return strQuery;
78
	}
79

    
80
	/* (non-Javadoc)
81
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
82
	 */
83
	@Override
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 = partitioner.getObjectMap(AlgaTerraSpecimenImportBase.TYPE_SPECIMEN_DERIVED_UNIT_NAMESPACE);
92
		Map<String, Reference> referenceMap = 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)