Package com.bazaarvoice.cms.client

Source Code of com.bazaarvoice.cms.client.CmsClient

package com.bazaarvoice.cms.client;

import com.bazaarvoice.cms.client.exception.CmsApiException;
import com.bazaarvoice.cms.client.exception.CmsException;
import com.bazaarvoice.cms.client.exception.CmsNetworkException;
import com.bazaarvoice.cms.client.jersey.JerseyClientFactory;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.filter.LoggingFilter;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import java.util.Date;
import java.util.List;

public class CmsClient {
    private final Client jerseyClient;
    private final Signer signer;
    private final CmsClientConfig config;

    private static final String URL_PATH = "/moderation/api/1/submission/";

    public CmsClient(CmsClientConfig config) {
        this.config = config;
        this.signer = new Signer(config.getSecretKey());
        this.jerseyClient = JerseyClientFactory.createClient(config);
    }

    public void setDebugOn() {
        this.jerseyClient.addFilter(new LoggingFilter(System.out));
    }


    protected WebResource.Builder sign(WebResource.Builder builder,String jsonRequest) {
        String date = new Date().toString();
        String signature = null;
        if (jsonRequest!=null) {
            signature = signer.sign(date, jsonRequest);
        } else {
            signature = signer.sign(date);
        }

        return builder.header(HttpHeaderFieldNames.API_KEY, config.getApiKey())
                .header(HttpHeaderFieldNames.DATE, date)
                .header(HttpHeaderFieldNames.SIGNATURE, signature)
                .header(HttpHeaderFieldNames.PASS_KEY, config.getApiKey());
    }

    public String submitContent(Submission request)
            throws CmsException {

        try {
            String jsonRequest = JsonHelper.toJson(request);

            WebResource.Builder builder = jerseyClient.resource(config.getHostAndPort() + URL_PATH + "content")
                    .type(MediaType.APPLICATION_JSON_TYPE);
            builder = sign(builder, jsonRequest);
            return builder.post(String.class, jsonRequest);
        } catch (UniformInterfaceException e) {
            throw new CmsApiException(e.getMessage(), e.getResponse().getStatus());
        } catch (ClientHandlerException e) {
            throw new CmsNetworkException(e.getMessage(), e);
        } catch (Exception e) {
            throw new CmsException(e.getMessage(), e);
        }
    }

    public List<String> submitContentBatch(List<Submission> requests)
            throws CmsException {

        try {
            String jsonRequest = JsonHelper.toJson(requests);
            WebResource.Builder builder = jerseyClient.resource(config.getHostAndPort() + URL_PATH + "content/batch")
                    .type(MediaType.APPLICATION_JSON_TYPE);
            builder = sign(builder,jsonRequest);
            return builder.post(List.class, jsonRequest);

        } catch (UniformInterfaceException e) {
            throw new CmsApiException(e.getMessage(), e.getResponse().getStatus());
        } catch (ClientHandlerException e) {
            throw new CmsNetworkException(e.getMessage(), e);
        } catch (Exception e) {
            throw new CmsException(e.getMessage(), e);
        }
    }

    public DecisionResponse getCurrentInfoForDebugging(String submissionId)
            throws CmsException {

        try {
            UriBuilder uriBuilder = jerseyClient.resource(config.getHostAndPort()).getUriBuilder();
            uriBuilder.path(URL_PATH + "content/{s}");

            WebResource.Builder builder = jerseyClient.resource(uriBuilder.build(submissionId))
                    .type(MediaType.APPLICATION_JSON_TYPE);
            builder = sign(builder,null);
            return builder.get(DecisionResponse.class);

        } catch (UniformInterfaceException e) {
            throw new CmsApiException(e.getMessage(), e.getResponse().getStatus());
        } catch (ClientHandlerException e) {
            throw new CmsNetworkException(e.getMessage(), e);
        } catch (Exception e) {
            throw new CmsException(e.getMessage(), e);
        }
    }

    public String cancelDecisions(List<String> submissionIds)
            throws CmsException {

        try {
            String jsonRequest = JsonHelper.toJson(submissionIds);
            WebResource.Builder builder = jerseyClient.resource(config.getHostAndPort() + URL_PATH + "content/cancel")
                    .type(MediaType.APPLICATION_JSON_TYPE);
            builder = sign(builder,jsonRequest);
            return builder.post(String.class, jsonRequest);
        } catch (UniformInterfaceException e) {
            throw new CmsApiException(e.getMessage(), e.getResponse().getStatus());
        } catch (ClientHandlerException e) {
            throw new CmsNetworkException(e.getMessage(), e);
        } catch (Exception e) {
            throw new CmsException(e.getMessage(), e);
        }
    }

    public DecisionResponse getNextDecision()
            throws CmsException {
        return getNextDecision(null);
    }

    public DecisionResponse getNextDecision(String accountSegment)
            throws CmsException {

        try {
            UriBuilder uriBuilder = jerseyClient.resource(config.getHostAndPort() + URL_PATH + "decision/next").getUriBuilder();
            if (accountSegment != null) {
                uriBuilder.queryParam("accountSegment", accountSegment);
            }
            WebResource.Builder builder = jerseyClient.resource(uriBuilder.build())
                    .type(MediaType.APPLICATION_JSON_TYPE);
            builder = sign(builder,null);
            return builder.get(DecisionResponse.class);
        } catch (UniformInterfaceException e) {
            throw new CmsApiException(e.getMessage(), e.getResponse().getStatus());
        } catch (ClientHandlerException e) {
            throw new CmsNetworkException(e.getMessage(), e);
        } catch (Exception e) {
            throw new CmsException(e.getMessage(), e);
        }
    }

    public String acknowledgeDecision(String decisionUuid, String contentSubmissionUuid)
            throws CmsException {

        if (contentSubmissionUuid == null) {
            return "SUCCESS";
        }

        try {
            UriBuilder uriBuilder = jerseyClient.resource(config.getHostAndPort() + URL_PATH + "decision").getUriBuilder();
            uriBuilder.queryParam("contentSubmissionUuid", contentSubmissionUuid);

            WebResource.Builder builder = jerseyClient.resource(uriBuilder.build())
                    .type(MediaType.APPLICATION_JSON_TYPE);
            builder = sign(builder,decisionUuid);
            return builder.post(String.class, decisionUuid);
        } catch (UniformInterfaceException e) {
            throw new CmsApiException(e.getMessage(), e.getResponse().getStatus());
        } catch (ClientHandlerException e) {
            throw new CmsNetworkException(e.getMessage(), e);
        } catch (Exception e) {
            throw new CmsException(e.getMessage(), e);
        }
    }

    public String acknowledgeDecision(DecisionResponse decision)
            throws CmsException {
        return acknowledgeDecision(decision.getDecisionAckUuid(),decision.getSubmissionUuid());
    }
}
TOP

Related Classes of com.bazaarvoice.cms.client.CmsClient

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.