@Override public void addSubattribute(Attribute attribute) { AttributeImpl attributeImpl = (AttributeImpl) attribute; // The attribute is bound and has to be removed from its parent (informationobject or parent // attribute if (attributeImpl.getInformationObject() != null || attributeImpl.getParentAttribute() != null) { if (attributeImpl.getParentAttribute() != null) { attributeImpl.getParentAttribute().removeSubattribute(attributeImpl); } else { attributeImpl.getInformationObject().removeAttribute(attributeImpl); } } attributeImpl.setParentAttribute(this); int index = Collections.binarySearch(subattributes, attributeImpl); if (index < 0) { subattributes.add(-index - 1, attributeImpl); } else { subattributes.add(index, attributeImpl); } if (parentAttribute != null) { ((AttributeImpl) parentAttribute).resortAttributes(); } if (informationObject != null) { ((InformationObjectImpl) informationObject).resortAttributes(); } }
private void resortAttributes() { Collections.sort(subattributes); if (parentAttribute != null) { ((AttributeImpl) parentAttribute).resortAttributes(); } if (informationObject != null) { ((InformationObjectImpl) informationObject).resortAttributes(); } }
@Override public void removeSubattribute(Attribute attribute) { AttributeImpl attributeImpl = (AttributeImpl) attribute; attributeImpl.setParentAttribute(null); subattributes.remove(attribute); }