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);
}
@Override
public Language getLanguageByIso(String iso639) {
- return dao.getLanguageByIso(iso639);
+ return dao.getLanguageByIso(iso639);
+ }
+
+ @Override
+ public Language getLanguageByLabel(String label) {
+ return Language.getLanguageByLabel(label);
}
@Override
return result;
}
+ @Override
+ @Deprecated
+ @Transactional(readOnly = false)
+ public DeleteResult delete(UUID termUuid){
+ DeleteResult result = new DeleteResult();
+
+ TermDeletionConfigurator defaultConfig = new TermDeletionConfigurator();
+ result = delete(dao.load(termUuid), defaultConfig);
+ return result;
+ }
+
@Override
public DeleteResult delete(DefinedTermBase term, TermDeletionConfigurator config){
if (config == null){
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();
return result;
}
+ @Override
+ @Transactional(readOnly = false)
+ public DeleteResult delete(UUID termUuid, TermDeletionConfigurator config){
+ return delete(dao.load(termUuid), config);
+ }
+
@Override
@Transactional(readOnly = false)
public void updateTitleCache(Class<? extends DefinedTermBase> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<DefinedTermBase> cacheStrategy, IProgressMonitor monitor) {
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;
+ }
+
}