/** Replaces a node with another, preserving attributes */ public static SNode replaceWithAnother(@NotNull SNode node, SNode replacer) { SNode nodeParent = node.getParent(); if (nodeParent == null) { SModel model = node.getModel(); if (model != null) { node.delete(); model.addRootNode(replacer); } return replacer; } SContainmentLink role = node.getContainmentLink(); assert role != null; if (replacer != null) { // old and new child can have the same node Id // thus it is important to remove old child first SNode anchor = node.getNextSibling(); nodeParent.removeChild(node); SNode replacerParent = replacer.getParent(); if (replacerParent != null) { replacerParent.removeChild(replacer); } nodeParent.insertChildBefore(role, replacer, anchor); } else { nodeParent.removeChild(node); } return replacer; }
/** Delete an entity, and its brain if there is one. Do not ask directly this method. */ public void delete() { // System.out.println("Actually deleting " + this); if (deleted) return; deleted = true; if (myBrain != null) { if (myBrain instanceof AbstractAgent) getStructure().getAgent().doKillAgent((AbstractAgent) myBrain); else myBrain.delete(); } super.delete(); }