com.evrythng.java.wrapper.service.BatchService.java Source code

Java tutorial

Introduction

Here is the source code for com.evrythng.java.wrapper.service.BatchService.java

Source

/*
 * (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.core.api.AcceptedResourceResponse;
import com.evrythng.java.wrapper.exception.EvrythngClientException;
import com.evrythng.thng.resource.model.store.Batch;
import com.evrythng.thng.resource.model.store.TaskOnBatch;
import com.evrythng.thng.resource.model.store.jobs.JobLogEntry;
import com.fasterxml.jackson.core.type.TypeReference;

import java.util.List;
import java.util.regex.Pattern;

/**
 * Service wrapper for the {@code /batches} endpoint of the EVRYTHNG API.
 */
public class BatchService extends EvrythngServiceBase {

    public static final String PATH_BATCHES = "/batches";
    public static final String PATH_BATCH = PATH_BATCHES + "/%s";
    public static final String PATH_BATCH_TASKS = PATH_BATCH + "/tasks";
    public static final String PATH_BATCH_TASK = PATH_BATCH_TASKS + "/%s";
    public static final String PATH_BATCH_TASK_LOGS = PATH_BATCH_TASK + "/logs";

    public BatchService(final ApiManager apiManager) {

        super(apiManager);
    }

    /**
     * Creates a new {@link Batch}.
     * <p>
     * POST {@value #PATH_BATCHES}
     *
     * @param batch the instance holding the {@link Batch} resource data
     * @return a preconfigured {@link Builder}
     */
    public Builder<Batch> batchCreator(final Batch batch) throws EvrythngClientException {

        return post(PATH_BATCHES, batch, new TypeReference<Batch>() {

        });
    }

    /**
     * Retrieves {@link Batch} resources.
     * <p>
     * GET {@value #PATH_BATCHES}
     *
     * @return a preconfigured {@link Builder}
     */
    public Builder<List<Batch>> batchesReader() throws EvrythngClientException {

        return get(PATH_BATCHES, new TypeReference<List<Batch>>() {

        });
    }

    /**
     * Retrieves the referenced {@link Batch}.
     * <p>
     * GET {@value #PATH_BATCH}
     *
     * @param batchId batch id
     * @return a preconfigured {@link Builder}
     */
    public Builder<Batch> batchReader(final String batchId) throws EvrythngClientException {

        return get(String.format(PATH_BATCH, batchId), new TypeReference<Batch>() {

        });
    }

    /**
     * Updates the referenced {@link Batch}.
     * <p>
     * PUT {@value #PATH_BATCH}
     *
     * @param batchId batch id
     * @param batch {@link Batch} instance
     * @return a preconfigured {@link Builder}
     */
    public Builder<Batch> batchUpdater(final String batchId, final Batch batch) throws EvrythngClientException {

        return put(String.format(PATH_BATCH, batchId), batch, new TypeReference<Batch>() {

        });
    }

    /**
     * Deletes the referenced {@link Batch}.
     * <p>
     * DELETE {@value #PATH_BATCH}
     *
     * @param batchId batch id
     * @return a preconfigured {@link Builder}
     */
    public Builder<Boolean> batchDeleter(final String batchId) throws EvrythngClientException {

        return delete(String.format(PATH_BATCH, batchId));
    }

    /**
     * Creates a new {@link TaskOnBatch} to be completed asynchronously on a batch.
     * <p>
     * POST {@value #PATH_BATCH_TASKS}
     *
     * @param batchId batch id
     * @param task the instance holding the {@link TaskOnBatch} resource data
     * @return a preconfigured {@link Builder}
     */
    public Builder<AcceptedResourceResponse> taskCreator(final String batchId, final TaskOnBatch task)
            throws EvrythngClientException {

        return postAsynchronously(String.format(PATH_BATCH_TASKS, batchId), task, Pattern.compile(".*/([^/]*)$"));
    }

    /**
     * Retrieves {@link TaskOnBatch} resources of the batch.
     * <p>
     * GET {@value #PATH_BATCH_TASKS}
     *
     * @param batchId batch id
     * @return a preconfigured {@link Builder}
     */
    public Builder<List<TaskOnBatch>> tasksReader(final String batchId) throws EvrythngClientException {

        return get(String.format(PATH_BATCH_TASKS, batchId), new TypeReference<List<TaskOnBatch>>() {

        });
    }

    /**
     * Retrieves the referenced {@link TaskOnBatch} of the batch.
     * <p>
     * GET {@value #PATH_BATCH_TASK}
     *
     * @param batchId batch id
     * @param taskId task id
     * @return a preconfigured {@link Builder}
     */
    public Builder<TaskOnBatch> taskReader(final String batchId, final String taskId)
            throws EvrythngClientException {

        return get(String.format(PATH_BATCH_TASK, batchId, taskId), new TypeReference<TaskOnBatch>() {

        });
    }

    /**
     * Retrieves the {@link JobLogEntry} elements generated by the task.
     * <p>
     * GET {@value #PATH_BATCH_TASK_LOGS}
     *
     * @param batchId batch id
     * @param taskId task id
     * @return a preconfigured {@link Builder}
     */
    public Builder<List<JobLogEntry>> logsReader(final String batchId, final String taskId)
            throws EvrythngClientException {

        return get(String.format(PATH_BATCH_TASK_LOGS, batchId, taskId), LogsListReference.instance());
    }
}