/*
* 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 javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.calltime.CallTimeDataValue;
import org.rhq.core.domain.util.PageOrdering;
/**
* @author Joseph Marques
*/
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@SuppressWarnings("unused")
public class CallTimeDataCriteria extends Criteria {
private static final long serialVersionUID = 1L;
private Integer filterResourceId; // requires overrides
private Integer filterResourceGroupId; // requires overrides
private Integer filterAutoGroupResourceTypeId; // requires overrides
private Integer filterAutoGroupParentResourceId; // requires overrides
private Long filterBeginTime; // requires overrides
private Long filterEndTime; // requires overrides
private Double filterMinimum;
private Double filterMaximum;
private Double filterTotal;
private Long filterCount;
private String filterDestination; // requires overrides
private DataType filterDataType = DataType.CALLTIME; // requires overrides, not user modifiable
private PageOrdering sortMinimum; // requires overrides
private PageOrdering sortMaximum; // requires overrides
private PageOrdering sortAverage; // requires overrides
private PageOrdering sortTotal; // requires overrides
private PageOrdering sortCount; // requires overrides
@Override
public Class<CallTimeDataValue> getPersistentClass() {
return CallTimeDataValue.class;
}
public CallTimeDataCriteria() {
/*
filterOverrides.put("resourceId", "key.schedule.resource.id = ?");
filterOverrides.put("resourceGroupId", "key.schedule.resource.id IN " //
+ "( SELECT res.id " //
+ " FROM Resource res " //
+ " JOIN res.implicitGroups ig " //
+ " WHERE ig.id = ? )");
filterOverrides.put("autoGroupResourceTypeId", "key.schedule.resource.id IN " //
+ "( SELECT res.id " //
+ " FROM Resource res " //
+ " JOIN res.resourceType type " //
+ " WHERE type.id = ? )");
filterOverrides.put("autoGroupParentResourceId", "key.schedule.resource.id IN " //
+ "( SELECT res.id " //
+ " FROM Resource res " //
+ " JOIN res.parentResource parent " //
+ " WHERE parent.id = ? )");
*/
filterOverrides.put("resourceId", "id IN " //
+ "( SELECT callData.id " //
+ " FROM CallTimeDataValue callData " //
+ " WHERE callData.key.schedule.resource.id = ? )");
filterOverrides.put("resourceGroupId", "id IN " //
+ "( SELECT callData.id " //
+ " FROM CallTimeDataValue callData, Resource res " //
+ " JOIN res.implicitGroups ig " //
+ " WHERE callData.key.schedule.resource.id = res.id " //
+ " AND ig.id = ? ) ");
filterOverrides.put("autoGroupResourceTypeId", "id IN " //
+ "( SELECT callData.id " //
+ " FROM CallTimeDataValue callData, Resource res " //
+ " WHERE callData.key.schedule.resource.id = res.id " //
+ " AND res.resourceType.id = ? )");
filterOverrides.put("autoGroupParentResourceId", "id IN " //
+ "( SELECT callData.id " //
+ " FROM CallTimeDataValue callData, Resource res " //
+ " WHERE callData.key.schedule.resource.id = res.id " //
+ " AND res.parentResource.id = ? )");
filterOverrides.put("beginTime", "beginTime > ?");
filterOverrides.put("endTime", "endTime < ?");
filterOverrides.put("destination", "key.callDestination like ?");
/*
filterOverrides.put("destination", "id IN " //
+ "( SELECT callData.id " //
+ " FROM CallTimeDataValue callData " //
+ " WHERE callData.key.callDestination like ? )");
*/
filterOverrides.put("dataType", "key.schedule.definition.dataType = ?");
/*
filterOverrides.put("dataType", "id IN " //
+ "( SELECT callData.id " //
+ " FROM CallTimeDataValue callData " //
+ " WHERE callData.key.schedule.definition.dataType = ? )");
*/
sortOverrides.put("minimum", "MIN(" + getAlias() + ".minimum)");
sortOverrides.put("maximum", "MAX(" + getAlias() + ".maximum)");
sortOverrides.put("average", "(SUM(" + getAlias() + ".total) / SUM(" + getAlias() + ".count))");
sortOverrides.put("total", "SUM(" + getAlias() + ".total)");
sortOverrides.put("count", "SUM(" + getAlias() + ".count)");
}
public void addFilterResourceId(Integer filterResourceId) {
this.filterResourceId = filterResourceId;
}
public void addFilterResourceGroupId(Integer filterResourceGroupId) {
this.filterResourceGroupId = filterResourceGroupId;
}
public void addFilterAutoGroupResourceTypeId(Integer filterAutoGroupResourceTypeId) {
this.filterAutoGroupResourceTypeId = filterAutoGroupResourceTypeId;
}
public void addFilterAutoGroupParentResourceId(Integer filterAutoGroupParentResourceId) {
this.filterAutoGroupParentResourceId = filterAutoGroupParentResourceId;
}
public void addFilterBeginTime(Long filterBeginTime) {
this.filterBeginTime = filterBeginTime;
}
public void addFilterEndTime(Long filterEndTime) {
this.filterEndTime = filterEndTime;
}
public void addFilterMinimum(Double filterMinimum) {
this.filterMinimum = filterMinimum;
}
public void addFilterMaximum(Double filterMaximum) {
this.filterMaximum = filterMaximum;
}
public void addFilterTotal(Double filterTotal) {
this.filterTotal = filterTotal;
}
// use basic type not object wrapper because it requires non-null value
public void addFilterCount(long filterCount) {
if (filterCount < 1) {
throw new IllegalArgumentException("Filter 'count' must be greater than 0");
}
this.filterCount = filterCount;
}
public void addFilterDestination(String filterDestination) {
this.filterDestination = filterDestination;
}
public void addFilterDataType(DataType filterDataType) {
if (true) {
throw new IllegalArgumentException(
"Filter 'dataType' is not user modifiable, it must remain DataType.CALLTIME");
}
//this.filterDataType = filterDataType;
}
public void addSortMinimum(PageOrdering sortMinimum) {
addSortField("minimum");
this.sortMinimum = sortMinimum;
}
public void addSortMaximum(PageOrdering sortMaximum) {
addSortField("maximum");
this.sortMaximum = sortMaximum;
}
public void addSortAverage(PageOrdering sortAverage) {
addSortField("average");
this.sortAverage = sortAverage;
}
public void addSortTotal(PageOrdering sortTotal) {
addSortField("total");
this.sortTotal = sortTotal;
}
public void addSortCount(PageOrdering sortCount) {
addSortField("count");
this.sortCount = sortCount;
}
public boolean hasCustomizedSorting() {
return true;
}
}