/* * RHQ Management Platform * Copyright (C) 2005-2011 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.core.domain.criteria; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import org.rhq.core.domain.alert.Alert; import org.rhq.core.domain.alert.AlertPriority; import org.rhq.core.domain.common.EntityContext; import org.rhq.core.domain.util.CriteriaUtils; import org.rhq.core.domain.util.PageOrdering; /** * @author Joseph Marques */ @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @SuppressWarnings({ "unused", "FieldCanBeLocal" }) public class AlertCriteria extends Criteria { private static final long serialVersionUID = 4L; // sort fields from the Alert itself public static final String SORT_FIELD_CTIME = "ctime"; // sort fields from the Alert's AlertDefinition public static final String SORT_FIELD_NAME = "name"; public static final String SORT_FIELD_PRIORITY = "priority"; public static final String SORT_FIELD_RESOURCE_ID = "resourceId"; public static final String SORT_FIELD_RESOURCE_NAME = "resourceName"; private String filterTriggeredOperationName; // requires overrides private Long filterStartTime; // requires overrides private Long filterEndTime; // requires overrides private String filterName; // requires overrides private String filterDescription; // requires overrides private List<AlertPriority> filterPriorities; // requires overrides private String filterResourceTypeId; // requires overrides private String filterResourceTypeName; // requires overrides private String filterPluginName; // requires overrides private List<Integer> filterResourceIds; // requires overrides private List<Integer> filterResourceGroupIds; // requires overrides private List<Integer> filterAlertDefinitionIds; // requires overrides private List<Integer> filterGroupAlertDefinitionIds; // requires overrides private String filterAcknowledgingSubject; private NonBindingOverrideFilter filterUnacknowledgedOnly; // requires overrides private NonBindingOverrideFilter filterRecovered; // requires overrides, filters recovered private List<Integer> filterRecoveryIds; // requires overrides private boolean fetchAlertDefinition; private boolean fetchConditionLogs; private boolean fetchNotificationLogs; private boolean fetchRecoveryAlertDefinition; private PageOrdering sortCtime; private PageOrdering sortName; // requires sort override private PageOrdering sortPriority; // requires sort override private PageOrdering sortResourceId; // requires sort override private PageOrdering sortResourceName; // requires sort override public AlertCriteria() { filterOverrides.put("triggeredOperationName", "triggeredOperation like ?"); filterOverrides.put("startTime", "ctime >= ?"); filterOverrides.put("endTime", "ctime <= ?"); filterOverrides.put("name", "alertDefinition.name like ?"); filterOverrides.put("description", "alertDefinition.description like ?"); filterOverrides.put("priorities", "alertDefinition.priority IN ( ? )"); filterOverrides.put("resourceTypeId", "alertDefinition.resource.resourceType.id = ?"); filterOverrides.put("resourceTypeName", "alertDefinition.resource.resourceType.name like ?"); filterOverrides.put("pluginName", "alertDefinition.resource.resourceType.plugin like ?"); filterOverrides.put("resourceIds", "alertDefinition.resource.id IN ( ? )"); filterOverrides.put("resourceGroupIds", "alertDefinition.resource.id IN " // + "( SELECT res.id " // + " FROM ResourceGroup rg " // + " JOIN rg.explicitResources res " // + " WHERE rg.id = ? )"); filterOverrides.put("alertDefinitionIds", "alertDefinition.id IN ( ? )"); filterOverrides.put("groupAlertDefinitionIds", "alertDefinition.groupAlertDefinition.id IN ( ? )"); filterOverrides.put("unacknowledgedOnly", "acknowledgingSubject IS NULL"); filterOverrides.put("recoveryIds", "recoveryId IN ( ? )"); filterOverrides.put("recovered", "recoveryTime < 0"); sortOverrides.put(SORT_FIELD_NAME, "alertDefinition.name"); sortOverrides.put(SORT_FIELD_PRIORITY, "alertDefinition.priority"); sortOverrides.put(SORT_FIELD_RESOURCE_ID, "alertDefinition.resource.id"); sortOverrides.put(SORT_FIELD_RESOURCE_NAME, "alertDefinition.resource.name"); fetchConditionLogs = true; // fetch condition logs by default } @Override public Class<Alert> getPersistentClass() { return Alert.class; } public void addFilterTriggeredOperationName(String filterTriggeredOperationName) { this.filterTriggeredOperationName = filterTriggeredOperationName; } public void addFilterStartTime(Long filterStartTime) { this.filterStartTime = filterStartTime; } public void addFilterEndTime(Long filterEndTime) { this.filterEndTime = filterEndTime; } public void addFilterName(String filterName) { this.filterName = filterName; } public void addFilterDescription(String filterDescription) { this.filterDescription = filterDescription; } public void addFilterPriorities(AlertPriority... filterPriorities) { this.filterPriorities = CriteriaUtils.getListIgnoringNulls(filterPriorities); } public void addFilterResourceTypeId(String filterResourceTypeId) { this.filterResourceTypeId = filterResourceTypeId; } public void addFilterResourceTypeName(String filterResourceTypeName) { this.filterResourceTypeName = filterResourceTypeName; } public void addFilterPluginName(String filterPluginName) { this.filterPluginName = filterPluginName; } public void addFilterEntityContext(EntityContext filterEntityContext) { if (filterEntityContext.getType() == EntityContext.Type.Resource) { addFilterResourceIds(filterEntityContext.getResourceId()); } else if (filterEntityContext.getType() == EntityContext.Type.ResourceGroup) { addFilterResourceGroupIds(filterEntityContext.getGroupId()); } else { // only add filters if category was resource or group } } public void addFilterResourceIds(Integer... filterResourceIds) { this.filterResourceIds = CriteriaUtils.getListIgnoringNulls(filterResourceIds); } public void addFilterResourceGroupIds(Integer... filterResourceGroupIds) { this.filterResourceGroupIds = CriteriaUtils.getListIgnoringNulls(filterResourceGroupIds); } public void addFilterAlertDefinitionIds(Integer... filterAlertDefinitionIds) { this.filterAlertDefinitionIds = CriteriaUtils.getListIgnoringNulls(filterAlertDefinitionIds); } public void addFilterGroupAlertDefinitionIds(Integer... filterGroupAlertDefinitionIds) { this.filterGroupAlertDefinitionIds = CriteriaUtils.getListIgnoringNulls(filterGroupAlertDefinitionIds); } /** * Note that by default this is a substring search. Use {@link Criteria#setStrict(boolean)} to perform an * exact string match. * * @param acknowledgingSubject The subject or subject substring. Set to empty string to match all acknowledged alerts. */ public void addFilterAcknowledgingSubject(String acknowledgingSubject) { this.filterAcknowledgingSubject = acknowledgingSubject; } /** * @param unacknowledged If TRUE limit to only unacknowledged alerts. */ public void addFilterUnacknowledgedOnly(Boolean filterUnacknowledgedOnly) { this.filterUnacknowledgedOnly = (Boolean.TRUE.equals(filterUnacknowledgedOnly) ? NonBindingOverrideFilter.ON : NonBindingOverrideFilter.OFF); } public void addFilterRecovered(boolean filterRecovered) { this.filterRecovered = (filterRecovered ? NonBindingOverrideFilter.ON : NonBindingOverrideFilter.OFF); } public void addFilterRecoveryIds(Integer... filterRecoveryIds) { this.filterRecoveryIds = CriteriaUtils.getListIgnoringNulls(filterRecoveryIds); } public void fetchAlertDefinition(boolean fetchAlertDefinition) { this.fetchAlertDefinition = fetchAlertDefinition; } public void fetchConditionLogs(boolean fetchConditionLogs) { this.fetchConditionLogs = fetchConditionLogs; } public void fetchNotificationLogs(boolean fetchNotificationLogs) { this.fetchNotificationLogs = fetchNotificationLogs; } public void fetchRecoveryAlertDefinition(boolean fetchRecoveryAlertDefinition) { this.fetchRecoveryAlertDefinition = fetchRecoveryAlertDefinition; } public void addSortCtime(PageOrdering sortCtime) { addSortField(SORT_FIELD_CTIME); this.sortCtime = sortCtime; } public void addSortName(PageOrdering sortName) { addSortField(SORT_FIELD_NAME); this.sortName = sortName; } public void addSortPriority(PageOrdering sortPriority) { addSortField(SORT_FIELD_PRIORITY); this.sortPriority = sortPriority; } public void addSortResourceId(PageOrdering sortResourceId) { addSortField(SORT_FIELD_RESOURCE_ID); this.sortResourceId = sortResourceId; } public void addSortResourceName(PageOrdering sortResourceName) { addSortField(SORT_FIELD_RESOURCE_NAME); this.sortResourceName = sortResourceName; } }