Project

General

Profile

« Previous | Next » 

Revision 640750ba

Added by Andreas Müller over 11 years ago

first part of specimen import for AlgaTerra #3071

View differences:

.gitattributes
97 97
app-import/src/main/java/eu/etaxonomy/cdm/io/PalmaeImageImport.java -text
98 98
app-import/src/main/java/eu/etaxonomy/cdm/io/PalmaeProtologueImport.java -text
99 99
app-import/src/main/java/eu/etaxonomy/cdm/io/ProtologueImport.java -text
100
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraImportConfigurator.java -text
101
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraImportState.java -text
102
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraSpecimenImport.java -text
103
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/validation/AlgaTerraSpecimenImportValidator.java -text
100 104
app-import/src/main/java/eu/etaxonomy/cdm/io/cyprus/CyprusDistributionImport.java -text
101 105
app-import/src/main/java/eu/etaxonomy/cdm/io/cyprus/CyprusDistributionRow.java -text
102 106
app-import/src/main/java/eu/etaxonomy/cdm/io/cyprus/CyprusExcelImport.java -text
app-import/src/main/java/eu/etaxonomy/cdm/app/berlinModelImport/AlgaTerraActivator.java
17 17
import eu.etaxonomy.cdm.app.common.CdmDestinations;
18 18
import eu.etaxonomy.cdm.database.DbSchemaValidation;
19 19
import eu.etaxonomy.cdm.database.ICdmDataSource;
20
import eu.etaxonomy.cdm.io.algaterra.AlgaTerraImportConfigurator;
20 21
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
21 22
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
22 23
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
......
56 57
	//check - import
57 58
	static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
58 59

  
60
	private boolean ignoreNull = true;
59 61

  
60 62
	//NomeclaturalCode
61 63
	static final NomenclaturalCode nomenclaturalCode = NomenclaturalCode.ICBN;
......
79 81
	static final boolean doFacts = true;
80 82
	static final boolean doOccurences = false;
81 83
	static final boolean doCommonNames = false; //do not exist in Alga Terra
84
	
85
	//alga terra specific
86
	static final boolean doSpecimen = true;
82 87

  
83 88
// ************************ NONE **************************************** //
84 89
	
......
94 99
//	static final boolean doNameFacts = false;
95 100
//	
96 101
//	//taxa
97
//	static final boolean doTaxa = false;
102
//	static final boolean doTaxa = true;
98 103
//	static final boolean doRelTaxa = false;
99 104
//	static final boolean doFacts = false;
100 105
//	static final boolean doOccurences = false;
101 106
//	static final boolean doCommonNames = false;
102
	
107
//	
108
//  //alga terra specific
109
//	static final boolean doSpecimen = true;
103 110
	
104 111
	public void invoke(String[] args){
105 112
		System.out.println("Start import from BerlinModel("+ berlinModelSource.getDatabase() + ") ...");
......
108 115
		Source source = berlinModelSource;
109 116
		ICdmDataSource destination = CdmDestinations.chooseDestination(args) != null ? CdmDestinations.chooseDestination(args) : cdmDestination;
110 117
		
111
		BerlinModelImportConfigurator bmImportConfigurator = BerlinModelImportConfigurator.NewInstance(source,  destination);
118
		AlgaTerraImportConfigurator config = AlgaTerraImportConfigurator.NewInstance(source,  destination);
112 119
		
113
		bmImportConfigurator.setClassificationUuid(treeUuid);
114
		bmImportConfigurator.setSourceSecId(sourceSecId);
115
		bmImportConfigurator.setNomenclaturalCode(nomenclaturalCode);
120
		config.setClassificationUuid(treeUuid);
121
		config.setSourceSecId(sourceSecId);
122
		config.setNomenclaturalCode(nomenclaturalCode);
116 123

  
117
		bmImportConfigurator.setDoAuthors(doAuthors);
118
		bmImportConfigurator.setDoReferences(doReferences);
119
		bmImportConfigurator.setDoTaxonNames(doTaxonNames);
120
		bmImportConfigurator.setDoRelNames(doRelNames);
121
		bmImportConfigurator.setDoNameStatus(doNameStatus);
122
		bmImportConfigurator.setDoTypes(doTypes);
123
		bmImportConfigurator.setDoNameFacts(doNameFacts);
124
		config.setDoAuthors(doAuthors);
125
		config.setDoReferences(doReferences);
126
		config.setDoTaxonNames(doTaxonNames);
127
		config.setDoRelNames(doRelNames);
128
		config.setDoNameStatus(doNameStatus);
129
		config.setDoTypes(doTypes);
130
		config.setDoNameFacts(doNameFacts);
131
		
132
		config.setDoTaxa(doTaxa);
133
		config.setDoRelTaxa(doRelTaxa);
134
		config.setDoFacts(doFacts);
135
		config.setDoOccurrence(doOccurences);
136
		config.setDoCommonNames(doCommonNames);
137
		config.setDoSpecimen(doSpecimen);
124 138
		
125
		bmImportConfigurator.setDoTaxa(doTaxa);
126
		bmImportConfigurator.setDoRelTaxa(doRelTaxa);
127
		bmImportConfigurator.setDoFacts(doFacts);
128
		bmImportConfigurator.setDoOccurrence(doOccurences);
129
		bmImportConfigurator.setDoCommonNames(doCommonNames);
130
		bmImportConfigurator.setSourceRefUuid(sourceRefUuid);
139
		config.setSourceRefUuid(sourceRefUuid);
140
		config.setIgnoreNull(ignoreNull);
131 141
		
132
		bmImportConfigurator.setDbSchemaValidation(hbm2dll);
142
		config.setDbSchemaValidation(hbm2dll);
133 143

  
134
		bmImportConfigurator.setCheck(check);
144
		config.setCheck(check);
135 145
		
136 146
		// invoke import
137 147
		CdmDefaultImport<BerlinModelImportConfigurator> bmImport = new CdmDefaultImport<BerlinModelImportConfigurator>();
138
		bmImport.invoke(bmImportConfigurator);
148
		bmImport.invoke(config);
139 149

  
140
		if (doFacts && (bmImportConfigurator.getCheck().equals(CHECK.CHECK_AND_IMPORT)  || bmImportConfigurator.getCheck().equals(CHECK.IMPORT_WITHOUT_CHECK) )   ){
150
		if (doFacts && (config.getCheck().equals(CHECK.CHECK_AND_IMPORT)  || config.getCheck().equals(CHECK.IMPORT_WITHOUT_CHECK) )   ){
141 151
			ICdmApplicationConfiguration app = bmImport.getCdmAppController();
142 152
			
143 153
			//make feature tree
144
			FeatureTree tree = TreeCreator.flatTree(featureTreeUuid, bmImportConfigurator.getFeatureMap(), featureKeyList);
154
			FeatureTree tree = TreeCreator.flatTree(featureTreeUuid, config.getFeatureMap(), featureKeyList);
145 155
			FeatureNode imageNode = FeatureNode.NewInstance(Feature.IMAGE());
146 156
			tree.getRoot().addChild(imageNode);
147 157
			FeatureNode distributionNode = FeatureNode.NewInstance(Feature.DISTRIBUTION());
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraImportConfigurator.java
1
/**
2
 * 
3
 */
4
package eu.etaxonomy.cdm.io.algaterra;
5

  
6
import eu.etaxonomy.cdm.database.ICdmDataSource;
7
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelAuthorImport;
8
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelAuthorTeamImport;
9
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelCommonNamesImport;
10
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelFactsImport;
11
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
12
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
13
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelNameFactsImport;
14
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelNameStatusImport;
15
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelOccurrenceImport;
16
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelOccurrenceSourceImport;
17
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelRefDetailImport;
18
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelReferenceImport;
19
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonImport;
20
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonNameImport;
21
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonNameRelationImport;
22
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonRelationImport;
23
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTypesImport;
24
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelUserImport;
25
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelWebMarkerCategoryImport;
26
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelWebMarkerImport;
27
import eu.etaxonomy.cdm.io.berlinModel.in.validation.BerlinModelGeneralImportValidator;
28
import eu.etaxonomy.cdm.io.common.ImportStateBase;
29
import eu.etaxonomy.cdm.io.common.Source;
30
import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
31

  
32
/**
33
 * @author pesiimport
34
 *
35
 */
36
public class AlgaTerraImportConfigurator extends BerlinModelImportConfigurator {
37

  
38
	private boolean doSpecimen = true;
39
	
40
	public static AlgaTerraImportConfigurator NewInstance(Source berlinModelSource, ICdmDataSource destination){
41
		return new AlgaTerraImportConfigurator(berlinModelSource, destination);
42
	}
43
	
44
	private AlgaTerraImportConfigurator(Source berlinModelSource, ICdmDataSource destination) {
45
		super(berlinModelSource, destination);
46
	}
47
	
48
	protected void makeIoClassList(){
49
		ioClassList = new Class[]{
50
				BerlinModelGeneralImportValidator.class
51
				, BerlinModelUserImport.class
52
				, BerlinModelAuthorImport.class
53
				, BerlinModelAuthorTeamImport.class
54
				, BerlinModelRefDetailImport.class
55
				, BerlinModelReferenceImport.class
56
				, BerlinModelTaxonNameImport.class
57
				, BerlinModelTaxonNameRelationImport.class
58
				, BerlinModelNameStatusImport.class
59
				, BerlinModelTypesImport.class
60
				, BerlinModelTaxonImport.class
61
				, BerlinModelTaxonRelationImport.class
62
				, BerlinModelCommonNamesImport.class
63
				, BerlinModelFactsImport.class
64
				, BerlinModelOccurrenceImport.class
65
				, BerlinModelOccurrenceSourceImport.class
66
				, BerlinModelWebMarkerCategoryImport.class
67
				, BerlinModelWebMarkerImport.class
68
				
69
				, AlgaTerraSpecimenImport.class
70
				
71
		};	
72
		
73
	
74
	}
75
	
76

  
77
	/* (non-Javadoc)
78
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator#getNewState()
79
	 */
80
	@Override
81
	public ImportStateBase getNewState() {
82
		return new AlgaTerraImportState(this);
83
	}
84

  
85
	public boolean isDoSpecimen() {
86
		return doSpecimen;
87
	}
88

  
89
	public void setDoSpecimen(boolean doSpecimen) {
90
		this.doSpecimen = doSpecimen;
91
	}
92

  
93

  
94
}
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraImportState.java
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

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

  
13
import org.apache.log4j.Logger;
14

  
15
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
16

  
17
/**
18
 * @author a.mueller
19
 * @created 11.05.2009
20
 * @version 1.0
21
 */
22
public class AlgaTerraImportState extends BerlinModelImportState{
23

  
24
	@SuppressWarnings("unused")
25
	private static final Logger logger = Logger.getLogger(AlgaTerraImportState.class);
26

  
27
	public AlgaTerraImportState(AlgaTerraImportConfigurator config) {
28
		super(config);
29
	}
30
	
31
	public AlgaTerraImportConfigurator getAlgaTerraConfigurator(){
32
		return (AlgaTerraImportConfigurator)getConfig();
33
	}
34
    
35
}
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/AlgaTerraSpecimenImport.java
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.io.algaterra.validation.AlgaTerraSpecimenImportValidator;
26
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase;
27
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
28
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
29
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelTaxonImport;
30
import eu.etaxonomy.cdm.io.common.IOValidator;
31
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
32
import eu.etaxonomy.cdm.model.common.CdmBase;
33
import eu.etaxonomy.cdm.model.description.Feature;
34
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
35
import eu.etaxonomy.cdm.model.description.TaxonDescription;
36
import eu.etaxonomy.cdm.model.location.Point;
37
import eu.etaxonomy.cdm.model.location.ReferenceSystem;
38
import eu.etaxonomy.cdm.model.reference.Reference;
39
import eu.etaxonomy.cdm.model.taxon.Taxon;
40
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
41

  
42

  
43
/**
44
 * @author a.mueller
45
 * @created 20.03.2008
46
 * @version 1.0
47
 */
48
@Component
49
public class AlgaTerraSpecimenImport  extends BerlinModelImportBase {
50
	private static final Logger logger = Logger.getLogger(AlgaTerraSpecimenImport.class);
51

  
52
	public static final String NAMESPACE = "Occurrence";
53
	
54
	
55
	private static int modCount = 5000;
56
	private static final String pluralString = "specimen and observation";
57
	private static final String dbTableName = "Fact";  //??  
58

  
59

  
60
	public AlgaTerraSpecimenImport(){
61
		super();
62
	}
63
	
64
	/* (non-Javadoc)
65
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()
66
	 */
67
	@Override
68
	protected String getIdQuery(BerlinModelImportState state) {
69
		String result = " SELECT factId " + 
70
				" FROM " + getTableName() + " INNER JOIN PTaxon ON Fact.PTNameFk = PTaxon.PTNameFk AND Fact.PTRefFk = PTaxon.PTRefFk "
71
				+ " WHERE FactCategoryFk = 202 "
72
				+ " ORDER BY PTaxon.RIdentifier, Fact.FactId ";
73
		return result;
74
	}
75

  
76
	/* (non-Javadoc)
77
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getRecordQuery(eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator)
78
	 */
79
	@Override
80
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
81
			String strQuery =   //DISTINCT because otherwise emOccurrenceSource creates multiple records for a single distribution 
82
            " SELECT PTaxon.RIdentifier as taxonId, Fact.FactId, Fact.RecordBasis, EcoFact.* " + 
83
            " FROM Fact " + 
84
                 " INNER JOIN EcoFact ON Fact.ExtensionFk = EcoFact.EcoFactId " +
85
                 " INNER JOIN PTaxon ON dbo.Fact.PTNameFk = dbo.PTaxon.PTNameFk AND dbo.Fact.PTRefFk = dbo.PTaxon.PTRefFk " +
86
            " WHERE Fact.FactCategoryFk = 202 AND (Fact.FactId IN (" + ID_LIST_TOKEN + ")  )"  
87
            + " ORDER BY PTaxon.RIdentifier, Fact.FactId "
88
            ;
89
		return strQuery;
90
	}
91

  
92
	/* (non-Javadoc)
93
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#doPartition(eu.etaxonomy.cdm.io.berlinModel.in.ResultSetPartitioner, eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState)
94
	 */
95
	public boolean doPartition(ResultSetPartitioner partitioner, BerlinModelImportState state) {
96
		boolean success = true;
97
		Set<TaxonBase> taxaToSave = new HashSet<TaxonBase>();
98
		
99
		Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>) partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE);
100
			
101
		ResultSet rs = partitioner.getResultSet();
102

  
103
		try {
104
			int oldTaxonId = -1;
105
			TaxonDescription oldDescription = null;
106
			int i = 0;
107
			int countDescriptions = 0;
108
			int countSpecimen = 0;
109
			//for each reference
110
            while (rs.next()){
111
                
112
        		if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("Specimen facts handled: " + (i-1));}
113
				
114
				int newTaxonId = rs.getInt("taxonId");
115
				int factId = rs.getInt("FactId");
116
				try {
117
							
118
					String recordBasis = rs.getString("RecordBasis");
119
					
120
					Reference<?> sourceRef = state.getTransactionalSourceReference();
121
					//create description(elements)
122
					TaxonDescription taxonDescription = getTaxonDescription(newTaxonId, oldTaxonId, oldDescription, taxonMap, factId, sourceRef);
123

  
124
					DerivedUnitType type = makeDerivedUnitType(recordBasis);
125
					DerivedUnitFacade facade = DerivedUnitFacade.NewInstance(type);
126
					
127
					handleSingleSpecimen(rs, facade);
128
					
129
					IndividualsAssociation indAssociation = IndividualsAssociation.NewInstance();
130
					Feature feature = makeFeature(type);
131
					indAssociation.setAssociatedSpecimenOrObservation(facade.innerDerivedUnit());
132
					indAssociation.setFeature(feature);
133
					taxonDescription.addElement(indAssociation);
134
					
135
					if (taxonDescription != oldDescription){ 
136
						taxaToSave.add(taxonDescription.getTaxon()); 
137
						oldDescription = taxonDescription; 
138
						countDescriptions++; 
139
					}
140
				} catch (Exception e) {
141
					logger.warn("Exception in ecoFact: FactId " + factId + ". " + e.getMessage());
142
//					e.printStackTrace();
143
				} 
144
                
145
            }
146
           
147
            logger.warn("Specimen: " + countSpecimen + ", Descriptions: " + countDescriptions );
148

  
149
			logger.warn("Taxa to save: " + taxaToSave.size());
150
			getTaxonService().save(taxaToSave);	
151
			
152
			return success;
153
		} catch (SQLException e) {
154
			logger.error("SQLException:" +  e);
155
			return false;
156
		}
157
	}
158

  
159

  
160
	private void handleSingleSpecimen(ResultSet rs, DerivedUnitFacade facade) throws SQLException {
161
       	//TDWGGazetteerFK, CollectionFk, Collector, GeoCodeMethod, Prec, AltitudeMethod, Depth,
162
    	//ISOCountrySub, CollectionDate/End, WaterBody, 
163
    	//CreatedWhen/Who/Updated/who
164
    	
165
    	//P1-10Value/Unit/Parameter/Method
166

  
167
//		int factId = rs.getInt("factId");
168
        String locality = rs.getString("Locality");
169
        Double latitude = rs.getDouble("Latitude");
170
        Double longitude = rs.getDouble("Longitude");
171
        int errorRadius = rs.getInt("Prec");
172
    	Integer altitude = rs.getInt("Altitude");
173
    	String altitudeUnit = rs.getString("AltitudeUnit");
174
    	String collectorsNumber = rs.getString("CollectorsNumber");
175
    	
176
    	//location
177
    	facade.setLocality(locality);
178
    	    	
179
    	//exact location
180
    	ReferenceSystem referenceSystem = null;
181
    	Point exactLocation = Point.NewInstance(longitude, latitude, referenceSystem, errorRadius);
182
    	facade.setExactLocation(exactLocation);
183
    	
184
    	//altitude
185
    	if (StringUtils.isNotBlank(altitudeUnit) && ! altitudeUnit.trim().equalsIgnoreCase("m")){
186
    		logger.warn("Altitude unit is not [m] but: " +  altitudeUnit);
187
    	}
188
    	facade.setAbsoluteElevationRange(altitude, altitude);  //TODO
189
    	
190
    	//field
191
    	facade.setFieldNumber(collectorsNumber);
192
     	
193
	}
194
	
195
	private Feature makeFeature(DerivedUnitType type) {
196
		if (type.equals(DerivedUnitType.DerivedUnit)){
197
			return Feature.INDIVIDUALS_ASSOCIATION();
198
		}else if (type.equals(DerivedUnitType.FieldObservation) || type.equals(DerivedUnitType.Observation) ){
199
			return Feature.OBSERVATION();
200
		}else if (type.equals(DerivedUnitType.Fossil) || type.equals(DerivedUnitType.LivingBeing) || type.equals(DerivedUnitType.Specimen )){
201
			return Feature.SPECIMEN();
202
		}
203
		logger.warn("No feature defined for derived unit type: " + type);
204
		return null;
205
	}
206

  
207

  
208
	private DerivedUnitType makeDerivedUnitType(String recordBasis) {
209
		DerivedUnitType result = null;
210
		if (StringUtils.isBlank(recordBasis)){
211
			result = DerivedUnitType.DerivedUnit;
212
		} else if (recordBasis.equalsIgnoreCase("FossileSpecimen")){
213
			result = DerivedUnitType.Fossil;
214
		}else if (recordBasis.equalsIgnoreCase("HumanObservation")){
215
			result = DerivedUnitType.Observation;
216
		}else if (recordBasis.equalsIgnoreCase("Literature")){
217
			logger.warn("Literature record basis not yet supported");
218
			result = DerivedUnitType.DerivedUnit;
219
		}else if (recordBasis.equalsIgnoreCase("LivingSpecimen")){
220
			result = DerivedUnitType.LivingBeing;
221
		}else if (recordBasis.equalsIgnoreCase("MachineObservation")){
222
			logger.warn("MachineObservation record basis not yet supported");
223
			result = DerivedUnitType.Observation;
224
		}else if (recordBasis.equalsIgnoreCase("PreservedSpecimen")){
225
			result = DerivedUnitType.Specimen;
226
		}
227
		return result;
228
	}
229

  
230
	/* (non-Javadoc)
231
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
232
	 */
233
	public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs) {
234
		String nameSpace;
235
		Class cdmClass;
236
		Set<String> idSet;
237
		Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
238
		
239
		try{
240
			Set<String> taxonIdSet = new HashSet<String>();
241
			while (rs.next()){
242
				handleForeignKey(rs, taxonIdSet, "taxonId");
243
			}
244
			
245
			//taxon map
246
			nameSpace = BerlinModelTaxonImport.NAMESPACE;
247
			cdmClass = TaxonBase.class;
248
			idSet = taxonIdSet;
249
			Map<String, TaxonBase> objectMap = (Map<String, TaxonBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
250
			result.put(nameSpace, objectMap);
251

  
252
		} catch (SQLException e) {
253
			throw new RuntimeException(e);
254
		}
255
		return result;
256
	}
257

  
258

  
259
	/**
260
	 * Use same TaxonDescription if two records belong to the same taxon 
261
	 * @param newTaxonId
262
	 * @param oldTaxonId
263
	 * @param oldDescription
264
	 * @param taxonMap
265
	 * @return
266
	 */
267
	private TaxonDescription getTaxonDescription(int newTaxonId, int oldTaxonId, TaxonDescription oldDescription, Map<String, TaxonBase> taxonMap, int factId, Reference<?> sourceSec){
268
		TaxonDescription result = null;
269
		if (oldDescription == null || newTaxonId != oldTaxonId){
270
			TaxonBase<?> taxonBase = taxonMap.get(String.valueOf(newTaxonId));
271
			//TODO for testing
272
			//TaxonBase taxonBase = Taxon.NewInstance(BotanicalName.NewInstance(Rank.SPECIES()), null);
273
			Taxon taxon;
274
			if ( taxonBase instanceof Taxon ) {
275
				taxon = (Taxon) taxonBase;
276
			} else if (taxonBase != null) {
277
				logger.warn("TaxonBase for Fact(Specimen) with factId" + factId + " was not of type Taxon but: " + taxonBase.getClass().getSimpleName());
278
				return null;
279
			} else {
280
				logger.warn("TaxonBase for Fact(Specimen) " + factId + " is null.");
281
				return null;
282
			}		
283
			Set<TaxonDescription> descriptionSet= taxon.getDescriptions();
284
			if (descriptionSet.size() > 0) {
285
				result = descriptionSet.iterator().next(); 
286
			}else{
287
				result = TaxonDescription.NewInstance();
288
				result.setTitleCache(sourceSec.getTitleCache(), true);
289
				taxon.addDescription(result);
290
			}
291
		}else{
292
			result = oldDescription;
293
		}
294
		return result;
295
	}
296
	
297

  
298
	/* (non-Javadoc)
299
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IoStateBase)
300
	 */
301
	@Override
302
	protected boolean doCheck(BerlinModelImportState state){
303
		IOValidator<BerlinModelImportState> validator = new AlgaTerraSpecimenImportValidator();
304
		return validator.validate(state);
305
	}
306
	
307
	/* (non-Javadoc)
308
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
309
	 */
310
	@Override
311
	protected String getTableName() {
312
		return dbTableName;
313
	}
314
	
315
	/* (non-Javadoc)
316
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getPluralString()
317
	 */
318
	@Override
319
	public String getPluralString() {
320
		return pluralString;
321
	}
322

  
323
	/* (non-Javadoc)
324
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
325
	 */
326
	protected boolean isIgnore(BerlinModelImportState state){
327
		return ! ((AlgaTerraImportState)state).getAlgaTerraConfigurator().isDoSpecimen();
328
	}
329
	
330
}
app-import/src/main/java/eu/etaxonomy/cdm/io/algaterra/validation/AlgaTerraSpecimenImportValidator.java
1
// $Id$
2
/**
3
* Copyright (C) 2007 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10

  
11
package eu.etaxonomy.cdm.io.algaterra.validation;
12

  
13
import java.sql.ResultSet;
14
import java.sql.SQLException;
15

  
16
import org.apache.commons.lang.StringUtils;
17
import org.apache.log4j.Logger;
18

  
19
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportConfigurator;
20
import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
21
import eu.etaxonomy.cdm.io.common.IOValidator;
22
import eu.etaxonomy.cdm.io.common.Source;
23

  
24
/**
25
 * @author a.mueller
26
 * @created 17.02.2010
27
 * @version 1.0
28
 */
29
public class AlgaTerraSpecimenImportValidator implements IOValidator<BerlinModelImportState> {
30
	private static final Logger logger = Logger.getLogger(AlgaTerraSpecimenImportValidator.class);
31

  
32
	/* (non-Javadoc)
33
	 * @see eu.etaxonomy.cdm.io.common.IOValidator#validate(eu.etaxonomy.cdm.io.common.IoStateBase)
34
	 */
35
	public boolean validate(BerlinModelImportState state) {
36
		boolean result = true;
37
		BerlinModelImportConfigurator bmiConfig = state.getConfig();
38
//		result &= checkTaxonIsAccepted(bmiConfig);
39
		//result &= checkPartOfJournal(bmiConfig);
40
		System.out.println("Checking for Specimen not yet fully implemented");
41
		return result;
42
	}
43
	
44
	
45
	//******************************** CHECK *************************************************
46
		
47
//		private static boolean checkTaxonIsAccepted(BerlinModelImportConfigurator config){
48
//			try {
49
//				boolean result = true;
50
//				Source source = config.getSource();
51
//				String strQuery = "SELECT emOccurrence.OccurrenceId, PTaxon.StatusFk, Name.FullNameCache, Status.Status, PTaxon.PTRefFk, Reference.RefCache " + 
52
//							" FROM emOccurrence INNER JOIN " +
53
//								" PTaxon ON emOccurrence.PTNameFk = PTaxon.PTNameFk AND emOccurrence.PTRefFk = PTaxon.PTRefFk INNER JOIN " + 
54
//				                " Name ON PTaxon.PTNameFk = Name.NameId INNER JOIN " +
55
//				                " Status ON PTaxon.StatusFk = Status.StatusId LEFT OUTER JOIN " +
56
//				                " Reference ON PTaxon.PTRefFk = Reference.RefId " + 
57
//							" WHERE (PTaxon.StatusFk <> 1)  ";
58
//
59
//				if (StringUtils.isNotBlank(config.getOccurrenceFilter())){
60
//					strQuery += String.format(" AND (%s) ", config.getOccurrenceFilter()) ; 
61
//				}
62
//
63
//				
64
//				ResultSet resulSet = source.getResultSet(strQuery);
65
//				boolean firstRow = true;
66
//				while (resulSet.next()){
67
//					if (firstRow){
68
//						System.out.println("========================================================");
69
//						System.out.println("There are Occurrences for a taxon that is not accepted!");
70
//						System.out.println("========================================================");
71
//					}
72
//					int occurrenceId = resulSet.getInt("OccurrenceId");
73
////					int statusFk = resulSet.getInt("StatusFk");
74
//					String status = resulSet.getString("Status");
75
//					String fullNameCache = resulSet.getString("FullNameCache");
76
//					String ptRefFk = resulSet.getString("PTRefFk");
77
//					String ptRef = resulSet.getString("RefCache");
78
//					
79
//					System.out.println("OccurrenceId:" + occurrenceId + "\n  Status: " + status + 
80
//							"\n  FullNameCache: " + fullNameCache +  "\n  ptRefFk: " + ptRefFk +
81
//							"\n  sec: " + ptRef );
82
//					
83
//					result = firstRow = false;
84
//				}
85
//				
86
//				return result;
87
//			} catch (SQLException e) {
88
//				e.printStackTrace();
89
//				return false;
90
//			}
91
//		}
92

  
93
}

Also available in: Unified diff