Package org.kie.server.client

Source Code of org.kie.server.client.KieServicesClient

package org.kie.server.client;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ContextResolver;

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.DefaultHttpClient;
import org.codehaus.jackson.map.ObjectMapper;
import org.jboss.resteasy.client.ClientRequest;
import org.jboss.resteasy.client.ClientResponse;
import org.jboss.resteasy.client.ClientResponseFailure;
import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor;
import org.jboss.resteasy.spi.ResteasyProviderFactory;
import org.jboss.resteasy.util.GenericType;
import org.kie.server.api.commands.CommandScript;
import org.kie.server.api.model.KieContainerResource;
import org.kie.server.api.model.KieContainerResourceList;
import org.kie.server.api.model.KieScannerResource;
import org.kie.server.api.model.KieServerInfo;
import org.kie.server.api.model.ReleaseId;
import org.kie.server.api.model.ServiceResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class KieServicesClient {

    private static final Logger logger = LoggerFactory.getLogger(KieServicesClient.class);
   
    private final String baseURI;
    private final String username;
    private final String password;
    private final MediaType mediaType;

    public KieServicesClient(String baseURI) {
        this( baseURI, null, null, MediaType.APPLICATION_XML_TYPE );
    }

    public KieServicesClient(String baseURI, MediaType mediaType) {
        this( baseURI, null, null, mediaType );
    }

    public KieServicesClient(String baseURI, String username, String password) {
        this( baseURI, username, password, MediaType.APPLICATION_XML_TYPE );
    }

    static {

        try {
            ResteasyProviderFactory factory = ResteasyProviderFactory.getInstance();
            ContextResolver<ObjectMapper> contextResolver = new JacksonConfig();
            factory.addContextResolver(contextResolver);
        } catch (Throwable e) {
            logger.warn("Unable to add context resolver due to {}", e.getMessage());
        }
    }

    public KieServicesClient(String baseURI, String username, String password, MediaType mediaType) {
        this.baseURI = baseURI;
        this.username = username;
        this.password = password;
        this.mediaType = mediaType;
    }

    public ServiceResponse<KieServerInfo> getServerInfo() throws ClientResponseFailure {
        ClientResponse<ServiceResponse<KieServerInfo>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI);
            response = clientRequest.get(new GenericType<ServiceResponse<KieServerInfo>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception retrieving server info.", e, response );
        }
    }

    private ClientRequest newRequest(String uri) {
        URI uriObject;
        try {
            uriObject = new URI(uri);
        } catch (URISyntaxException e) {
            throw new RuntimeException("Malformed URI was specified: '" + uri + "'!", e);
        }
        if (username == null || password == null) {
            return new ClientRequest(uri).accept(mediaType);
        } else {
            CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
            credentialsProvider.setCredentials(
                    new AuthScope(uriObject.getHost(), uriObject.getPort()),
                    new UsernamePasswordCredentials(username, password)
            );

            DefaultHttpClient client = new DefaultHttpClient();
            client.setCredentialsProvider(credentialsProvider);
            ApacheHttpClient4Executor executor = new ApacheHttpClient4Executor(client);
            return new ClientRequest(uri, executor).accept(mediaType);
        }
    }

    public ServiceResponse<KieContainerResourceList> listContainers() throws ClientResponseFailure {
        ClientResponse<ServiceResponse<KieContainerResourceList>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers");
            response = clientRequest.get(new GenericType<ServiceResponse<KieContainerResourceList>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception retrieving list of containers.", e, response );
        }
    }

    public ServiceResponse<KieContainerResource> createContainer(String id, KieContainerResource resource) throws ClientResponseFailure {
        ClientResponse<ServiceResponse<KieContainerResource>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers/" + id);
            response = clientRequest.body(mediaType, resource).put(new GenericType<ServiceResponse<KieContainerResource>>(){});
            if( response.getStatus() == Response.Status.CREATED.getStatusCode() ) {
                return response.getEntity();
            } else if( response.getStatus() == Response.Status.BAD_REQUEST.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception creating container: "+id+" with release-id "+resource.getReleaseId(), e, response );
        }
    }

    public ServiceResponse<KieContainerResource> getContainerInfo(String id) throws ClientResponseFailure {
        ClientResponse<ServiceResponse<KieContainerResource>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers/" + id);
            response = clientRequest.get(new GenericType<ServiceResponse<KieContainerResource>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception retrieving container info.", e, response );
        }
    }

    public ServiceResponse<Void> disposeContainer(String id) throws ClientResponseFailure {
        ClientResponse<ServiceResponse<Void>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers/" + id);
            response = clientRequest.delete(new GenericType<ServiceResponse<Void>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception disposing container: "+id, e, response );
        }
    }

    public ServiceResponse<String> executeCommands(String id, String payload) throws ClientResponseFailure {
        ClientResponse<ServiceResponse<String>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers/" + id);
            response = clientRequest.body(mediaType, payload).post(new GenericType<ServiceResponse<String>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception executing commands on container "+id, e, response );
        }
    }

    public List<ServiceResponse<? extends Object>> executeScript(CommandScript script) throws ClientResponseFailure {
        ClientResponse<List<ServiceResponse<? extends Object>>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI);
            response = clientRequest.body(mediaType, script).post(new GenericType<List<ServiceResponse<? extends Object>>>() {});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception retrieving server info.", e, response );
        }
    }
   
    public ServiceResponse<KieScannerResource> getScannerInfo( String id ) {
        ClientResponse<ServiceResponse<KieScannerResource>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers/" + id + "/scanner");
            response = clientRequest.get(new GenericType<ServiceResponse<KieScannerResource>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception retrieving scanner info for container '"+id+"'.", e, response );
        }
    }
   
    public ServiceResponse<KieScannerResource> updateScanner( String id, KieScannerResource resource ) {
        ClientResponse<ServiceResponse<KieScannerResource>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers/" + id + "/scanner");
            response = clientRequest.body(mediaType, resource).post(new GenericType<ServiceResponse<KieScannerResource>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception scanner for container '"+id+"'.", e, response );
        }
    }

    public ServiceResponse<ReleaseId> updateReleaseId(String id, ReleaseId releaseId) {
        ClientResponse<ServiceResponse<ReleaseId>> response = null;
        try {
            ClientRequest clientRequest = newRequest(baseURI + "/containers/" + id + "/release-id");
            response = clientRequest.body(mediaType, releaseId).post(new GenericType<ServiceResponse<ReleaseId>>(){});
            if( response.getStatus() == Response.Status.OK.getStatusCode() ) {
                return response.getEntity();
            }
            throw new ClientResponseFailure("Unexpected response code: "+response.getStatus(), response );
        } catch (ClientResponseFailure e) {
            throw e;
        } catch (Exception e) {
            throw new ClientResponseFailure("Unexpected exception updating releaseId for container '"+id+"'.", e, response );
        }
    }
   
}
TOP

Related Classes of org.kie.server.client.KieServicesClient

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.