/*
* (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.QueryParamValue;
import com.evrythng.java.wrapper.core.http.Status;
import com.evrythng.java.wrapper.exception.EvrythngException;
import com.evrythng.thng.resource.model.li.UrlBinding;
import com.fasterxml.jackson.core.type.TypeReference;
import java.io.IOException;
import java.io.InputStream;
/**
*
**/
public class ScanService extends EvrythngServiceBase {
public static final String PATH_SCAN = "/scan";
public static final String PATH_SCAN_RECOGNITIONS = PATH_SCAN + "/recognitions";
public static final String PATH_SCAN_BARCODE = PATH_SCAN + "/barcode";
public enum RecognitionType {
ONEDBARCODE("1dbarcode"),
QRCODE("qrcode"),
OBJPIC("objpic"),
DATAMATRIX("datamatrix"),
AUTODETECT("autodetect");
private final String queryParam;
public final static String TYPE_QUERY_PARAM_KEY = "type";
RecognitionType(final String queryParam) {
this.queryParam = queryParam;
}
public QueryParamValue getQueryParam() {
return new QueryParamValue(TYPE_QUERY_PARAM_KEY, this.queryParam);
}
}
/**
* @param api {@link ApiManager} instance
*/
public ScanService(final ApiManager api) {
super(api);
}
/**
* POST {@value #PATH_SCAN_RECOGNITIONS}
* <p>
* Scan a Base64 image. Return the corresponding binding in
*
* @param base64Image base64 encoded image, with mime type header.
* @return a preconfigured {@link Builder}
*/
public Builder<UrlBinding> recognitionCreator(final String base64Image) throws EvrythngException {
return recognitionCreator(base64Image, RecognitionType.AUTODETECT);
}
/**
* POST {@value #PATH_SCAN_RECOGNITIONS}
* <p>
* Identify a Base64 image. Return the corresponding bindings
*
* @param base64Image base64 encoded image, with mime type header.
* @param type one available {@link RecognitionType}
* @return a preconfigured {@link Builder}
*/
public Builder<UrlBinding> recognitionCreator(final String base64Image, final RecognitionType type) throws EvrythngException {
UrlBinding imageInBinding = new UrlBinding();
imageInBinding.setImage(base64Image);
return recognitionCreator(imageInBinding, type);
}
/**
* POST {@value #PATH_SCAN_RECOGNITIONS}
* <p>
* Identify an image. Return the corresponding bindings
*
* @param image Image as an input stream.
* @param mime mime type
* @param type one available {@link RecognitionType}
* @return a preconfigured {@link Builder}
*/
public Builder<UrlBinding> recognitionCreator(final InputStream image, final String mime, final RecognitionType type) throws EvrythngException, IOException {
String mimeAndB64 = encodeBase64(image, mime);
return recognitionCreator(mimeAndB64, type);
}
/**
* POST {@value #PATH_SCAN_RECOGNITIONS}
* <p>
* Identify an image. Return the corresponding bindings
*
* @param imageInBinding image {@link UrlBinding} instance
* @return a preconfigured {@link Builder}
*/
public Builder<UrlBinding> recognitionCreator(final UrlBinding imageInBinding) throws EvrythngException {
return recognitionCreator(imageInBinding, RecognitionType.AUTODETECT);
}
/**
* POST {@value #PATH_SCAN_RECOGNITIONS}
* <p>
* Identify an image. Return the corresponding bindings
*
* @param imageInBinding image {@link UrlBinding} instance
* @param type one available {@link RecognitionType}
* @return a preconfigured {@link Builder}
*/
public Builder<UrlBinding> recognitionCreator(final UrlBinding imageInBinding, final RecognitionType type) throws EvrythngException {
Builder<UrlBinding> result = post(PATH_SCAN_RECOGNITIONS, imageInBinding, Status.OK, new TypeReference<UrlBinding>() {
});
result.queryParam(type.getQueryParam());
return result;
}
/**
* POST {@value #PATH_SCAN_BARCODE}
* <p>
* Scan a barcode. Return the corresponding binding in
*
* @param scanBarcodeData bar code {@link UrlBinding}
* @return a preconfigured {@link Builder}
*/
public Builder<UrlBinding> scanBarcodeCreator(final UrlBinding scanBarcodeData) throws EvrythngException {
return post(PATH_SCAN_BARCODE, scanBarcodeData, Status.OK, new TypeReference<UrlBinding>() {
});
}
}