/*
* (c) Copyright 2016 EVRYTHNG Ltd London / Zurich
* www.evrythng.com
*/
package com.evrythng.java.wrapper.service;
import com.evrythng.java.wrapper.ApiManager;
import com.evrythng.java.wrapper.core.EvrythngApiBuilder.Builder;
import com.evrythng.java.wrapper.core.EvrythngServiceBase;
import com.evrythng.java.wrapper.exception.EvrythngClientException;
import com.evrythng.thng.resource.model.store.ReactorSchedule;
import com.fasterxml.jackson.core.type.TypeReference;
import java.util.List;
/**
* Service wrapper for the {@code /projects/{projectId}/applications/{applicationId}/reactor/schedules} endpoint of the EVRYTHNG
* API.
*/
public class ReactorSchedulesService extends EvrythngServiceBase {
private static final String PATH_REACTOR_SCHEDULES = "/projects/%s/applications/%s/reactor/schedules";
private static final String PATH_REACTOR_SCHEDULE = PATH_REACTOR_SCHEDULES + "/%s";
public ReactorSchedulesService(final ApiManager api) {
super(api);
}
/**
* Introduces parameters into reactor schedules url.
*/
private static String reactorSchedulesUrl(final String projectId, final String appId) {
return String.format(PATH_REACTOR_SCHEDULES, projectId, appId);
}
/**
* Introduces parameters into reactor schedule url.
*/
private static String reactorScheduleUrl(final String projectId, final String appId, final String reactorScheduleId) {
return String.format(PATH_REACTOR_SCHEDULE, projectId, appId, reactorScheduleId);
}
/**
* Retrieves all {@link ReactorSchedule} from specified project and application. <p>
* {@code GET} {@value #PATH_REACTOR_SCHEDULES}.
*
* @param projectId id of a project containing reactor schedules.
* @param appId id of an application containing reactor schedules.
*
* @return list of found {@link ReactorSchedule}.
*/
public Builder<List<ReactorSchedule>> reactorSchedulesReader(final String projectId, final String appId)
throws EvrythngClientException {
return get(reactorSchedulesUrl(projectId, appId), new TypeReference<List<ReactorSchedule>>() {});
}
/**
* Retrieves {@link ReactorSchedule} with the specified id from specified project and application. <p>
* {@code GET} {@value #PATH_REACTOR_SCHEDULE}.
*
* @param projectId id of a project containing reactor schedule.
* @param appId id of an application containing reactor schedule.
* @param reactorScheduleId id of a reactor schedule.
*
* @return found {@link ReactorSchedule} or HTTP 404 NOT FOUND.
*/
public Builder<ReactorSchedule> reactorScheduleReader(final String projectId, final String appId,
final String reactorScheduleId)
throws EvrythngClientException {
return get(reactorScheduleUrl(projectId, appId, reactorScheduleId), new TypeReference<ReactorSchedule>() {});
}
/**
* Updates {@link ReactorSchedule} by specified id.<p>
* {@code PUT} {@value #PATH_REACTOR_SCHEDULE}.
*
* @param projectId if of a project containing reactor schedule.
* @param appId id of an application containing reactor schedule.
* @param reactorScheduleId id of a reactor schedule.
* @param reactorSchedule reactor schedule update.
*
* @return Updated reactor schedule or HTTP 404 NOT FOUND.
*/
public Builder<ReactorSchedule> reactorScheduleUpdater(final String projectId, final String appId,
final String reactorScheduleId,
final ReactorSchedule reactorSchedule)
throws EvrythngClientException {
return put(reactorScheduleUrl(projectId, appId, reactorScheduleId), reactorSchedule,
new TypeReference<ReactorSchedule>() {});
}
/**
* Creates {@link ReactorSchedule}. <p>
* {@code POST} {@value #PATH_REACTOR_SCHEDULES}.
*
* @param projectId id of a project.
* @param appId if of an application.
* @param reactorSchedule reactor schedule create fields.
*
* @return Created reactor schedule.
*/
public Builder<ReactorSchedule> reactorScheduleCreator(final String projectId, final String appId,
final ReactorSchedule reactorSchedule)
throws EvrythngClientException {
return post(reactorSchedulesUrl(projectId, appId), reactorSchedule, new TypeReference<ReactorSchedule>() {});
}
/**
* Removes {@link ReactorSchedule}. <p>
* {@code DELETE} {@value #PATH_REACTOR_SCHEDULE}.
*
* @param projectId id of a project containing reactor schedule.
* @param appId if of an application containing reactor schedule.
* @param reactorScheduleId if of a reactor schedule.
*
* @return {@code TRUE} if operation was successful, {@code FALSE} otherwise.
*/
public Builder<Boolean> reactorScheduleDeleter(final String projectId, final String appId,
final String reactorScheduleId)
throws EvrythngClientException {
return delete(reactorScheduleUrl(projectId, appId, reactorScheduleId));
}
}