package io.evercam;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.JsonNode;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
public class PTZPreset extends EvercamObject {
public PTZPreset(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
private PTZPreset() {
}
public String getToken() {
return getStringNotNull("token");
}
public String getName() {
return getStringNotNull("Name");
}
/**
* GET /cameras/{id}/ptz/presets
*
* @return a list contains all presets for the specified camera
* @throws PTZException if any error occurs
*/
public static ArrayList<PTZPreset> getAllPresets(String cameraId) throws PTZException {
ArrayList<PTZPreset> presetsArrayList = new ArrayList<PTZPreset>();
if (API.hasUserKeyPair()) {
try {
HttpResponse<JsonNode> response = Unirest.get(PTZPresetControl.getPresetsUrl(cameraId)).queryString(API.userKeyPairMap()).asJson();
if (response.getStatus() == EvercamObject.CODE_OK) {
JSONArray presetsJsonArray = response.getBody().getObject().getJSONArray("Presets");
if (presetsJsonArray.length() > 0) {
for (int index = 0; index < presetsJsonArray.length(); index++) {
presetsArrayList.add(new PTZPreset(presetsJsonArray.getJSONObject(index)));
}
}
} else {
ErrorResponse errorResponse = new ErrorResponse(response.getBody().getObject());
throw new PTZException(response.getStatus() + ": " + errorResponse.getMessage());
}
} catch (UnirestException e) {
throw new PTZException(e);
}
} else {
throw new PTZException(EvercamException.MSG_USER_API_KEY_REQUIRED);
}
return presetsArrayList;
}
/**
* POST /cameras/{id}/ptz/presets/create/{preset_name}
*
* @param cameraId the unique identifier of the camera to create preset on
* @param presetName name of the new preset
* @return token for the new created preset
* @throws PTZException if any error occurred
*/
public static String create(String cameraId, String presetName) throws PTZException {
if (!API.hasUserKeyPair()) throw new PTZException(EvercamException.MSG_USER_API_KEY_REQUIRED);
else {
final String URL_CREATE = PTZPresetControl.getPresetsUrl(cameraId) + "/create";
try {
HttpResponse<JsonNode> response = Unirest.post(URL_CREATE).queryString(API.userKeyPairMap()).field("preset_name",presetName).asJson();
if (response.getStatus() == CODE_CREATE || response.getStatus() == CODE_OK) {
return response.getBody().getObject().getString("PresetToken");
} else {
ErrorResponse errorResponse = new ErrorResponse(response.getBody().getObject());
throw new PTZException(response.getStatus() + ": " + errorResponse.getMessage());
}
} catch (UnirestException e) {
throw new PTZException(e);
}
}
}
@Override
public String toString() {
return getToken() + ": " + getName();
}
}