CsvDepositoryValuesServerResource.java

package org.wattdepot.server.http.api;

import org.restlet.data.Disposition;
import org.restlet.data.MediaType;
import org.restlet.representation.StringRepresentation;
import org.wattdepot.common.domainmodel.InterpolatedValue;
import org.wattdepot.common.domainmodel.InterpolatedValueList;
import org.wattdepot.common.http.api.CsvDepositoryValuesResource;

import java.text.SimpleDateFormat;

/**
 * CsvDepositoryValuesServerResource - ServerResouce that handles the GET
 * /wattdepot/{org-id}/depository/{depository-id}/values/csv/ response.
 *
 * @author Brian Frølund
 */
public class CsvDepositoryValuesServerResource extends DepositoryValuesServer implements
    CsvDepositoryValuesResource {

  /*
  * (non-Javadoc)
  *
  * @see org.wattdepot.restlet.CsvDepositoryValuesResource#retrieve()
  */
  @Override
  public StringRepresentation retrieve() {
    InterpolatedValueList mList = doRetrieve();

    //RFC4180 CSV http://tools.ietf.org/html/rfc4180
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
    StringBuilder sb = new StringBuilder();
    sb.append("Start,Value\r\n");
    for (InterpolatedValue interpolatedValue : mList.getInterpolatedValues()) {
      sb.append(sdf.format(interpolatedValue.getStart()));
      sb.append(",");
      sb.append(interpolatedValue.getValue());
      sb.append("\r\n");
    }
    StringRepresentation response = new StringRepresentation(sb.toString(), MediaType.TEXT_CSV);
    response.setDisposition(new Disposition(Disposition.TYPE_ATTACHMENT));
    response.getDisposition().setFilename(String.format("%s_%s_%s.csv", depositoryId, sensorId, dataType));
    return response;
  }
}