/* * (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.param.EvrythngIdQueryParamValue; import com.evrythng.java.wrapper.core.http.Status; import com.evrythng.java.wrapper.exception.EvrythngClientException; import com.evrythng.thng.resource.model.li.UrlBinding; import com.fasterxml.jackson.core.type.TypeReference; import java.io.InputStream; import java.util.List; /** * Service wrapper for the {@code /redirections} endpoint. **/ @SuppressWarnings("AnonymousInnerClassMayBeStatic") public class UrlBindingService extends EvrythngServiceBase { public static final String PATH_URLS = "/redirections"; public static final String PATH_URL_BINDING = PATH_URLS + "/%s"; public static final String PATH_URL_BINDING_QR = PATH_URLS + "/%s.qr"; /** * @param api {@link ApiManager} instance */ public UrlBindingService(final ApiManager api) { super(api); } /** * Creates url binding. * * @param binding {@link UrlBinding} instance. * * @return a preconfigured {@link Builder}. */ public Builder<UrlBinding> bindingCreator(final UrlBinding binding) throws EvrythngClientException { return post(PATH_URLS, binding, new TypeReference<UrlBinding>() { }); } /** * Reads url bindings. * * @return a preconfigured {@link Builder}. */ public Builder<List<UrlBinding>> bindingsReader() throws EvrythngClientException { return get(PATH_URLS, new TypeReference<List<UrlBinding>>() { }); } /** * Creates url binding. Qr image is returned. * * @param binding {@link UrlBinding} instance. * * @return a preconfigured {@link Builder}. */ public Builder<InputStream> bindingCreatorReturnQr(final UrlBinding binding) throws EvrythngClientException { return post(PATH_URLS, binding, Status.OK, new TypeReference<InputStream>() { }).accept("image/png"); } /** * Reads url bindings mapped to evrythng id provided. * * @param evrythngId id of evrythng resource. * * @return a preconfigured {@link Builder}. */ public Builder<List<UrlBinding>> bindingsReader(final String evrythngId) throws EvrythngClientException { return super.get(PATH_URLS, new TypeReference<List<UrlBinding>>() { }).queryParam(EvrythngIdQueryParamValue.id(evrythngId)); } /** * Reads url binding by short id. * * @param shortId short id. * * @return a preconfigured {@link Builder}. */ public Builder<UrlBinding> bindingReader(final String shortId) throws EvrythngClientException { return get(String.format(PATH_URL_BINDING, shortId), new TypeReference<UrlBinding>() { }); } /** * Updates url binding. * * @param shortId short id. * @param binding {@link UrlBinding} instance. * * @return a preconfigured {@link Builder}. */ public Builder<UrlBinding> bindingUpdater(final String shortId, final UrlBinding binding) throws EvrythngClientException { return put(String.format(PATH_URL_BINDING, shortId), binding, new TypeReference<UrlBinding>() { }); } /** * Deletes url binding. * * @param shortId short id * * @return a preconfigured {@link Builder}. */ public Builder<Boolean> bindingDeleter(final String shortId) throws EvrythngClientException { return delete(String.format(PATH_URL_BINDING, shortId)); } /** * Reads qr code. * * @param shortId short id. * @param type {@link QrCodeType} type. * * @return a preconfigured {@link Builder}. */ public Builder<InputStream> bindingQrCodeReader(final String shortId, final QrCodeType type) throws EvrythngClientException { String accept; switch (type) { case PDF: accept = "application/pdf"; break; case SVG: accept = "image/svg+xml"; break; case PNG: default: accept = "image/png"; break; } return get(String.format(PATH_URL_BINDING_QR, shortId), new TypeReference<InputStream>() { }).accept(accept); } /** * Updates url bindings by ids. Use query parameter ?ids. * * @param update {@link UrlBinding} instance. * * @return a preconfigured {@link Builder}. */ public Builder<Long> bindingsUpdater(final UrlBinding update) throws EvrythngClientException { return put(PATH_URLS, update, new TypeReference<Long>() { }); } /** * Deletes bindings. Select the {@link UrlBinding}s to delete using query parameters ?ids or ?filter. * * @return a preconfigured {@link Builder}. */ public Builder<Long> bindingsDeleter() throws EvrythngClientException { return deleteMultiple(PATH_URLS); } }