Java tutorial
//====================================================================================== // 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); } } }