Project

General

Profile

« Previous | Next » 

Revision 892efc69

Added by Andreas Kohlbecker almost 14 years ago

merging /branches/cdmlib/SPRINT-Chichorieae1/ to trunk

View differences:

cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/berlinModel/in/BerlinModelTaxonNameRelationImport.java
40 40
import eu.etaxonomy.cdm.io.common.IOValidator;
41 41
import eu.etaxonomy.cdm.io.common.ResultSetPartitioner;
42 42
import eu.etaxonomy.cdm.model.agent.Person;
43
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
43 44
import eu.etaxonomy.cdm.model.common.CdmBase;
44 45
import eu.etaxonomy.cdm.model.name.BotanicalName;
45 46
import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
46 47
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
47 48
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
49
import eu.etaxonomy.cdm.model.name.NonViralName;
48 50
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
49 51
import eu.etaxonomy.cdm.model.reference.ReferenceBase;
50 52
import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
......
72 74
	 */
73 75
	@Override
74 76
	protected String getRecordQuery(BerlinModelImportConfigurator config) {
75
		String strQuery = 
76
			" SELECT RelName.*, FromName.nameId as name1Id, ToName.nameId as name2Id, RefDetail.Details " + 
77
			" FROM Name as FromName INNER JOIN " +
78
              	" RelName ON FromName.NameId = RelName.NameFk1 INNER JOIN " +
79
              	" Name AS ToName ON RelName.NameFk2 = ToName.NameId LEFT OUTER JOIN "+
80
              	" RefDetail ON RelName.RefDetailFK = RefDetail.RefDetailId " + 
77
			String strQuery = 
78
					" SELECT RelName.*, FromName.nameId as name1Id, ToName.nameId as name2Id, RefDetail.Details " + 
79
					" FROM Name as FromName INNER JOIN " +
80
                      	" RelName ON FromName.NameId = RelName.NameFk1 INNER JOIN " +
81
                      	" Name AS ToName ON RelName.NameFk2 = ToName.NameId LEFT OUTER JOIN "+
82
                      	" RefDetail ON RelName.RefDetailFK = RefDetail.RefDetailId " + 
81 83
            " WHERE (RelNameId IN ("+ID_LIST_TOKEN +"))";
82 84
		return strQuery;
83 85
	}
......
93 95
		Map<String, ReferenceBase> biblioRefMap = partitioner.getObjectMap(BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE);
94 96
		Map<String, ReferenceBase> nomRefMap = partitioner.getObjectMap(BerlinModelReferenceImport.NOM_REFERENCE_NAMESPACE);
95 97

  
96
		
98
			
97 99
		ResultSet rs = partitioner.getResultSet();
98 100
		try {
99 101
			
......
121 123
					//get nomRef
122 124
					citation = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, 
123 125
							relRefFk);
124
				}
126
					}
125 127
				
126 128
				//TODO (preliminaryFlag = true testen
127 129
				String microcitation = details;
128 130
				String rule = null;  
129 131
				
130 132
				if (nameFrom != null && nameTo != null){
131
					if (relQualifierFk == NAME_REL_IS_BASIONYM_FOR){
132
						nameTo.addBasionym(nameFrom, citation, microcitation, rule);
133
					}else if (relQualifierFk == NAME_REL_IS_LATER_HOMONYM_OF){
134
						nameFrom.addRelationshipToName(nameTo, NameRelationshipType.LATER_HOMONYM(), citation, microcitation, rule) ;
135
					}else if (relQualifierFk == NAME_REL_IS_REPLACED_SYNONYM_FOR){
136
						nameFrom.addRelationshipToName(nameTo, NameRelationshipType.REPLACED_SYNONYM(), citation, microcitation, rule) ;
137
					}else if (relQualifierFk == NAME_REL_HAS_SAME_TYPE_AS){
138
						nameTo.getHomotypicalGroup().merge(nameFrom.getHomotypicalGroup());//nameFrom.addRelationshipToName(nameTo, NameRelationshipType.REPLACED_SYNONYM(), rule) ;
139
					}else if (relQualifierFk == NAME_REL_IS_TYPE_OF || relQualifierFk == NAME_REL_IS_REJECTED_TYPE_OF ||  relQualifierFk == NAME_REL_IS_CONSERVED_TYPE_OF || relQualifierFk == NAME_REL_IS_LECTOTYPE_OF || relQualifierFk == NAME_REL_TYPE_NOT_DESIGNATED ){
140
						boolean isRejectedType = (relQualifierFk == NAME_REL_IS_REJECTED_TYPE_OF);
141
						boolean isConservedType = (relQualifierFk == NAME_REL_IS_CONSERVED_TYPE_OF);
142
						boolean isLectoType = (relQualifierFk == NAME_REL_IS_LECTOTYPE_OF);
143
						boolean isNotDesignated = (relQualifierFk == NAME_REL_TYPE_NOT_DESIGNATED);
144
						
145
						NameTypeDesignationStatus status = null;
146
						String originalNameString = null;
147
						//TODO addToAllNames true or false?
148
						boolean addToAllNames = false;
149
						if (config.getNameTypeDesignationStatusMethod() != null){
150
							Method method = config.getNameTypeDesignationStatusMethod();
151
							method.setAccessible(true);
152
							try {
153
								status = (NameTypeDesignationStatus)method.invoke(null, notes);
154
								nameTo.addNameTypeDesignation(nameFrom, citation, microcitation, originalNameString, status, addToAllNames);
155
							} catch (Exception e) {
156
								throw new RuntimeException(e);
157
							}
158
						}else{
159
							if (isLectoType){
160
								status = NameTypeDesignationStatus.LECTOTYPE();
161
							}
162
							nameTo.addNameTypeDesignation(nameFrom, citation, microcitation, originalNameString, status, isRejectedType, isConservedType, /*isLectoType,*/ isNotDesignated, addToAllNames);
163
						}
164
						
165
					}else if (relQualifierFk == NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF){
166
						nameFrom.addRelationshipToName(nameTo, NameRelationshipType.ORTHOGRAPHIC_VARIANT(), citation, microcitation, rule) ;
167
					}else if (relQualifierFk == NAME_REL_IS_FIRST_PARENT_OF || relQualifierFk == NAME_REL_IS_SECOND_PARENT_OF || relQualifierFk == NAME_REL_IS_FEMALE_PARENT_OF || relQualifierFk == NAME_REL_IS_MALE_PARENT_OF){
168
						//HybridRelationships
169
						if (! (nameTo instanceof BotanicalName) || ! (nameFrom instanceof BotanicalName)){
170
							logger.warn("HybridrelationshipNames ("+name1Id +"," + name2Id +") must be of type BotanicalName but are not");
171
							success = false;
172
						}
173
						try {
174
							HybridRelationshipType hybridRelType = BerlinModelTransformer.relNameId2HybridRel(relQualifierFk);
175
							BotanicalName parent = (BotanicalName)nameFrom;
176
							BotanicalName child = (BotanicalName)nameTo;
177
							
178
							//TODO bug when trying to persist
179
							//parent.addHybridChild(child, hybridRelType, rule);
180
							logger.warn("HybridRelationships not yet implemented");
181
							
182
						} catch (UnknownCdmTypeException e) {
183
							logger.warn(e);
184
							success = false;
185
						}
186
					}else {
187
						//TODO
188
						Method method = config.getNamerelationshipTypeMethod();
189
						if (method != null){
190
							try {
191
								method.invoke(null, relQualifierFk, nameTo, nameFrom);
192
							} catch (Exception e) {
193
								logger.error(e.getMessage());
194
								logger.warn("NameRelationship could not be imported");
195
								success = false;
196
							} 
197
						}else{
198
							logger.warn("NameRelationShipType " + relQualifierFk + " not yet implemented");
199
							success = false;
200
						}
201
					}
133
					success = handleNameRelationship(success, config, name1Id, name2Id,
134
							relQualifierFk, notes, nameFrom, nameTo, citation,
135
							microcitation, rule);
202 136
					nameToSave.add(nameFrom);
203 137
					
204 138
					//TODO
......
215 149
					success = false;
216 150
				}
217 151
			}
152
			
153
			
218 154
			partitioner.startDoSave();
219 155
			getNameService().save(nameToSave);
220 156
			
......
225 161
		}
226 162
	}
227 163

  
164
	/**
165
	 * @param success
166
	 * @param config
167
	 * @param name1Id
168
	 * @param name2Id
169
	 * @param relQualifierFk
170
	 * @param notes
171
	 * @param nameFrom
172
	 * @param nameTo
173
	 * @param citation
174
	 * @param microcitation
175
	 * @param rule
176
	 * @return
177
	 */
178
	private boolean handleNameRelationship(boolean success,
179
				BerlinModelImportConfigurator config, int name1Id, int name2Id,
180
				int relQualifierFk, String notes, TaxonNameBase nameFrom,
181
				TaxonNameBase nameTo, ReferenceBase<?> citation,
182
				String microcitation, String rule) {
183
		AnnotatableEntity nameRelationship = null;
184
		if (relQualifierFk == NAME_REL_IS_BASIONYM_FOR){
185
			nameRelationship = nameTo.addBasionym(nameFrom, citation, microcitation, rule);
186
		}else if (relQualifierFk == NAME_REL_IS_LATER_HOMONYM_OF){
187
			nameRelationship = nameFrom.addRelationshipToName(nameTo, NameRelationshipType.LATER_HOMONYM(), citation, microcitation, rule) ;
188
		}else if (relQualifierFk == NAME_REL_IS_REPLACED_SYNONYM_FOR){
189
			nameRelationship = nameFrom.addRelationshipToName(nameTo, NameRelationshipType.REPLACED_SYNONYM(), citation, microcitation, rule) ;
190
		}else if (relQualifierFk == NAME_REL_HAS_SAME_TYPE_AS){
191
			nameTo.getHomotypicalGroup().merge(nameFrom.getHomotypicalGroup());
192
		}else if (relQualifierFk == NAME_REL_IS_TYPE_OF || relQualifierFk == NAME_REL_IS_REJECTED_TYPE_OF ||  relQualifierFk == NAME_REL_IS_CONSERVED_TYPE_OF || relQualifierFk == NAME_REL_IS_LECTOTYPE_OF || relQualifierFk == NAME_REL_TYPE_NOT_DESIGNATED ){
193
			boolean isRejectedType = (relQualifierFk == NAME_REL_IS_REJECTED_TYPE_OF);
194
			boolean isConservedType = (relQualifierFk == NAME_REL_IS_CONSERVED_TYPE_OF);
195
			boolean isLectoType = (relQualifierFk == NAME_REL_IS_LECTOTYPE_OF);
196
			boolean isNotDesignated = (relQualifierFk == NAME_REL_TYPE_NOT_DESIGNATED);
197
			
198
			NameTypeDesignationStatus status = null;
199
			String originalNameString = null;
200
			//TODO addToAllNames true or false?
201
			boolean addToAllNames = false;
202
			if (config.getNameTypeDesignationStatusMethod() != null){
203
				Method method = config.getNameTypeDesignationStatusMethod();
204
				method.setAccessible(true);
205
				try {
206
					status = (NameTypeDesignationStatus)method.invoke(null, notes);
207
					nameRelationship = nameTo.addNameTypeDesignation(nameFrom, citation, microcitation, originalNameString, status, addToAllNames);
208
				} catch (Exception e) {
209
					throw new RuntimeException(e);
210
				}
211
			}else{
212
				if (isLectoType){
213
					status = NameTypeDesignationStatus.LECTOTYPE();
214
				}
215
				nameRelationship = nameTo.addNameTypeDesignation(nameFrom, citation, microcitation, originalNameString, status, isRejectedType, isConservedType, /*isLectoType,*/ isNotDesignated, addToAllNames);
216
			}
217
			
218
		}else if (relQualifierFk == NAME_REL_IS_ORTHOGRAPHIC_VARIANT_OF){
219
			nameRelationship = nameFrom.addRelationshipToName(nameTo, NameRelationshipType.ORTHOGRAPHIC_VARIANT(), citation, microcitation, rule) ;
220
		}else if (relQualifierFk == NAME_REL_IS_FIRST_PARENT_OF || relQualifierFk == NAME_REL_IS_SECOND_PARENT_OF || relQualifierFk == NAME_REL_IS_FEMALE_PARENT_OF || relQualifierFk == NAME_REL_IS_MALE_PARENT_OF){
221
			//HybridRelationships
222
			if (! (nameTo instanceof NonViralName ) || ! (nameFrom instanceof NonViralName)){
223
				logger.warn("HybridrelationshipNames ("+name1Id +"," + name2Id +") must be of type NonViralNameName but are not");
224
				success = false;
225
			}
226
			try {
227
				HybridRelationshipType hybridRelType = BerlinModelTransformer.relNameId2HybridRel(relQualifierFk);
228
				BotanicalName parent = (BotanicalName)nameFrom;
229
				BotanicalName child = (BotanicalName)nameTo;
230
				
231
				nameRelationship = parent.addHybridChild(child, hybridRelType, rule);
232
				
233
			} catch (UnknownCdmTypeException e) {
234
				logger.warn(e);
235
				success = false;
236
			}
237
		}else {
238
			//TODO
239
			Method method = config.getNamerelationshipTypeMethod();
240
			if (method != null){
241
				try {
242
					method.invoke(null, relQualifierFk, nameTo, nameFrom);
243
				} catch (Exception e) {
244
					logger.error(e.getMessage());
245
					logger.warn("NameRelationship could not be imported");
246
					success = false;
247
				} 
248
			}else{
249
				logger.warn("NameRelationShipType " + relQualifierFk + " not yet implemented");
250
				success = false;
251
			}
252
		}
253
		doNotes(nameRelationship, notes);
254
		return success;
255
	}
256

  
228 257
	/* (non-Javadoc)
229 258
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.IPartitionedIO#getRelatedObjectsForPartition(java.sql.ResultSet)
230 259
	 */
......
243 272
				handleForeignKey(rs, nameIdSet, "name2Id");
244 273
				handleForeignKey(rs, referenceIdSet, "RefFk");
245 274
				handleForeignKey(rs, refDetailIdSet, "RefDetailFk");
246
			}
247
			
275
	}
276
	
248 277
			//name map
249 278
			nameSpace = BerlinModelTaxonNameImport.NAMESPACE;
250 279
			cdmClass = TaxonNameBase.class;
......
265 294
			idSet = referenceIdSet;
266 295
			Map<String, ReferenceBase> biblioReferenceMap = (Map<String, ReferenceBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
267 296
			result.put(nameSpace, biblioReferenceMap);
268
			
269
			
297
	
270 298
			//nom refDetail map
271 299
			nameSpace = BerlinModelRefDetailImport.NOM_REFDETAIL_NAMESPACE;
272 300
			cdmClass = ReferenceBase.class;
......
283 311

  
284 312
		} catch (SQLException e) {
285 313
			throw new RuntimeException(e);
286
		}
314
				}
287 315
		return result;
288 316
	}
289
	
317
				
290 318
	/* (non-Javadoc)
291 319
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator)
292 320
	 */
......
295 323
		IOValidator<BerlinModelImportState> validator = new BerlinModelTaxonNameRelationImportValidator();
296 324
		return validator.validate(state);
297 325
	}
298
	
299 326

  
300 327
	/* (non-Javadoc)
301 328
	 * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getTableName()
......
312 339
	@Override
313 340
	public String getPluralString() {
314 341
		return pluralString;
315
	}
316
	
342
			}
343
			
317 344
	/* (non-Javadoc)
318 345
	 * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
319 346
	 */
320 347
	protected boolean isIgnore(BerlinModelImportState state){
321 348
		return ! state.getConfig().isDoRelNames();
322
	}
349
		}
323 350

  
324 351
	
325 352
}

Also available in: Unified diff