private void deleteComponent( final ComponentIdentifier id, final ComponentEventQueue ceq, final boolean deleteOrphans) { final NCSComponent component = getComponent(id); if (component == null) { throw new WebApplicationException(Status.BAD_REQUEST); } final Set<NCSComponent> parentComponents = component.getParentComponents(); final Set<ComponentIdentifier> childrenIdentifiers = getIdentifiers(component.getSubcomponents()); // first, we deal with orphans if (deleteOrphans) { for (final ComponentIdentifier subId : childrenIdentifiers) { handleOrphanedComponents(component, subId, ceq, deleteOrphans); } } // first, we remove this component from each of its parents for (final NCSComponent parent : parentComponents) { parent.getSubcomponents().remove(component); m_componentDao.update(parent); } // then we delete this component component.setSubcomponents(EMPTY_COMPONENT_SET); m_componentDao.delete(component); // and any events or alarms depending on it deleteEvents(id.getForeignSource(), id.getForeignId()); deleteAlarms(id.getForeignSource(), id.getForeignId()); // alert that the component is deleted ceq.componentDeleted(getIdentifier(component)); // then alert about the parents sendUpdateEvents(ceq, getIdentifiers(parentComponents)); }
private NCSComponent getComponent(final ComponentIdentifier id) { return m_componentDao.findByTypeAndForeignIdentity( id.getType(), id.getForeignSource(), id.getForeignId()); }