Project

General

Profile

« Previous | Next » 

Revision 06cfae86

Added by Katja Luther over 8 years ago

fix #5104 and #5328

View differences:

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