public static SNode setTarget(SNode node, String role, SNode targetNode, boolean child) { if (node != null) { if (child) { SNode oldChild = SNodeOperations.getChild(node, role); if (oldChild != null) { node.removeChild(oldChild); } if (targetNode != null) { SNode targetParent = targetNode.getParent(); if (targetParent != node) { if (targetParent != null) { targetParent.removeChild(targetNode); } node.addChild(role, targetNode); } } } else { SNodeAccessUtil.setReferenceTarget(node, role, targetNode); } } return targetNode; }