package org.rhq.enterprise.gui.measurement.calltime;
import javax.faces.model.DataModel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.rhq.core.domain.common.EntityContext;
import org.rhq.core.domain.measurement.calltime.CallTimeDataComposite;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.common.framework.PagedDataTableUIBean;
import org.rhq.enterprise.gui.common.paging.PageControlView;
import org.rhq.enterprise.gui.common.paging.PagedListDataModel;
import org.rhq.enterprise.gui.legacy.WebUser;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.gui.util.WebUtility;
import org.rhq.enterprise.server.measurement.CallTimeDataManagerLocal;
import org.rhq.enterprise.server.measurement.MeasurementPreferences;
import org.rhq.enterprise.server.measurement.MeasurementPreferences.MetricRangePreferences;
import org.rhq.enterprise.server.util.LookupUtil;
/**
* Backing JSF managed bean for <code>/rhq/common/monitor/response.xhtml</code>.
*/
public class CallTimeUIBean extends PagedDataTableUIBean {
private final Log log = LogFactory.getLog(CallTimeUIBean.class);
public static final String MANAGED_BEAN_NAME = "CallTimeUIBean";
private CallTimeDataManagerLocal callTimeDataManager = LookupUtil.getCallTimeDataManager();
//private MeasurementScheduleManagerLocal scheduleManager = LookupUtil.getMeasurementScheduleManager();
private EntityContext context;
private String destinationFilter;
public CallTimeUIBean() {
context = WebUtility.getEntityContext();
}
public EntityContext getContext() {
return this.context;
}
public String getDestinationFilter() {
if (destinationFilter == null) {
destinationFilter = FacesContextUtility.getOptionalRequestParameter("callTimeForm:destinationFilter");
}
return this.destinationFilter;
}
public void setDestinationFilter(String destinationFilter) {
this.destinationFilter = destinationFilter;
}
@Override
public DataModel getDataModel() {
if (dataModel == null) {
dataModel = new ListResourceMeasurementScheduleDataModel(PageControlView.CallTimeHistory, MANAGED_BEAN_NAME);
}
return dataModel;
}
private class ListResourceMeasurementScheduleDataModel extends PagedListDataModel<CallTimeDataComposite> {
public ListResourceMeasurementScheduleDataModel(PageControlView view, String beanName) {
super(view, beanName);
}
@Override
public PageList<CallTimeDataComposite> fetchPage(PageControl pc) {
WebUser user = EnterpriseFacesContextUtility.getWebUser();
MeasurementPreferences preferences = user.getMeasurementPreferences();
MetricRangePreferences rangePreferences = preferences.getMetricRangePreferences();
/*
Subject subject = getSubject();
PageList<CallTimeDataComposite> results = new PageList<CallTimeDataComposite>();
if (context.category == EntityContext.Category.Resource) {
int resourceId = getResource().getId();
List<MeasurementSchedule> callTimeSchedules = scheduleManager.findSchedulesForResourceAndType(subject,
resourceId, DataType.CALLTIME, null, false);
if (callTimeSchedules.size() == 0) {
FacesContextUtility.addMessage(FacesMessage.SEVERITY_WARN,
"This resource does not support response time metrics.");
} else if (callTimeSchedules.size() > 1) {
FacesContextUtility.addMessage(FacesMessage.SEVERITY_ERROR,
"This resource defines multiple resource time metrics - only one is allowed.");
} else {
int scheduleId = callTimeSchedules.get(0).getId();
results = callTimeDataManager.findCallTimeDataForResource(subject, scheduleId,
rangePreferences.begin, rangePreferences.end, pc);
}
} else if (context.category == EntityContext.Category.ResourceGroup) {
results = callTimeDataManager.findCallTimeDataForCompatibleGroup(subject, context.groupId,
rangePreferences.begin, rangePreferences.end, pc);
} else if (context.category == EntityContext.Category.AutoGroup) {
results = callTimeDataManager.findCallTimeDataForAutoGroup(subject, context.parentResourceId,
context.resourceTypeId, rangePreferences.begin, rangePreferences.end, pc);
} else {
log.error(context.getUnknownContextMessage());
}
*/
PageList<CallTimeDataComposite> results = callTimeDataManager.findCallTimeDataForContext(getSubject(),
context, rangePreferences.begin, rangePreferences.end, getDestinationFilter(), pc);
return results;
}
}
}