Package code.satyagraha.gfm.support.impl

Source Code of code.satyagraha.gfm.support.impl.WebServiceClientDefault$Markdown

package code.satyagraha.gfm.support.impl;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
import java.util.logging.Logger;

import javax.ws.rs.core.MediaType;

import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.http.conn.ClientConnectionManager;

import code.satyagraha.gfm.di.Component;
import code.satyagraha.gfm.di.Component.Scope;
import code.satyagraha.gfm.support.api.Config;
import code.satyagraha.gfm.support.api.WebProxyConfig;
import code.satyagraha.gfm.support.api.WebProxyConfig.WebProxyData;
import code.satyagraha.gfm.support.api.WebServiceClient;
import code.satyagraha.gfm.support.impl.conn.ConnUtilities;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
import com.sun.jersey.api.client.filter.LoggingFilter;
import com.sun.jersey.client.apache4.ApacheHttpClient4;
import com.sun.jersey.client.apache4.config.DefaultApacheHttpClient4Config;

@Component(Scope.PLUGIN)
public class WebServiceClientDefault implements WebServiceClient {

    private static Logger LOGGER = Logger.getLogger(WebServiceClientDefault.class.getPackage().getName());

    private final Config config;
    private final WebProxyConfig webProxyConfig;
    private final ClientConnectionManager connectionManager;

    public static class Markdown {
        public String text;

        public Markdown() {
        }

        public Markdown(String text) {
            this.text = text;
        }

        @Override
        public String toString() {
            return ReflectionToStringBuilder.toString(this);
        }
    }

    public WebServiceClientDefault(Config config, WebProxyConfig webProxyConfig, ClientConnectionManager connectionManager) {
        this.config = config;
        this.webProxyConfig = webProxyConfig;
        this.connectionManager = connectionManager;
        LOGGER.fine("");
    }

    @Override
    public String transform(String mdText) {
        if (StringUtils.isBlank(config.getApiUrl())) {
            String responseText = String.format("<pre>\n%s\n</pre>", StringEscapeUtils.escapeHtml4(mdText));
            return responseText;
        }

        Client client = getClient(config.getApiUrl());
        LOGGER.fine("client: " + client);

        String username = config.getUsername();
        if (username != null && username.length() > 0) {
            String password = config.getPassword();
            client.removeFilter(null);
            client.addFilter(new HTTPBasicAuthFilter(username, password));
        }
        client.addFilter(new LoggingFilter(LOGGER));

        WebResource webResource = client.resource(config.getApiUrl());
        Markdown markdown = new Markdown(mdText);
        ClientResponse response = webResource.path("markdown").type(MediaType.APPLICATION_JSON).entity(markdown).accept(MediaType.TEXT_HTML)
                .post(ClientResponse.class);
        String responseText = response.getEntity(String.class);
        return responseText;
    }

    private Client getClient(String endpoint) {
        // set up standard properties
        DefaultApacheHttpClient4Config clientConfig = new DefaultApacheHttpClient4Config();
        Map<String, Object> clientProperties = clientConfig.getProperties();
        clientProperties.put(ClientConfig.PROPERTY_FOLLOW_REDIRECTS, true);
        clientConfig.getClasses().addAll(ConnUtilities.getJerseyProviders());

        // see if proxy needed
        URI uri;
        try {
            uri = new URI(endpoint);
        } catch (URISyntaxException e) {
            throw new RuntimeException(e);
        }
        WebProxyData webProxyData = webProxyConfig.getWebProxyData(uri);
        if (webProxyData != null) {
            if (webProxyData.getProxyUri() != null) {
                clientProperties.put(DefaultApacheHttpClient4Config.PROPERTY_PROXY_URI, webProxyData.getProxyUri());
                if (webProxyData.getUserId() != null) {
                    clientProperties.put(DefaultApacheHttpClient4Config.PROPERTY_PROXY_USERNAME, webProxyData.getUserId());
                    if (webProxyData.getPassword() != null) {
                        clientProperties.put(DefaultApacheHttpClient4Config.PROPERTY_PROXY_PASSWORD, webProxyData.getPassword());
                    }
                }
            }
        }

        // set up client properties
        clientProperties.put(DefaultApacheHttpClient4Config.PROPERTY_CONNECTION_MANAGER, connectionManager);
        LOGGER.fine("clientProperties(): " + clientProperties);

        // build client
        Client client = ApacheHttpClient4.create(clientConfig);
        return client;
    }

}
TOP

Related Classes of code.satyagraha.gfm.support.impl.WebServiceClientDefault$Markdown

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.