Revision 06cfae86
Added by Katja Luther over 8 years ago
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 |
} |
Also available in: Unified diff
fix #5104 and #5328