/* * RHQ Management Platform * Copyright (C) 2005-2008 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.ArrayList; import java.util.Arrays; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import org.rhq.core.domain.measurement.MeasurementSchedule; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.core.domain.util.PageOrdering; /** * @author Joseph Marques */ @XmlAccessorType(XmlAccessType.FIELD) @SuppressWarnings("unused") public class MeasurementScheduleCriteria extends Criteria { private static final long serialVersionUID = 3L; // sort fields from the MeasurementSchedule's MeasurementDefinition /** * Note that sorting by definition id alone might not produce repeatable results. This depends on the filters * and other sort field applied. */ public static final String SORT_FIELD_DEFINITION_ID = "definitionId"; public static final String SORT_FIELD_NAME = "name"; public static final String SORT_FIELD_DISPLAY_NAME = "displayName"; public static final String SORT_FIELD_DATA_TYPE = "dataType"; /** * @deprecated Sorting by this field has never been supported. This constant has been introduced in error and will * be removed in the next major release. */ @Deprecated public static final String SORT_FIELD_ENABLED = "enabled"; /** * @deprecated Sorting by this field has never been supported. This constant has been introduced in error and will * be removed in the next major release. */ @Deprecated public static final String SORT_FIELD_INTERVAL = "interval"; /** * @deprecated Sorting by this field has never been supported. This constant has been introduced in error and will * be removed in the next major release. */ @Deprecated public static final String SORT_FIELD_DESCRIPTION = "description"; // filter fields public static final String FILTER_FIELD_DEFINITION_IDS = "definitionIds"; public static final String FILTER_FIELD_RESOURCE_ID = "resourceId"; public static final String FILTER_FIELD_RESOURCE_GROUP_ID = "resourceGroupId"; public static final String FILTER_FIELD_RESOURCE_INVENTORY_STATUSES = "resourceInventoryStatuses"; public static final String FILTER_FIELD_RESOURCE_TYPE_ID = "resourceTypeId"; public static final String FILTER_FIELD_AUTO_GROUP_RESOURCE_TYPE_ID = "autoGroupResourceTypeId"; public static final String FILTER_FIELD_AUTO_GROUP_PARENT_RESOURCE_ID = "autoGroupParentResourceId"; private Boolean filterEnabled; private List<Integer> filterDefinitionIds; // requires overrides private Integer filterResourceId; // requires overrides private Integer filterResourceGroupId; // requires overrides private List<InventoryStatus> filterResourceInventoryStatuses; // requires overrides private Integer filterAutoGroupResourceTypeId; // requires overrides private Integer filterAutoGroupParentResourceId; // requires overrides private Integer filterResourceTypeId; // requires overrides private boolean fetchBaseline; private boolean fetchDefinition; private boolean fetchResource; private PageOrdering sortName; // requires overrides private PageOrdering sortDisplayName; // requires overrides private PageOrdering sortDataType; // requires overrides public MeasurementScheduleCriteria() { filterOverrides.put(FILTER_FIELD_DEFINITION_IDS, "definition.id IN ( ? )"); filterOverrides.put(FILTER_FIELD_RESOURCE_ID, "resource.id IN ( ? )"); filterOverrides.put(FILTER_FIELD_RESOURCE_GROUP_ID, "resource.id IN " // + "( SELECT res.id " // + " FROM Resource res " // + " JOIN res.explicitGroups eg " // + " WHERE eg.id = ? )"); filterOverrides.put(FILTER_FIELD_RESOURCE_INVENTORY_STATUSES, "resource.inventoryStatus IN ( ? )"); filterOverrides.put(FILTER_FIELD_AUTO_GROUP_RESOURCE_TYPE_ID, "resource.id IN " // + "( SELECT res.id " // + " FROM Resource res " // + " JOIN res.resourceType type " // + " WHERE type.id = ? )"); filterOverrides.put(FILTER_FIELD_AUTO_GROUP_PARENT_RESOURCE_ID, "resource.id IN " // + "( SELECT res.id " // + " FROM Resource res " // + " JOIN res.parentResource parent " // + " WHERE parent.id = ? )"); filterOverrides.put(FILTER_FIELD_RESOURCE_TYPE_ID, "resource.resourceType.id = ?"); sortOverrides.put(SORT_FIELD_DEFINITION_ID, "definition.id"); sortOverrides.put(SORT_FIELD_NAME, "definition.name"); sortOverrides.put(SORT_FIELD_DISPLAY_NAME, "definition.displayName"); sortOverrides.put(SORT_FIELD_DATA_TYPE, "definition.dataType"); // by default, we want to only return schedules for committed resources ArrayList<InventoryStatus> defaults = new ArrayList<InventoryStatus>(1); defaults.add(InventoryStatus.COMMITTED); addFilterResourceInventoryStatuses(defaults); } @Override public Class<MeasurementSchedule> getPersistentClass() { return MeasurementSchedule.class; } public void addFilterEnabled(Boolean filterEnabled) { this.filterEnabled = filterEnabled; } public void addFilterDefinitionIds(Integer... filterDefinitionIds) { this.filterDefinitionIds = Arrays.asList(filterDefinitionIds); } public void addFilterResourceId(Integer filterResourceId) { this.filterResourceId = filterResourceId; } public void addFilterResourceGroupId(Integer filterResourceGroupId) { this.filterResourceGroupId = filterResourceGroupId; } public void addFilterResourceInventoryStatuses(List<InventoryStatus> filterResourceInventoryStatuses) { this.filterResourceInventoryStatuses = filterResourceInventoryStatuses; } public void addFilterAutoGroupResourceTypeId(Integer filterAutoGroupResourceTypeId) { this.filterAutoGroupResourceTypeId = filterAutoGroupResourceTypeId; } public void addFilterAutoGroupParentResourceId(Integer filterAutoGroupParentResourceId) { this.filterAutoGroupParentResourceId = filterAutoGroupParentResourceId; } public void addFilterResourceTypeId(Integer filterResourceTypeId) { this.filterResourceTypeId = filterResourceTypeId; } public void fetchBaseline(boolean fetchBaseline) { this.fetchBaseline = fetchBaseline; } public void fetchDefinition(boolean fetchDefinition) { this.fetchDefinition = fetchDefinition; } public void fetchResource(boolean fetchResource) { this.fetchResource = fetchResource; } public void addSortName(PageOrdering sortName) { addSortField("name"); this.sortName = sortName; } public void addSortDisplayName(PageOrdering sortDisplayName) { addSortField("displayName"); this.sortDisplayName = sortDisplayName; } public void addSortDataType(PageOrdering sortDataType) { addSortField("dataType"); this.sortDataType = sortDataType; } }