package uk.ac.ox.zoo.seeg.abraid.mp.common.dto.api.v1;
import ch.lambdaj.function.convert.Converter;
import org.joda.time.DateTime;
import org.springframework.format.annotation.DateTimeFormat;
import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.CovariateInfluence;
import uk.ac.ox.zoo.seeg.abraid.mp.common.domain.ModelRun;
import java.util.List;
import static ch.lambdaj.Lambda.convert;
/**
* Represents a model run in the v1 JSON API.
* Copyright (c) 2015 University of Oxford
*/
public class JsonApiModelRun {
private static final String GEOTIFF_URL_FORMAT = "/atlas/results/%s_%s.tif";
private static final String EXTENT = "extent";
private static final String PREDICTION = "mean";
private String name;
private JsonApiDiseaseGroup diseaseGroup;
private String predictionData;
private String extentData;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private DateTime triggerDate;
private DateTime completionDate;
private JsonApiDateRange occurrenceDateRange;
private List<JsonApiCovariateInfluence> covariateInfluences;
public JsonApiModelRun(ModelRun modelRun) {
this.name = modelRun.getName();
this.diseaseGroup = new JsonApiDiseaseGroup(modelRun.getDiseaseGroup());
this.predictionData = String.format(GEOTIFF_URL_FORMAT, this.name, PREDICTION);
this.extentData = String.format(GEOTIFF_URL_FORMAT, this.name, EXTENT);
this.triggerDate = modelRun.getRequestDate();
this.completionDate = modelRun.getResponseDate();
this.occurrenceDateRange = new JsonApiDateRange(
modelRun.getOccurrenceDataRangeStartDate(), modelRun.getOccurrenceDataRangeEndDate());
this.covariateInfluences = convert(modelRun.getCovariateInfluences(),
new Converter<CovariateInfluence, JsonApiCovariateInfluence>() {
@Override
public JsonApiCovariateInfluence convert(CovariateInfluence covariateInfluence) {
return new JsonApiCovariateInfluence(covariateInfluence);
}
}
);
}
public String getName() {
return name;
}
public JsonApiDiseaseGroup getDiseaseGroup() {
return diseaseGroup;
}
public String getPredictionData() {
return predictionData;
}
public String getExtentData() {
return extentData;
}
public DateTime getTriggerDate() {
return triggerDate;
}
public DateTime getCompletionDate() {
return completionDate;
}
public JsonApiDateRange getOccurrenceDateRange() {
return occurrenceDateRange;
}
public List<JsonApiCovariateInfluence> getCovariateInfluences() {
return covariateInfluences;
}
}