/*
* RHQ Management Platform
* Copyright (C) 2010 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 javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.measurement.MeasurementDataTrait;
import org.rhq.core.domain.util.PageOrdering;
/**
* RHQ {@link Criteria} object for filtered, sortable queries of {@link MeasurementDataTrait trait} data sets.
*
* @author Ian Springer
*/
@XmlAccessorType(XmlAccessType.FIELD)
@SuppressWarnings("unused")
public class MeasurementDataTraitCriteria extends Criteria {
private static final long serialVersionUID = 2L;
// sort field names
public static final String SORT_FIELD_SCHEDULE_ID = "scheduleId";
public static final String SORT_FIELD_TIMESTAMP = "timestamp";
public static final String SORT_FIELD_DISPLAY_NAME = "displayName";
public static final String SORT_FIELD_VALUE = "value";
public static final String SORT_FIELD_RESOURCE_NAME = "resourceName";
// filter field names
public static final String FILTER_FIELD_SCHEDULE_ID = "scheduleId";
public static final String FILTER_FIELD_RESOURCE_ID = "resourceId";
public static final String FILTER_FIELD_GROUP_ID = "groupId";
public static final String FILTER_FIELD_DEFINITION_ID = "definitionId";
public static final String FILTER_FIELD_MAX_TIMESTAMP = "maxTimestamp";
public static final String FILTER_FIELD_ENABLED = "enabled";
private Integer filterScheduleId; // requires overrides
private Integer filterResourceId; // requires overrides
private Integer filterGroupId; // requires overrides
private Integer filterDefinitionId; // requires overrides
private Integer filterMaxTimestamp; // requires overrides
private Boolean filterEnabled; // requires overrides
private boolean fetchSchedule;
private PageOrdering sortTimestamp; // requires overrides
private PageOrdering sortDisplayName; // requires overrides
private PageOrdering sortResourceName; // requires overrides
public MeasurementDataTraitCriteria() {
filterOverrides.put(FILTER_FIELD_SCHEDULE_ID, "id.scheduleId = ?");
filterOverrides.put(FILTER_FIELD_RESOURCE_ID, "schedule.resource.id = ?");
filterOverrides.put(FILTER_FIELD_GROUP_ID, "schedule.resource.id IN " //
+ "( SELECT res.id " //
+ " FROM Resource res " //
+ " JOIN res.explicitGroups grp " //
+ " WHERE grp.id = ? )");
filterOverrides.put(FILTER_FIELD_DEFINITION_ID, "schedule.definition.id = ?");
filterOverrides.put(FILTER_FIELD_MAX_TIMESTAMP, "id.timestamp = " //
+ "( SELECT MAX(mdt.id.timestamp) "
+ " FROM MeasurementDataTrait mdt "
+ " WHERE mdt.id.scheduleId = " + getAlias() + ".id.scheduleId ) " //
+ " AND 1 = ?");
filterOverrides.put(FILTER_FIELD_ENABLED, "schedule.enabled = ?");
sortOverrides.put(SORT_FIELD_TIMESTAMP, "id.timestamp");
sortOverrides.put(SORT_FIELD_DISPLAY_NAME, "schedule.definition.displayName");
sortOverrides.put(SORT_FIELD_RESOURCE_NAME, "schedule.resource.name");
}
@Override
public Class<MeasurementDataTrait> getPersistentClass() {
return MeasurementDataTrait.class;
}
public void addFilterScheduleId(Integer filterScheduleId) {
this.filterScheduleId = filterScheduleId;
}
public void addFilterResourceId(Integer filterResourceId) {
if (this.filterGroupId != null) {
throw new IllegalArgumentException("This criteria cannot be filtered by both a Resource id and a group id.");
}
this.filterResourceId = filterResourceId;
}
public void addFilterGroupId(Integer filterGroupId) {
if (this.filterResourceId != null) {
throw new IllegalArgumentException("This criteria cannot be filtered by both a Resource id and a group id.");
}
this.filterGroupId = filterGroupId;
}
public void addFilterDefinitionId(Integer filterDefinitionId) {
this.filterDefinitionId = filterDefinitionId;
}
public void addFilterMaxTimestamp() {
this.filterMaxTimestamp = 1;
}
public void addFilterEnabled(boolean filterEnabled) {
this.filterEnabled = filterEnabled;
}
public void fetchSchedule(boolean fetchSchedule) {
this.fetchSchedule = fetchSchedule;
}
public void addSortTimestamp(PageOrdering sortTimestamp) {
addSortField(SORT_FIELD_TIMESTAMP);
this.sortTimestamp = sortTimestamp;
}
public void addSortName(PageOrdering sortName) {
addSortField(SORT_FIELD_DISPLAY_NAME);
this.sortDisplayName = sortName;
}
public void addSortResourceName(PageOrdering sortResourceName) {
addSortField(SORT_FIELD_RESOURCE_NAME);
this.sortResourceName = sortResourceName;
}
@Override
public boolean isSupportsAddSortId() {
return false;
}
@Override
public boolean isSupportsAddFilterId() {
return false;
}
@Override
public boolean isSupportsAddFilterIds() {
return false;
}
}