/*
* @author Prem Prakash Jayaraman
* @email prem.jayaraman@csiro.au
*/
package org.openiot.ui.sensorschema.sensormodel;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.openiot.ui.sensorschema.utils.Constants;
import org.openiot.ui.sensorschema.utils.Utils;
import org.slf4j.Logger;
/**
* Represents the observation resource
* for more details refer to the LD4Sensor - Spitfire ontology
*/
public class Observation extends Resource {
private static Logger logger = Utils.getLogger(Observation.class);
/**
* Start Time of the observation
*/
private String startTime;
/**
* End Time of the observations
*/
private String endTime;
/**
* values of the observation
*/
private String[] values;
/** DateTime as a resource creation time point. */
private String resource_time = null;
/**
* Observation Constructor
*
* @param resourceId
* @param startTime
* @param endTime
* @param values
* @param baseURI
* @param baseTime
*/
public Observation(String resourceId, String startTime, String endTime, String[] values, String baseURI,
String baseTime){
this.resourceId = resourceId;
this.startTime = startTime;
this.endTime = endTime;
this.values = values;
this.base_datetime = baseTime;
this.base_uri = baseURI;
}
/**
* Observation Constructor creating a observation object from a JSON object
*
* @param json
* @param localhost
* @throws Exception
*/
public Observation(JSONObject json, String localhost) throws Exception {
//remote_uri
if (json.has("uri")){
this.setRemote_uri(Utils.removeBrackets(
json.getString("uri")));
}
if (json.has("resource"+Constants.JSON_SEPARATOR+"time")){
this.setResource_time(Utils.removeBrackets(
json.getString("resource"+Constants.JSON_SEPARATOR+"time")));
}
if (json.has("values")){
this.setValues(json.getJSONArray("values"));
}
if (json.has("start"+Constants.JSON_SEPARATOR+"range")){
this.setStartTime(Utils.removeBrackets(
json.getString("start"+Constants.JSON_SEPARATOR+"range")));
}
if (json.has("end"+Constants.JSON_SEPARATOR+"range")){
this.setEndTime(Utils.removeBrackets(
json.getString("end"+Constants.JSON_SEPARATOR+"range")));
}
//base uri - base_name
if (json.has("base"+Constants.JSON_SEPARATOR+"name")){
this.setBase_uri(Utils.removeBrackets(
json.getString("base"+Constants.JSON_SEPARATOR+"name")));
}
//base time - base_datetime
if (json.has("base"+Constants.JSON_SEPARATOR+"datetime")){
this.setBase_datetime(Utils.removeBrackets(
json.getString("base"+Constants.JSON_SEPARATOR+"datetime")));
}
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
public String[] getValues() {
return values;
}
public void setValues(String[] values) {
this.values = values;
}
public void setValues(JSONArray jvalues) throws JSONException {
JSONArray j = jvalues.getJSONArray(0);
if (j != null){
String[] values = new String[j.length()];
for (int i=0; i< j.length(); i++){
values[i] = j.getString(i);
}
setValues(values);
}
}
public String getResource_time() {
return resource_time;
}
public void setResource_time(String resource_time) {
this.resource_time = resource_time;
}
/**
* Convert the Observation object into JSON object
*
* @param isRemote
* @param isEnriched
* @return
*/
public JSONObject toJson(boolean isRemote, boolean isEnriched){
JSONObject json = new JSONObject();
try {
if (isRemote){
json.append("uri", remote_uri);
}else{
json.append("uri", null);
}
// if (isEnriched){
// json.append("context", );
// }else{
// json.append("context", null);
// }
json.append("resource_time", resource_time);
json.append("base_time", base_datetime);
json.append("start_range", startTime);
json.append("end_range", endTime);
JSONArray vals = new JSONArray();
for (int i=0; i<values.length ;i++){
vals.put(values[i]);
}
json.append("values", vals);
} catch (JSONException e1) {
logger.error(e1.getMessage());
}
return json;
}
}