gov.nih.nci.cagrid.caarray.client.CaArraySvcClient.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.cagrid.caarray.client.CaArraySvcClient.java

Source

//======================================================================================
// Copyright 5AM Solutions Inc, Yale University
//
// Distributed under the OSI-approved BSD 3-Clause License.
// See http://ncip.github.com/caarray/LICENSE.txt for details.
//======================================================================================
package gov.nih.nci.cagrid.caarray.client;

import gov.nih.nci.caarray.domain.array.AbstractDesignElement;
import gov.nih.nci.caarray.domain.data.AbstractDataColumn;
import gov.nih.nci.caarray.domain.data.BooleanColumn;
import gov.nih.nci.caarray.domain.data.DataRetrievalRequest;
import gov.nih.nci.caarray.domain.data.DataSet;
import gov.nih.nci.caarray.domain.data.DesignElementList;
import gov.nih.nci.caarray.domain.data.DoubleColumn;
import gov.nih.nci.caarray.domain.data.FloatColumn;
import gov.nih.nci.caarray.domain.data.HybridizationData;
import gov.nih.nci.caarray.domain.data.IntegerColumn;
import gov.nih.nci.caarray.domain.data.LongColumn;
import gov.nih.nci.caarray.domain.data.QuantitationType;
import gov.nih.nci.caarray.domain.data.ShortColumn;
import gov.nih.nci.caarray.domain.data.StringColumn;
import gov.nih.nci.caarray.domain.file.CaArrayFile;
import gov.nih.nci.caarray.domain.hybridization.Hybridization;
import gov.nih.nci.caarray.domain.project.Experiment;
import gov.nih.nci.caarray.domain.sample.UserDefinedCharacteristic;
import gov.nih.nci.cagrid.caarray.common.CaArraySvcI;
import gov.nih.nci.cagrid.caarray.util.GridTransferResultHandler;
import gov.nih.nci.cagrid.cqlquery.Attribute;
import gov.nih.nci.cagrid.cqlquery.CQLQuery;
import gov.nih.nci.cagrid.cqlquery.Object;
import gov.nih.nci.cagrid.cqlquery.Predicate;
import gov.nih.nci.cagrid.cqlresultset.CQLQueryResults;
import gov.nih.nci.cagrid.data.faults.MalformedQueryExceptionType;
import gov.nih.nci.cagrid.data.faults.QueryProcessingExceptionType;
import gov.nih.nci.cagrid.data.utilities.CQLQueryResultsIterator;

import java.io.IOException;
import java.io.InputStream;
import java.rmi.RemoteException;
import java.util.List;
import java.util.Set;

import org.apache.axis.client.Stub;
import org.apache.axis.message.addressing.EndpointReferenceType;
import org.apache.axis.types.URI.MalformedURIException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.time.StopWatch;
import org.cagrid.transfer.context.client.TransferServiceContextClient;
import org.cagrid.transfer.context.client.helper.TransferClientHelper;
import org.cagrid.transfer.context.stubs.types.TransferServiceContextReference;
import org.globus.gsi.GlobusCredential;

/**
 * This class is autogenerated, DO NOT EDIT GENERATED GRID SERVICE ACCESS METHODS.
 *
 * This client is generated automatically by Introduce to provide a clean unwrapped API to the
 * service.
 *
 * On construction the class instance will contact the remote service and retrieve it's security
 * metadata description which it will use to configure the Stub specifically for each method call.
 * 
 * @created by Introduce Toolkit version 1.4
 */
public class CaArraySvcClient extends CaArraySvcClientBase implements CaArraySvcI {

    // README
    //
    // Since introduce controls this class, we cannot easily parameterize the main method.
    // Change these values to what matches your local environment.  
    //
    private static final String EXPERIMENT_TITLE = "Test3";
    private static final String QUANTITATION_TYPES_CSV_STRING = "CELX,CELY,CELintensity,CELintensityStdev,CELMask,CELOutlier,CELPixels";
    private static final String CHARACTERISTIC_ID = "1";
    private static final long FILE_ID = 3;

    public CaArraySvcClient(String url) throws MalformedURIException, RemoteException {
        this(url, null);
    }

    public CaArraySvcClient(String url, GlobusCredential proxy) throws MalformedURIException, RemoteException {
        super(url, proxy);
    }

    public CaArraySvcClient(EndpointReferenceType epr) throws MalformedURIException, RemoteException {
        this(epr, null);
    }

    public CaArraySvcClient(EndpointReferenceType epr, GlobusCredential proxy)
            throws MalformedURIException, RemoteException {
        super(epr, proxy);
    }

    public static void usage() {
        System.out.println(CaArraySvcClient.class.getName() + " -url <service url>");
    }

    public static void main(String[] args) {
        System.out.println("Running the Grid Service Client");
        if (args.length < 2 || !args[0].equals("-url")) {
            usage();
            System.exit(1);
        }
        try {
            CaArraySvcClient client = new CaArraySvcClient(args[1]);

            cqlQueryTest(client);
            gridTransferTest(client);
            dataSetTest(client);
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    private static void dataSetTest(CaArraySvcClient client)
            throws RemoteException, QueryProcessingExceptionType, MalformedQueryExceptionType {
        DataRetrievalRequest drr = new DataRetrievalRequest();
        addQuantitationTypes(client, drr, QUANTITATION_TYPES_CSV_STRING);
        addHybsByExperiment(client, drr, EXPERIMENT_TITLE);
        DataSet ds = client.getDataSet(drr);
        introspectDataSet(client, ds);
    }

    private static void gridTransferTest(CaArraySvcClient client) throws Exception, IOException {
        CaArrayFile file = new CaArrayFile();
        file.setId(FILE_ID);
        byte[] fileData = client.readFileUsingGridTransfer(file);
        System.out.println("File data: ");
        IOUtils.write(fileData, System.out);
    }

    private static void cqlQueryTest(CaArraySvcClient client)
            throws RemoteException, QueryProcessingExceptionType, MalformedQueryExceptionType {
        StopWatch sw = new StopWatch();
        sw.start();

        CQLQuery cqlQuery = new CQLQuery();

        Object target = new Object();
        cqlQuery.setTarget(target);

        target.setName(UserDefinedCharacteristic.class.getName());
        Attribute a = new Attribute();
        a.setName("id");
        a.setValue(CHARACTERISTIC_ID);
        a.setPredicate(Predicate.EQUAL_TO);
        target.setAttribute(a);

        CQLQueryResults results = client.query(cqlQuery);
        CQLQueryResultsIterator iter = new CQLQueryResultsIterator(results,
                CaArraySvcClient.class.getResourceAsStream("client-config.wsdd"));
        while (iter.hasNext()) {
            java.lang.Object o = iter.next();
            System.out.println("Characteristic: " + ToStringBuilder.reflectionToString(o));
        }
        sw.stop();
        System.out.println("Time for simple data service retrieval: " + sw.toString());
    }

    private static void introspectDataSet(CaArraySvcClient client, DataSet dataSet)
            throws QueryProcessingExceptionType, MalformedQueryExceptionType, RemoteException {

        int numValuesRetrieved = 0;
        int numColumns = 0;

        if (dataSet == null) {
            System.out.println("Retrieved null DataSet.");
            return;
        }
        DesignElementList designElementList = dataSet.getDesignElementList();
        List<AbstractDesignElement> designElements = designElementList.getDesignElements();

        // Get each HybridizationData in the DataSet.
        for (HybridizationData oneHybData : dataSet.getHybridizationDataList()) {
            for (AbstractDataColumn column : oneHybData.getColumns()) {
                numColumns++;
                QuantitationType qType = column.getQuantitationType();
                Class<?> typeClass = qType.getTypeClass();
                // Retrieve the appropriate data depending on the type of the column.
                if (typeClass == String.class) {
                    String[] values = ((StringColumn) column).getValues();
                    numValuesRetrieved += values.length;
                    System.out.println("Found String Column");
                } else if (typeClass == Float.class) {
                    float[] values = ((FloatColumn) column).getValues();
                    numValuesRetrieved += values.length;
                    System.out.println("Found float Column");
                } else if (typeClass == Short.class) {
                    short[] values = ((ShortColumn) column).getValues();
                    numValuesRetrieved += values.length;
                    System.out.println("Found short Column");
                } else if (typeClass == Boolean.class) {
                    boolean[] values = ((BooleanColumn) column).getValues();
                    numValuesRetrieved += values.length;
                    System.out.println("Found boolean Column");
                } else if (typeClass == Double.class) {
                    double[] values = ((DoubleColumn) column).getValues();
                    numValuesRetrieved += values.length;
                    System.out.println("Found double Column");
                } else if (typeClass == Integer.class) {
                    int[] values = ((IntegerColumn) column).getValues();
                    numValuesRetrieved += values.length;
                    System.out.println("Found integer Column");
                } else if (typeClass == Long.class) {
                    long[] values = ((LongColumn) column).getValues();
                    numValuesRetrieved += values.length;
                    System.out.println("Found long Column");
                } else {
                    // Should never get here.
                }
            }
        }
        System.out.println("Retrieved " + dataSet.getHybridizationDataList().size()
                + " hybridization data elements, " + designElements.size() + " design elements of type "
                + designElementList.getDesignElementType() + "," + dataSet.getQuantitationTypes().size()
                + " quantitation types, " + numColumns + " columns and " + numValuesRetrieved + " values.");

    }

    private static void addHybsByExperiment(CaArraySvcClient client, DataRetrievalRequest request,
            String experimentName)
            throws QueryProcessingExceptionType, MalformedQueryExceptionType, RemoteException {
        Experiment experiment = (Experiment) get(client, "gov.nih.nci.caarray.domain.project.Experiment", "title",
                experimentName);
        Set<Hybridization> allHybs = experiment.getHybridizations();
        request.getHybridizations().addAll(allHybs);
    }

    private static void addQuantitationTypes(CaArraySvcClient client, DataRetrievalRequest request,
            String quantitationTypesCsv)
            throws QueryProcessingExceptionType, MalformedQueryExceptionType, RemoteException {
        String[] quantitationTypeNames = quantitationTypesCsv.split(",");
        if (quantitationTypeNames == null) {
            return;
        }

        // Locate each quantitation type and add it to the request.
        for (int i = 0; i < quantitationTypeNames.length; i++) {
            String quantitationTypeName = quantitationTypeNames[i];
            QuantitationType qt = (QuantitationType) get(client, "gov.nih.nci.caarray.domain.data.QuantitationType",
                    "name", quantitationTypeName);
            request.getQuantitationTypes().add(qt);
        }
    }

    public byte[] readFileUsingGridTransfer(CaArrayFile file) throws Exception {
        GridTransferResultHandler handler = new GridTransferResultHandler() {
            public java.lang.Object processRetrievedData(InputStream stream) throws IOException {
                return IOUtils.toByteArray(stream);
            }
        };
        return (byte[]) readFileUsingGridTransfer(file, handler);
    }

    public java.lang.Object readFileUsingGridTransfer(CaArrayFile file, GridTransferResultHandler handler)
            throws Exception {
        TransferServiceContextReference fileRef = createFileTransfer(file);
        TransferServiceContextClient tclient = null;
        try {
            tclient = new TransferServiceContextClient(fileRef.getEndpointReference());
            InputStream stream = TransferClientHelper.getData(tclient.getDataTransferDescriptor());
            return handler.processRetrievedData(stream);
        } finally {
            if (tclient != null) {
                tclient.destroy();
            }
        }
    }

    public static java.lang.Object get(CaArraySvcClient client, String type, String attr, String value)
            throws QueryProcessingExceptionType, MalformedQueryExceptionType, RemoteException {
        CQLQuery cqlQuery = new CQLQuery();

        Object target = new Object();
        cqlQuery.setTarget(target);

        target.setName(type);
        Attribute attribute = new Attribute();
        attribute.setName(attr);
        attribute.setPredicate(Predicate.EQUAL_TO);
        attribute.setValue(value);
        target.setAttribute(attribute);

        CQLQueryResults results = client.query(cqlQuery);
        CQLQueryResultsIterator iter = new CQLQueryResultsIterator(results,
                CaArraySvcClient.class.getResourceAsStream("client-config.wsdd"));

        return iter.next();

    }

    public gov.nih.nci.cagrid.cqlresultset.CQLQueryResults query(gov.nih.nci.cagrid.cqlquery.CQLQuery cqlQuery)
            throws RemoteException, gov.nih.nci.cagrid.data.faults.QueryProcessingExceptionType,
            gov.nih.nci.cagrid.data.faults.MalformedQueryExceptionType {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "query");
            gov.nih.nci.cagrid.data.QueryRequest params = new gov.nih.nci.cagrid.data.QueryRequest();
            gov.nih.nci.cagrid.data.QueryRequestCqlQuery cqlQueryContainer = new gov.nih.nci.cagrid.data.QueryRequestCqlQuery();
            cqlQueryContainer.setCQLQuery(cqlQuery);
            params.setCqlQuery(cqlQueryContainer);
            gov.nih.nci.cagrid.data.QueryResponse boxedResult = portType.query(params);
            return boxedResult.getCQLQueryResultCollection();
        }
    }

    public gov.nih.nci.caarray.domain.array.ArrayDesignDetails getDesignDetails(
            gov.nih.nci.caarray.domain.array.ArrayDesign arrayDesign) throws RemoteException {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "getDesignDetails");
            gov.nih.nci.cagrid.caarray.stubs.GetDesignDetailsRequest params = new gov.nih.nci.cagrid.caarray.stubs.GetDesignDetailsRequest();
            gov.nih.nci.cagrid.caarray.stubs.GetDesignDetailsRequestArrayDesign arrayDesignContainer = new gov.nih.nci.cagrid.caarray.stubs.GetDesignDetailsRequestArrayDesign();
            arrayDesignContainer.setArrayDesign(arrayDesign);
            params.setArrayDesign(arrayDesignContainer);
            gov.nih.nci.cagrid.caarray.stubs.GetDesignDetailsResponse boxedResult = portType
                    .getDesignDetails(params);
            return boxedResult.getArrayDesignDetails();
        }
    }

    public byte[] readFile(gov.nih.nci.caarray.domain.file.CaArrayFile caArrayFile) throws RemoteException {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "readFile");
            gov.nih.nci.cagrid.caarray.stubs.ReadFileRequest params = new gov.nih.nci.cagrid.caarray.stubs.ReadFileRequest();
            gov.nih.nci.cagrid.caarray.stubs.ReadFileRequestCaArrayFile caArrayFileContainer = new gov.nih.nci.cagrid.caarray.stubs.ReadFileRequestCaArrayFile();
            caArrayFileContainer.setCaArrayFile(caArrayFile);
            params.setCaArrayFile(caArrayFileContainer);
            gov.nih.nci.cagrid.caarray.stubs.ReadFileResponse boxedResult = portType.readFile(params);
            return boxedResult.getResponse();
        }
    }

    public gov.nih.nci.caarray.domain.data.DataSet getDataSet(
            gov.nih.nci.caarray.domain.data.DataRetrievalRequest dataRetrievalRequest) throws RemoteException {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "getDataSet");
            gov.nih.nci.cagrid.caarray.stubs.GetDataSetRequest params = new gov.nih.nci.cagrid.caarray.stubs.GetDataSetRequest();
            gov.nih.nci.cagrid.caarray.stubs.GetDataSetRequestDataRetrievalRequest dataRetrievalRequestContainer = new gov.nih.nci.cagrid.caarray.stubs.GetDataSetRequestDataRetrievalRequest();
            dataRetrievalRequestContainer.setDataRetrievalRequest(dataRetrievalRequest);
            params.setDataRetrievalRequest(dataRetrievalRequestContainer);
            gov.nih.nci.cagrid.caarray.stubs.GetDataSetResponse boxedResult = portType.getDataSet(params);
            return boxedResult.getDataSet();
        }
    }

    public org.cagrid.transfer.context.stubs.types.TransferServiceContextReference createFileTransfer(
            gov.nih.nci.caarray.domain.file.CaArrayFile caArrayFile) throws RemoteException {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "createFileTransfer");
            gov.nih.nci.cagrid.caarray.stubs.CreateFileTransferRequest params = new gov.nih.nci.cagrid.caarray.stubs.CreateFileTransferRequest();
            gov.nih.nci.cagrid.caarray.stubs.CreateFileTransferRequestCaArrayFile caArrayFileContainer = new gov.nih.nci.cagrid.caarray.stubs.CreateFileTransferRequestCaArrayFile();
            caArrayFileContainer.setCaArrayFile(caArrayFile);
            params.setCaArrayFile(caArrayFileContainer);
            gov.nih.nci.cagrid.caarray.stubs.CreateFileTransferResponse boxedResult = portType
                    .createFileTransfer(params);
            return boxedResult.getTransferServiceContextReference();
        }
    }

    public org.oasis.wsrf.properties.GetMultipleResourcePropertiesResponse getMultipleResourceProperties(
            org.oasis.wsrf.properties.GetMultipleResourceProperties_Element params) throws RemoteException {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "getMultipleResourceProperties");
            return portType.getMultipleResourceProperties(params);
        }
    }

    public org.oasis.wsrf.properties.GetResourcePropertyResponse getResourceProperty(
            javax.xml.namespace.QName params) throws RemoteException {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "getResourceProperty");
            return portType.getResourceProperty(params);
        }
    }

    public org.oasis.wsrf.properties.QueryResourcePropertiesResponse queryResourceProperties(
            org.oasis.wsrf.properties.QueryResourceProperties_Element params) throws RemoteException {
        synchronized (portTypeMutex) {
            configureStubSecurity((Stub) portType, "queryResourceProperties");
            return portType.queryResourceProperties(params);
        }
    }

}