import java.util.Collection;
import java.util.Enumeration;
import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import org.springframework.transaction.annotation.Transactional;
import eu.etaxonomy.cdm.api.service.UpdateResult.Status;
+import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
import eu.etaxonomy.cdm.api.service.config.TermDeletionConfigurator;
import eu.etaxonomy.cdm.api.service.exception.DataChangeNoRollbackException;
+import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
import eu.etaxonomy.cdm.api.service.pager.Pager;
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
* @see eu.etaxonomy.cdm.api.service.ITermService#listByTermType(eu.etaxonomy.cdm.model.common.TermType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
*/
@Override
- public List<DefinedTermBase<?>> listByTermType(TermType termType, Integer limit, Integer start,
+ public <T extends DefinedTermBase> List<T> listByTermType(TermType termType, Integer limit, Integer start,
List<OrderHint> orderHints, List<String> propertyPaths) {
return dao.listByTermType(termType, limit, start, orderHints, propertyPaths);
}
config = new TermDeletionConfigurator();
}
// boolean isInternal = config.isInternal();
- DeleteResult result = new DeleteResult();
+
Set<DefinedTermBase> termsToSave = new HashSet<DefinedTermBase>();
- CdmBase.deproxy(dao.merge(term), DefinedTermBase.class);
+ DeleteResult result = isDeletable(term, config);
+ //CdmBase.deproxy(dao.merge(term), DefinedTermBase.class);
try {
//generalization of
Set<DefinedTermBase> specificTerms = term.getGeneralizationOf();
super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor);
}
+ @Override
+ public DeleteResult isDeletable(DefinedTermBase term, DeleteConfiguratorBase config){
+ DeleteResult result = new DeleteResult();
+ Set<CdmBase> references = commonService.getReferencingObjectsForDeletion(term);
+ if (references != null){
+ result.addRelatedObjects(references);
+ Iterator<CdmBase> iterator = references.iterator();
+ CdmBase ref;
+ while (iterator.hasNext()){
+ ref = iterator.next();
+ if (ref instanceof TermVocabulary){
+ result.getRelatedObjects().remove(ref);
+ }else{
+
+ String message = "An object of " + ref.getClass().getName() + " with ID " + ref.getId() + " is referencing the object" ;
+ result.addException(new ReferencedObjectUndeletableException(message));
+ result.setAbort();
+ }
+
+ }
+ }
+ return result;
+ }
+
}