package org.rhq.enterprise.server.resource.metadata;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.alert.AlertDefinition;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.criteria.AlertDefinitionCriteria;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.enterprise.server.alert.AlertDefinitionManagerLocal;
import org.rhq.enterprise.server.alert.AlertTemplateManagerLocal;
@Stateless
public class AlertMetadataManagerBean implements AlertMetadataManagerLocal {
private static final Log log = LogFactory.getLog(AlertMetadataManagerBean.class);
@EJB
private AlertDefinitionManagerLocal alertDefinitionMgr;
@EJB
private AlertTemplateManagerLocal alertTemplateMgr;
@Override
public void deleteAlertTemplates(Subject subject, ResourceType resourceType) {
log.debug("Deleting alert templates for " + resourceType);
AlertDefinitionCriteria criteria = new AlertDefinitionCriteria();
criteria.addFilterAlertTemplateResourceTypeId(resourceType.getId());
criteria.clearPaging();//disable paging as the code assumes all the results will be returned.
List<AlertDefinition> templates = alertDefinitionMgr.findAlertDefinitionsByCriteria(subject, criteria);
Integer[] templateIds = new Integer[templates.size()];
int i = 0;
for (AlertDefinition template : templates) {
templateIds[i++] = template.getId();
}
// Alert definitions associated with individual resources and with groups
// are deleted as part of resource deletion. This commit adds support for
// templates which are alert definitions associated with the resource
// type
alertTemplateMgr.removeAlertTemplates(subject, templateIds);
alertDefinitionMgr.purgeUnusedAlertDefinitions();
}
}