package com.metrictracker.ws;
import java.io.IOException;
import java.sql.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.logging.Logger;
import org.restlet.data.Status;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
import org.restlet.resource.Post;
import org.restlet.resource.ResourceException;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.metrictracker.model.Metric;
import com.metrictracker.model.MetricValue;
import com.metrictracker.model.MetricValueDao;
import com.metrictracker.util.ExceptionManager;
/**
* Resource which has only one representation.
*
*/
public class ManageMetricValue extends MetricTrackerServerResource {
private static final Logger log = Logger.getLogger(ManageMetricValue.class.getName());
@Get
public String represent() {
Metric metric = getMetric();
MetricValueDao dao = new MetricValueDao();
Iterator<MetricValue> metricValues = dao.listByProperty("metricKey", metric.getKey()).iterator();
StringBuffer sb = new StringBuffer("");
sb.append("Metric Name: " + metric.getName());
sb.append(System.getProperty("line.separator"));
while (metricValues.hasNext()) {
MetricValue metricValue = metricValues.next();
sb.append(metricValue.getTimeFrame());
sb.append("\t");
sb.append(metricValue.getValue());
sb.append(System.getProperty("line.separator"));
}
return sb.toString();
}
@Post("form:xml|json")
public void acceptRepresentation(Representation entity) throws ResourceException {
Objectify ofy = ObjectifyService.begin();
try {
HashMap<String, String> parameters = getParameters(entity);
String value = parameters.get("value");
String timeFrame = parameters.get("timeFrame");
Metric metric = getMetric();
MetricValue metricValue = new MetricValue();
metricValue.setMetric(metric);
metricValue.setTimeFrame(Date.valueOf(timeFrame));
metricValue.setMetricValue(Long.valueOf(value));
ofy.put(metricValue);
getResponse().setStatus(Status.SUCCESS_CREATED);
} catch (IOException e) {
ExceptionManager.logException(log, e);
getResponse().setStatus(Status.SERVER_ERROR_INTERNAL);
return;
}
}
}