+ @Override\r
+ public DeleteResult delete(PolytomousKey key){\r
+ //DeleteResult result = new DeleteResult();\r
+ PolytomousKeyNode root = key.getRoot();\r
+\r
+\r
+ DeleteResult result = isDeletable(key, null);\r
+\r
+ if (result.isOk()){\r
+ try{\r
+ if (root != null){\r
+ nodeService.delete(root.getUuid(), true);\r
+ }\r
+ }catch(Exception e){\r
+ result.addException(e);\r
+ result.setAbort();\r
+ return result;\r
+ }\r
+ try{\r
+ dao.delete(key);\r
+ }catch(Exception e){\r
+ result.addException(e);\r
+ result.setAbort();\r
+ return result;\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ @Override\r
+ public DeleteResult isDeletable(PolytomousKey key, DeleteConfiguratorBase config){\r
+ DeleteResult result = new DeleteResult();\r
+ Set<CdmBase> references = commonService.getReferencingObjectsForDeletion(key);\r
+ if (references != null){\r
+ Iterator<CdmBase> iterator = references.iterator();\r
+ CdmBase ref;\r
+ while (iterator.hasNext()){\r
+ ref = iterator.next();\r
+ if ((ref instanceof PolytomousKeyNode) ){\r
+ PolytomousKeyNode node = HibernateProxyHelper.deproxy(ref, PolytomousKeyNode.class);\r
+ if (!node.getKey().equals(key)){\r
+ String message = "The key is a subkey of " + node.getKey() + ", referenced in node with id: " + node.getId() + ". Please remove the subkey reference first and then delete the key. " ;\r
+ result.addException(new ReferencedObjectUndeletableException(message));\r
+ result.setAbort();\r
+ result.addRelatedObject(ref);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r