Package com.impetus.kundera.rest.dao

Source Code of com.impetus.kundera.rest.dao.RESTClientImpl

/**
* Copyright 2012 Impetus Infotech.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.impetus.kundera.rest.dao;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

import javax.ws.rs.core.MediaType;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.impetus.kundera.rest.common.Constants;
import com.impetus.kundera.rest.common.StreamUtils;
import com.sun.jersey.api.client.ClientHandlerException;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.UniformInterfaceException;
import com.sun.jersey.api.client.WebResource;

/**
* REST Client implementation for test cases
*
* @see RESTClient
* @author amresh.singh
*/
public class RESTClientImpl implements RESTClient {
    private static Logger log = LoggerFactory.getLogger(RESTClientImpl.class);

    private WebResource webResource = null;

    private String mediaType;

    @Override
    public void initialize(WebResource wr, String mediaType) {
        this.webResource = wr;
        this.mediaType = mediaType;
    }

    @Override
    public String getApplicationToken(String persistenceUnit, String externalProperties) {
        String applicationToken;
        try {
            log.debug("\n\nGetting Application Token...");
            WebResource.Builder atBuilder =
                webResource.path(Constants.KUNDERA_API_PATH + "/application/" + persistenceUnit).accept(mediaType)
                    .type(mediaType);
            StringBuffer sb = new StringBuffer().append(externalProperties);
            ClientResponse insertResponse = (ClientResponse) atBuilder.post(ClientResponse.class, sb.toString());

            InputStream is = insertResponse.getEntityInputStream();
            applicationToken = StreamUtils.toString(is);

            log.debug("Application Token:" + applicationToken);
        } catch (UniformInterfaceException e) {
            log.error("Error during getApplicationToken, Caused by:" + e.getMessage() + ", returning null");
            return null;
        } catch (ClientHandlerException e) {
            log.error("Error during getApplicationToken, Caused by:" + e.getMessage() + ", returning null");
            return null;
        }
        return applicationToken;
    }

    @Override
    public String closeApplication(String applicationToken) {
        log.debug("\n\nClosing Application for Token:" + applicationToken);
        WebResource.Builder atBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/application").type(mediaType).accept(mediaType)
                .header(Constants.APPLICATION_TOKEN_HEADER_NAME, applicationToken);
        String response = atBuilder.delete(String.class);
        log.debug("Application Closure Response: " + response);
        return response;
    }

    @Override
    public String getSessionToken(String applicationToken) {
        log.debug("\n\nGetting Session Token...");
        WebResource.Builder stBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/session").type(mediaType).accept(mediaType)
                .header(Constants.APPLICATION_TOKEN_HEADER_NAME, applicationToken);

        String sessionToken = stBuilder.get(String.class);

        log.debug("Session Token:" + sessionToken);
        return sessionToken;
    }

    @Override
    public String closeSession(String sessionToken) {

        log.debug("\n\nClosing Session for Token:" + sessionToken);
        WebResource.Builder stBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/session").type(mediaType).accept(mediaType)
                .header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        String response = stBuilder.delete(String.class);
        log.debug("Session Deletion Response: " + response);
        return response;
    }

    @Override
    public String insertEntity(String sessionToken, String entityStr, String entityClassName) {
        log.debug("\n\nInserting Entity...");

        WebResource.Builder insertBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/" + entityClassName).type(mediaType).accept(mediaType)
                .header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        StringBuffer sb = new StringBuffer().append(entityStr);
        ClientResponse insertResponse = (ClientResponse) insertBuilder.post(ClientResponse.class, sb.toString());
        log.debug("Response From Insert Entity: " + insertResponse);
        return insertResponse.toString();
    }

    @Override
    public String findEntity(String sessionToken, String pk, String entityClassName) {
        log.debug("\n\nFinding Entity...");
        WebResource.Builder findBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/" + entityClassName + "/" + pk).accept(mediaType)
                .type(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);

        ClientResponse findResponse = (ClientResponse) findBuilder.get(ClientResponse.class);

        InputStream is = findResponse.getEntityInputStream();
        String entityStr = StreamUtils.toString(is);

        log.debug("Found Entity:" + entityStr);
        return entityStr;
    }

    @Override
    public String updateEntity(String sessionToken, String newEntityStr, String entityClassName) {
        log.debug("\n\nUpdating Entity... " + newEntityStr);
        WebResource.Builder updateBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/" + entityClassName).type(mediaType).accept(mediaType)
                .header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse updateResponse = updateBuilder.put(ClientResponse.class, newEntityStr);
        InputStream is = updateResponse.getEntityInputStream();
        String updatedEntityStr = StreamUtils.toString(is);
        log.debug("Updated Entity: " + updatedEntityStr);
        return updatedEntityStr;
    }

    @Override
    public void deleteEntity(String sessionToken, String entityStr, String pk, String entityClassName) {
        log.debug("\n\nDeleting Entity... " + entityStr);
        WebResource.Builder deleteBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/" + entityClassName + "/delete/" + pk)
                .accept(MediaType.TEXT_PLAIN).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse deleteResponse = (ClientResponse) deleteBuilder.delete(ClientResponse.class);
        log.debug("Delete Response:" + deleteResponse.getStatus());
    }

    @Override
    public String runJPAQuery(String sessionToken, String jpaQuery, Map<String, Object> params) {
        log.debug("\n\nRunning JPA Query... ");

        String paramsStr = buildParamString(params);
        WebResource.Builder queryBuilder =
            webResource
                .path(Constants.KUNDERA_API_PATH + Constants.JPA_QUERY_RESOURCE_PATH + "/" + jpaQuery + paramsStr)
                .type(mediaType).accept(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse queryResponse = (ClientResponse) queryBuilder.post(ClientResponse.class);
        log.debug("Query Response:" + queryResponse.getStatus());

        InputStream is = queryResponse.getEntityInputStream();

        String allStr = StreamUtils.toString(is);

        log.debug("Found Entities:" + allStr);
        return allStr;
    }

    @Override
    public String runObjectJPAQuery(String sessionToken, String jpaQuery, Map<String, Object> params) {
        log.debug("\n\nRunning JPA Query... ");

        String paramsStr = buildObjectParamString(params);

        WebResource.Builder queryBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + Constants.JPA_QUERY_RESOURCE_PATH + "/" + jpaQuery)
                .type(mediaType).accept(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse queryResponse = (ClientResponse) queryBuilder.post(ClientResponse.class, paramsStr);

        log.debug("Query Response:" + queryResponse.getStatus());

        InputStream is = queryResponse.getEntityInputStream();

        String allStr = StreamUtils.toString(is);

        log.debug("Found Entities:" + allStr);
        return allStr;
    }

    private String buildObjectParamString(Map<String, Object> params) {

        ObjectMapper mapper = new ObjectMapper();

        String parameterString = null;
        // convert map to JSON string
        try {
            parameterString = mapper.writeValueAsString(params);
        } catch (JsonGenerationException e) {
            log.error(e.getMessage());
        } catch (JsonMappingException e) {
            log.error(e.getMessage());
        } catch (IOException e) {
            log.error(e.getMessage());
        }
        return parameterString;
    }

    @Override
    public String runNamedJPAQuery(String sessionToken, String entityClassName, String namedQuery,
        Map<String, Object> params) {
        log.debug("\n\nRunning Named JPA Query " + namedQuery + "... ");

        String paramsStr = buildParamString(params);

        WebResource wr =
            webResource.path(Constants.KUNDERA_API_PATH + Constants.JPA_QUERY_RESOURCE_PATH + "/" + entityClassName
                + "/" + namedQuery + paramsStr);

        WebResource.Builder queryBuilder =
            wr.accept(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken).type(mediaType);

        ClientResponse queryResponse = (ClientResponse) queryBuilder.get(ClientResponse.class);
        log.debug("Query Response:" + queryResponse.getStatus());

        InputStream is = queryResponse.getEntityInputStream();
        String allBookStr = StreamUtils.toString(is);

        log.debug("Found Entities for query " + namedQuery + ":" + allBookStr);
        return allBookStr;
    }

    @Override
    public String runNativeQuery(String sessionToken, String entityClassName, String nativeQuery,
        Map<String, Object> params) {
        log.debug("\n\nRunning Native Query... ");

        String paramsStr = buildParamString(params);
        WebResource.Builder queryBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + Constants.NATIVE_QUERY_RESOURCE_PATH + entityClassName)
                .accept(mediaType).type(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);

        ClientResponse queryResponse = (ClientResponse) queryBuilder.post(ClientResponse.class, nativeQuery);
        log.debug("Query Response:" + queryResponse.getStatus());

        InputStream is = queryResponse.getEntityInputStream();

        String allStr = StreamUtils.toString(is);

        log.debug("Found Entities:" + allStr);
        return allStr;
    }

    @Override
    public String runNamedNativeQuery(String sessionToken, String entityClassName, String namedNativeQuery,
        Map<String, Object> params) {
        log.debug("\n\nRunning Named Native JPA Query " + namedNativeQuery + "... ");

        String paramsStr = buildParamString(params);

        WebResource wr =
            webResource.path(Constants.KUNDERA_API_PATH + Constants.NATIVE_QUERY_RESOURCE_PATH + entityClassName + "/"
                + namedNativeQuery + paramsStr);

        WebResource.Builder queryBuilder =
            wr.accept(mediaType).type(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);

        ClientResponse queryResponse = (ClientResponse) queryBuilder.get(ClientResponse.class);
        log.debug("Query Response:" + queryResponse.getStatus());

        InputStream is = queryResponse.getEntityInputStream();
        String allBookStr = StreamUtils.toString(is);

        log.debug("Found Entities for query " + namedNativeQuery + ":" + allBookStr);
        return allBookStr;
    }

    @Override
    public String getAllEntities(String sessionToken, String entityClassName) {
        log.debug("\n\nFinding all Entities... ");
        WebResource.Builder queryBuilder =
            webResource
                .path(Constants.KUNDERA_API_PATH + Constants.JPA_QUERY_RESOURCE_PATH + "/" + entityClassName + "/all")
                .accept(mediaType).type(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse queryResponse = (ClientResponse) queryBuilder.get(ClientResponse.class);
        log.debug("Find All Response:" + queryResponse.getStatus());

        InputStream is = queryResponse.getEntityInputStream();
        // List books = (List) JAXBUtils.toObject(is, ArrayList.class,
        // MediaType.APPLICATION_XML);

        String allEntitiesStr = StreamUtils.toString(is);

        log.debug("Found All Entities:" + allEntitiesStr);
        return allEntitiesStr;
    }

    @Override
    public String getSchemaList(String sessionToken, String persistenceUnit) {
        log.debug("\n\nGetting Schema List for PU :" + persistenceUnit);
        WebResource.Builder slBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/metadata/schemaList/" + persistenceUnit).accept(mediaType)
                .header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse schemaResponse = (ClientResponse) slBuilder.get(ClientResponse.class);

        InputStream is = schemaResponse.getEntityInputStream();
        String schemaList = StreamUtils.toString(is);

        log.debug("Schema List:" + schemaList);
        return schemaList;
    }

    @Override
    public String insertPerson(String sessionToken, String personStr) {

        log.debug("\n\nInserting Entity...");
        WebResource.Builder insertBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/PersonnelUni1ToM").type(mediaType).accept(mediaType)
                .header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        StringBuffer sb = new StringBuffer().append(personStr);
        ClientResponse insertResponse = (ClientResponse) insertBuilder.post(ClientResponse.class, sb.toString());
        log.debug("Response From Insert person: " + insertResponse);
        return insertResponse.toString();

    }

    @Override
    public String findPerson(String sessionToken, String isbn) {

        log.debug("\n\nFinding Entity...");
        WebResource.Builder findBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/PersonnelUni1ToM/" + isbn).accept(mediaType)
                .type(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ;

        ClientResponse findResponse = (ClientResponse) findBuilder.get(ClientResponse.class);

        InputStream is = findResponse.getEntityInputStream();
        String personkStr = StreamUtils.toString(is);

        log.debug("Found Entity:" + personkStr);
        return personkStr;
    }

    @Override
    public String updatePerson(String sessionToken, String oldPersonStr) {

        log.debug("\n\nUpdating Entity... " + oldPersonStr);
        oldPersonStr = oldPersonStr.replaceAll("XXXXXXXXX", "YYYYYYYYY");
        WebResource.Builder updateBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/PersonnelUni1ToM").type(mediaType).accept(mediaType)
                .header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse updateResponse = updateBuilder.put(ClientResponse.class, oldPersonStr);
        InputStream is = updateResponse.getEntityInputStream();
        String updatedPersonStr = StreamUtils.toString(is);
        log.debug("Updated Person: " + updatedPersonStr);
        return updatedPersonStr;

    }

    @Override
    public String getAllPersons(String sessionToken) {
        log.debug("\n\nFinding all Entities... ");
        WebResource.Builder queryBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + Constants.JPA_QUERY_RESOURCE_PATH + "/PersonnelUni1ToM/all")
                .type(mediaType).accept(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse queryResponse = (ClientResponse) queryBuilder.get(ClientResponse.class);
        log.debug("Find All Response:" + queryResponse.getStatus());

        InputStream is = queryResponse.getEntityInputStream();
    
        String allPersonStr = StreamUtils.toString(is);

        log.debug("Found All Entities:" + allPersonStr);
        return allPersonStr;
    }

    @Override
    public void deletePerson(String sessionToken, String updatedPerson, String isbn) {
        log.debug("\n\nDeleting Entity... " + updatedPerson);
        WebResource.Builder deleteBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/crud/PersonnelUni1ToM/delete/" + isbn).accept(mediaType)
                .type(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse deleteResponse = (ClientResponse) deleteBuilder.delete(ClientResponse.class);
        log.debug("Delete Response:" + deleteResponse.getStatus());
    }

    /**
     * @param params
     * @return
     */
    private String buildParamString(Map<String, Object> params) {
        String paramsStr = "";
        if (params != null && !params.isEmpty()) {
            paramsStr += "?";

            for (String paramName : params.keySet()) {
                if (paramsStr.length() == 1) {
                    paramsStr += (paramName + "=" + params.get(paramName));
                } else {
                    paramsStr += ("&" + paramName + "=" + params.get(paramName));
                }
            }
        }
        return paramsStr;
    }

    @Override
    public String getEntityModel(String sessionToken, String entityClassName) {
        log.debug("\n\nGetting model for class :" + entityClassName);
        WebResource.Builder insertBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + "/metadata/" + entityClassName).accept(mediaType)
                .header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        StringBuffer sb = new StringBuffer();
        ClientResponse insertResponse = (ClientResponse) insertBuilder.post(ClientResponse.class, sb.toString());

        InputStream is = insertResponse.getEntityInputStream();
        String model = StreamUtils.toString(is);

        log.debug("Entity Model:" + model);
        return model;
    }

    @Override
    public String runNativeScript(String sessionToken, String nativeScript, String persistenceUnit) {

        log.debug("\n\nUpdating Entity... " + nativeScript);
        WebResource.Builder updateBuilder =
            webResource.path(Constants.KUNDERA_API_PATH + Constants.NATIVE_QUERY_RESOURCE_PATH + persistenceUnit)
                .type(mediaType).accept(mediaType).header(Constants.SESSION_TOKEN_HEADER_NAME, sessionToken);
        ClientResponse updateResponse = updateBuilder.put(ClientResponse.class, nativeScript);
        InputStream is = updateResponse.getEntityInputStream();
        String updatedEntityStr = StreamUtils.toString(is);
        log.debug("Updated Entity: " + updatedEntityStr);
        return updatedEntityStr;
    }

}
TOP

Related Classes of com.impetus.kundera.rest.dao.RESTClientImpl

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.