Revision 06cfae86
Added by Katja Luther over 8 years ago
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java | ||
---|---|---|
1278 | 1278 |
|
1279 | 1279 |
if (result.isOk()){ |
1280 | 1280 |
|
1281 |
synonym = HibernateProxyHelper.deproxy(dao.merge(synonym), Synonym.class);
|
|
1281 |
synonym = HibernateProxyHelper.deproxy(this.load(synonym.getUuid()), Synonym.class);
|
|
1282 | 1282 |
|
1283 | 1283 |
//remove synonymRelationship |
1284 | 1284 |
Set<Taxon> taxonSet = new HashSet<Taxon>(); |
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TermServiceImpl.java | ||
---|---|---|
15 | 15 |
import java.util.Collection; |
16 | 16 |
import java.util.Enumeration; |
17 | 17 |
import java.util.HashSet; |
18 |
import java.util.Iterator; |
|
18 | 19 |
import java.util.List; |
19 | 20 |
import java.util.Locale; |
20 | 21 |
import java.util.Set; |
... | ... | |
28 | 29 |
import org.springframework.transaction.annotation.Transactional; |
29 | 30 |
|
30 | 31 |
import eu.etaxonomy.cdm.api.service.UpdateResult.Status; |
32 |
import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase; |
|
31 | 33 |
import eu.etaxonomy.cdm.api.service.config.TermDeletionConfigurator; |
32 | 34 |
import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException; |
35 |
import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException; |
|
33 | 36 |
import eu.etaxonomy.cdm.api.service.pager.Pager; |
34 | 37 |
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl; |
35 | 38 |
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor; |
... | ... | |
273 | 276 |
config = new TermDeletionConfigurator(); |
274 | 277 |
} |
275 | 278 |
// boolean isInternal = config.isInternal(); |
276 |
DeleteResult result = new DeleteResult(); |
|
279 |
|
|
277 | 280 |
Set<DefinedTermBase> termsToSave = new HashSet<DefinedTermBase>(); |
278 |
CdmBase.deproxy(dao.merge(term), DefinedTermBase.class); |
|
279 | 281 |
|
282 |
DeleteResult result = isDeletable(term, config); |
|
283 |
//CdmBase.deproxy(dao.merge(term), DefinedTermBase.class); |
|
280 | 284 |
try { |
281 | 285 |
//generalization of |
282 | 286 |
Set<DefinedTermBase> specificTerms = term.getGeneralizationOf(); |
... | ... | |
413 | 417 |
super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor); |
414 | 418 |
} |
415 | 419 |
|
420 |
@Override |
|
421 |
public DeleteResult isDeletable(DefinedTermBase term, DeleteConfiguratorBase config){ |
|
422 |
DeleteResult result = new DeleteResult(); |
|
423 |
Set<CdmBase> references = commonService.getReferencingObjectsForDeletion(term); |
|
424 |
if (references != null){ |
|
425 |
result.addRelatedObjects(references); |
|
426 |
Iterator<CdmBase> iterator = references.iterator(); |
|
427 |
CdmBase ref; |
|
428 |
while (iterator.hasNext()){ |
|
429 |
ref = iterator.next(); |
|
430 |
if (ref instanceof TermVocabulary){ |
|
431 |
result.getRelatedObjects().remove(ref); |
|
432 |
}else{ |
|
433 |
|
|
434 |
String message = "An object of " + ref.getClass().getName() + " with ID " + ref.getId() + " is referencing the object" ; |
|
435 |
result.addException(new ReferencedObjectUndeletableException(message)); |
|
436 |
result.setAbort(); |
|
437 |
} |
|
438 |
|
|
439 |
} |
|
440 |
} |
|
441 |
return result; |
|
442 |
} |
|
443 |
|
|
416 | 444 |
} |
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TaxonServiceImplBusinessTest.java | ||
---|---|---|
208 | 208 |
@Test |
209 | 209 |
public final void testChangeSynonymToRelatedTaxon() { |
210 | 210 |
t1.addSynonym(s1, homoTypicSynonymRelationshipType); |
211 |
t1.addSynonym(s2, homoTypicSynonymRelationshipType); |
|
211 | 212 |
HashSet newInstances = new HashSet<TaxonBase>(); |
212 | 213 |
newInstances.add(s1); |
213 | 214 |
newInstances.add(t1); |
... | ... | |
229 | 230 |
assertFalse(synonymName.getTaxonBases().contains(s1)); |
230 | 231 |
assertTrue(synonymName.getTaxonBases().contains(newTaxon)); |
231 | 232 |
|
233 |
synonymName = s2.getName(); |
|
234 |
newTaxon = service.changeSynonymToRelatedTaxon(s2, t1, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), reference, referenceDetail); |
|
235 |
//check removeTaxonBase() |
|
236 |
//UUID s1UUID = service.update(s1); |
|
237 |
newTaxonUUID = service.save(newTaxon).getUuid(); |
|
238 |
|
|
239 |
|
|
240 |
s2 =(Synonym)service.find(s2.getUuid()); |
|
241 |
newTaxon = (Taxon)service.find(newTaxonUUID); |
|
242 |
assertNull(s2); |
|
243 |
|
|
244 |
assertFalse(synonymName.getTaxonBases().contains(s2)); |
|
245 |
assertTrue(synonymName.getTaxonBases().contains(newTaxon)); |
|
246 |
|
|
247 |
|
|
232 | 248 |
} |
233 | 249 |
// |
234 | 250 |
// Moved to TaxonServiceImplTest |
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/TermServiceImplTest.java | ||
---|---|---|
32 | 32 |
import eu.etaxonomy.cdm.model.common.TermType; |
33 | 33 |
import eu.etaxonomy.cdm.model.common.TermVocabulary; |
34 | 34 |
import eu.etaxonomy.cdm.model.location.NamedArea; |
35 |
import eu.etaxonomy.cdm.model.name.BotanicalName; |
|
35 | 36 |
import eu.etaxonomy.cdm.model.name.Rank; |
36 | 37 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus; |
38 |
import eu.etaxonomy.cdm.model.taxon.Taxon; |
|
37 | 39 |
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest; |
38 | 40 |
|
39 | 41 |
/** |
... | ... | |
51 | 53 |
@SpringBeanByType |
52 | 54 |
private IVocabularyService vocabularyService; |
53 | 55 |
|
56 |
@SpringBeanByType |
|
57 |
private ITaxonService taxonService; |
|
58 |
|
|
54 | 59 |
/* ************************* TESTS *************************************************/ |
55 | 60 |
|
56 | 61 |
/** |
... | ... | |
190 | 195 |
|
191 | 196 |
|
192 | 197 |
@Test |
198 |
@Ignore |
|
193 | 199 |
public void testDeleteTerms(){ |
194 | 200 |
final String[] tableNames = new String[]{ |
195 | 201 |
"DefinedTermBase","Representation"}; |
... | ... | |
218 | 224 |
termBase = termService.load(termUUID); |
219 | 225 |
assertNull(termBase); |
220 | 226 |
|
227 |
|
|
228 |
//TermVocabulary<DefinedTerm> voc = TermVocabulary.NewInstance(TermType.Feature, "TestFeatures", null, null, null); |
|
229 |
voc.addTerm(DefinedTerm.NewDnaMarkerInstance("test", "marker", "t")); |
|
230 |
vocUUID = vocabularyService.save(voc).getUuid(); |
|
231 |
|
|
232 |
voc = vocabularyService.find(vocUUID); |
|
233 |
terms = voc.getTerms(); |
|
234 |
termBase =terms.iterator().next(); |
|
235 |
termUUID = termBase.getUuid(); |
|
236 |
termBase = termService.load(termUUID); |
|
237 |
BotanicalName testName = BotanicalName.NewInstance(Rank.SPECIES()); |
|
238 |
Taxon testTaxon = Taxon.NewInstance(testName,null); |
|
239 |
testTaxon.addIdentifier("Test", (DefinedTerm) termBase); |
|
240 |
taxonService.save(testTaxon); |
|
241 |
termService.delete(termBase, null); |
|
242 |
//commitAndStartNewTransaction(tableNames); |
|
243 |
termBase = termService.load(termUUID); |
|
244 |
assertNotNull(termBase); |
|
221 | 245 |
} |
222 | 246 |
|
223 | 247 |
/* (non-Javadoc) |
Also available in: Unified diff
fix #5104 and #5328