/*
* 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 as published by
* the Free Software Foundation version 2 of the License.
*
* 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.gui.common.metric;
import java.util.Calendar;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.rhq.core.gui.util.FacesContextUtility;
import org.rhq.enterprise.gui.legacy.WebUser;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.measurement.MeasurementPreferences;
import org.rhq.enterprise.server.measurement.MeasurementPreferences.MetricRangePreferences;
public class AdvancedMetricSettingsUIBean {
private static final String DURATION_TYPE = "duration";
private static final String INTERVAL_TYPE = "interval";
private int duration;
private Integer unit;
private String intervalType;
private String durationType;
private Date fromTime;
private Date toTime;
public AdvancedMetricSettingsUIBean() {
init();
}
public int getDuration() {
return duration;
}
public void setDuration(int duration) {
this.duration = duration;
}
public Integer getUnit() {
return unit;
}
public void setUnit(Integer unit) {
this.unit = unit;
}
public void setIntervalType(String intervalType) {
this.intervalType = intervalType;
}
public String getIntervalType() {
return this.intervalType;
}
public void setDurationType(String durationType) {
this.durationType = durationType;
}
public String getDurationType() {
return this.durationType;
}
public Date getFromTime() {
return fromTime;
}
public void setFromTime(Date fromTime) {
this.fromTime = fromTime;
}
public Date getToTime() {
return toTime;
}
public void setToTime(Date toTime) {
this.toTime = toTime;
}
public void execute() {
FacesContext facesContext = FacesContextUtility.getFacesContext();
WebUser user = EnterpriseFacesContextUtility.getWebUser();
MeasurementPreferences preferences = user.getMeasurementPreferences();
MetricRangePreferences rangePreferences = preferences.getMetricRangePreferences();
String metricType = "";
if (this.getIntervalType() == null) {
metricType = getDurationType();
} else {
metricType = getIntervalType();
}
if ((metricType == null) || (metricType.equals(""))) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Range select error",
"Please select one option to either setup the duration or the time interval"));
} else if (metricType.equalsIgnoreCase(AdvancedMetricSettingsUIBean.DURATION_TYPE)) {
rangePreferences.readOnly = false;
rangePreferences.lastN = duration;
rangePreferences.unit = unit;
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Preferences updated",
"Your preferences have been successfully updated"));
} else if (metricType.equalsIgnoreCase(AdvancedMetricSettingsUIBean.INTERVAL_TYPE)) {
if ((this.getFromTime() == null) || (this.getToTime() == null)) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Range select error",
"Please make sure to fill in the from and to dates"));
} else {
Long fromTime = this.getFromTime().getTime();
Long toTime = this.getToTime().getTime();
Long now = Calendar.getInstance().getTime().getTime();
if ((toTime == null) || (fromTime == null)) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Timing error",
"Please fill in the required fields"));
} else if (toTime < fromTime) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Timing error",
"To time cannot be earlier than before time"));
} else if (toTime > now || fromTime > now) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Timing error",
"Cannot set time interval in the future"));
} else {
rangePreferences.readOnly = true;
rangePreferences.begin = fromTime;
rangePreferences.end = toTime;
}
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Preferences updated",
"Your preferences have been successfully updated"));
}
}
preferences.setMetricRangePreferences(rangePreferences);
}
public void init() {
WebUser user = EnterpriseFacesContextUtility.getWebUser();
MeasurementPreferences preferences = user.getMeasurementPreferences();
MetricRangePreferences rangePreferences = preferences.getMetricRangePreferences();
if (rangePreferences.readOnly) {
this.setDurationType(null);
this.setIntervalType("interval");
this.setUnit(null);
this.setFromTime(new Date(rangePreferences.begin));
this.setToTime(new Date(rangePreferences.end));
} else {
this.setDurationType("duration");
this.setIntervalType(null);
this.setDuration(rangePreferences.lastN);
this.setUnit(rangePreferences.unit);
this.setFromTime(null);
this.setToTime(null);
}
}
}