/* * (c) Copyright Reserved EVRYTHNG Limited 2016. All rights reserved. * Use of this material is subject to license. * Copying and unauthorised use of this material strictly prohibited. */ 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.Project; import com.fasterxml.jackson.core.type.TypeReference; import java.util.List; /** * Service wrapper for the {@code /projects} endpoint of the EVRYTHNG API. */ public class ProjectService extends EvrythngServiceBase { private static final String PATH_PROJECTS = "/projects"; private static final String PATH_PROJECT = PATH_PROJECTS + "/%s"; /** * @param apiManager {@link ApiManager} instance */ public ProjectService(final ApiManager apiManager) { super(apiManager); } /** * Creates a new {@link Project} * <p> * POST {@value #PATH_PROJECTS} * * @param project {@link Project} instance * @return a preconfigured {@link Builder} */ public Builder<Project> projectCreator(final Project project) throws EvrythngClientException { return post(PATH_PROJECTS, project, new TypeReference<Project>() { }); } /** * Retrieves list of all {@link Project} resources. * <p> * GET {@value #PATH_PROJECTS} * * @return a preconfigured {@link Builder} */ public Builder<List<Project>> projectsReader() throws EvrythngClientException { return get(PATH_PROJECTS, new TypeReference<List<Project>>() { }); } /** * Retrieves the referenced {@link Project} * <p> * GET {@value #PATH_PROJECT} * * @param id project id * @return a preconfigured {@link Builder} */ public Builder<Project> projectReader(final String id) throws EvrythngClientException { return get(String.format(PATH_PROJECT, id), new TypeReference<Project>() { }); } /** * Updates the referenced {@link Project} * <p> * PUT {@value #PATH_PROJECT} * * @param id project id * @param project {@link Project} instance * @return a preconfigured {@link Builder} */ public Builder<Project> projectUpdater(final String id, final Project project) throws EvrythngClientException { return put(String.format(PATH_PROJECT, id), project, new TypeReference<Project>() { }); } /** * Deletes the referenced {@link Project} * <p> * DELETE {@value #PATH_PROJECT} * * @param id project id * @return a pre-configured {@link Builder} */ public Builder<Boolean> projectDeleter(final String id) throws EvrythngClientException { return delete(String.format(PATH_PROJECT, id)); } /** * Deletes the referenced {@link Project} * <p> * DELETE {@value #PATH_PROJECT} * * @param ids project ids * * @return a pre-configured {@link Builder} */ public Builder<Long> projectsDeleter(final List<String> ids) throws EvrythngClientException { return deleteMultiple(PATH_PROJECTS).ids(ids); } /** * Deletes the referenced {@link Project} * <p> * DELETE {@value #PATH_PROJECT} * * @param filter filter for projects to delete * * @return a pre-configured {@link Builder} */ public Builder<Long> projectsDeleter(final String filter) throws EvrythngClientException { return deleteMultiple(PATH_PROJECTS).filter(filter); } }