You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by am...@apache.org on 2012/12/22 00:04:24 UTC

svn commit: r1425176 - in /airavata/trunk/modules: airavata-client/src/main/java/org/apache/airavata/client/ airavata-client/src/main/java/org/apache/airavata/client/api/ airavata-client/src/main/java/org/apache/airavata/client/api/builder/ airavata-cl...

Author: amilaj
Date: Fri Dec 21 23:04:23 2012
New Revision: 1425176

URL: http://svn.apache.org/viewvc?rev=1425176&view=rev
Log:
Fixing AIRAVATA-683

Added:
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/DescriptorRecordAlreadyExistsException.java
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/builder/
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/builder/DescriptorBuilder.java
Modified:
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/AiravataClient.java
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/AiravataAPI.java
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ApplicationManager.java
    airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ApplicationManagerImpl.java
    airavata/trunk/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java

Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/AiravataClient.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/AiravataClient.java?rev=1425176&r1=1425175&r2=1425176&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/AiravataClient.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/AiravataClient.java Fri Dec 21 23:04:23 2012
@@ -56,6 +56,7 @@ import org.apache.airavata.client.api.Ex
 import org.apache.airavata.client.api.ProvenanceManager;
 import org.apache.airavata.client.api.UserManager;
 import org.apache.airavata.client.api.WorkflowManager;
+import org.apache.airavata.client.api.builder.DescriptorBuilder;
 import org.apache.airavata.client.impl.AiravataManagerImpl;
 import org.apache.airavata.client.impl.ApplicationManagerImpl;
 import org.apache.airavata.client.impl.ExecutionManagerImpl;
@@ -1014,7 +1015,12 @@ public class AiravataClient extends Obse
 		return API_VERSION;
 	}
 
-	public void setCurrentUser(String currentUser) {
+    @Override
+    public DescriptorBuilder getDescriptorBuilder() {
+        return new DescriptorBuilder();
+    }
+
+    public void setCurrentUser(String currentUser) {
 		this.currentUser = currentUser;
 	}
 

Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/AiravataAPI.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/AiravataAPI.java?rev=1425176&r1=1425175&r2=1425176&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/AiravataAPI.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/AiravataAPI.java Fri Dec 21 23:04:23 2012
@@ -21,6 +21,7 @@
 
 package org.apache.airavata.client.api;
 
+import org.apache.airavata.client.api.builder.DescriptorBuilder;
 import org.apache.airavata.common.utils.Version;
 
 
@@ -77,4 +78,11 @@ public interface AiravataAPI {
 	 */
 	public Version getVersion();
 
+    /**
+     * Gets the DescriptorBuilder. DescriptorBuilder is a helper class to create various descriptors.
+     * E.g :- Build HostDescriptors, ServiceDescriptors etc ...
+     * @return DescriptorBuilder.
+     */
+    public DescriptorBuilder getDescriptorBuilder();
+
 }
\ No newline at end of file

Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ApplicationManager.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ApplicationManager.java?rev=1425176&r1=1425175&r2=1425176&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ApplicationManager.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ApplicationManager.java Fri Dec 21 23:04:23 2012
@@ -27,7 +27,6 @@ import java.util.Map;
 import org.apache.airavata.commons.gfac.type.ApplicationDeploymentDescription;
 import org.apache.airavata.commons.gfac.type.HostDescription;
 import org.apache.airavata.commons.gfac.type.ServiceDescription;
-import org.apache.airavata.registry.api.exception.RegistryException;
 
 public interface ApplicationManager {
 	//Service descriptors
@@ -49,13 +48,36 @@ public interface ApplicationManager {
 
     /**
      * Save service description on registry
-     * @param service
-     * @return
-     * @throws AiravataAPIInvocationException
+     * @param service Service description information to update.
+     * @return The service descriptor name.
+     * @deprecated Deprecated since 0.6 release. User {@see #addServiceDescription} and {@see #updateServiceDescription}
+     *             methods instead.
+     * @throws AiravataAPIInvocationException If an error occurred while updating service descriptor.
      */
+    @Deprecated
     public String saveServiceDescription(ServiceDescription service)throws AiravataAPIInvocationException;
 
     /**
+     * Adds a new Service descriptor to the system. If service descriptor already exists in the system
+     * this will throw {@see DescriptorRecordAlreadyExistsException}. If you want to update an existing
+     * service descriptor use {@see #updateServiceDescription}.
+     * @param serviceDescription The service descriptor.
+     * @throws AiravataAPIInvocationException If an error occurred while adding service description.
+     * @throws DescriptorRecordAlreadyExistsException If service descriptor already exists in the system.
+     */
+    public void addServiceDescription(ServiceDescription serviceDescription)throws AiravataAPIInvocationException,
+            DescriptorRecordAlreadyExistsException;
+
+    /**
+     * Updates the service descriptor.
+     * @param serviceDescription Service description information to update.
+     * @throws AiravataAPIInvocationException If an error occurred while updating service description.
+     */
+    public void updateServiceDescription(ServiceDescription serviceDescription)throws AiravataAPIInvocationException;
+
+
+
+    /**
      * Delete service description from the registry
      * @param serviceName
      * @throws AiravataAPIInvocationException
@@ -83,14 +105,44 @@ public interface ApplicationManager {
 
     /**
      * Save deployment description on registry for a given service for a host
-     * @param serviceId
-     * @param hostId
-     * @param app
-     * @return
-     * @throws AiravataAPIInvocationException
+     * @param serviceId The service descriptor id.
+     * @param hostId The host descriptor id.
+     * @param app The application deployment descriptor.
+     * @return The application deployment descriptor name.
+     * @deprecated Deprecated since 0.6 release. Please use {@see #addDeploymentDescription} and
+     *              {@see #updateDeploymentDescription}.
+     * @throws AiravataAPIInvocationException If an error occurred while adding application deployment descriptor.
      */
+    @Deprecated
     public String saveDeploymentDescription(String serviceId, String hostId, ApplicationDeploymentDescription app)throws AiravataAPIInvocationException;
 
+
+    /**
+     * Adds a new deployment description associating with given service description and given host description. If
+     * an association already exists this will throw {@see DescriptorRecordAlreadyExistsException} exception. If you
+     * want to update an existing deployment descriptor use {@see #updateDeploymentDescription}.
+     * @param serviceDescription The service description to associate. Should be saved before passing to this method.
+     * @param hostDescription The host description to associate, should have been saved before calling this method.
+     * @param applicationDeploymentDescription The application descriptor to save.
+     * @throws AiravataAPIInvocationException If an error occurred while saving application descriptor.
+     * @throws DescriptorRecordAlreadyExistsException If deployment descriptor already exists in the system.
+     */
+    public void addDeploymentDescription(ServiceDescription serviceDescription, HostDescription hostDescription,
+                                         ApplicationDeploymentDescription applicationDeploymentDescription)
+        throws AiravataAPIInvocationException, DescriptorRecordAlreadyExistsException;
+
+    /**
+     * Adds a new deployment description associating with given service description and given host description. If
+     * an association already exists this will throw {@see DescriptorRecordAlreadyExistsException} exception.
+     * @param serviceDescription The service description to associate. Should be saved before passing to this method.
+     * @param hostDescription The host description to associate, should have been saved before calling this method.
+     * @param applicationDeploymentDescription The application descriptor to save.
+     * @throws AiravataAPIInvocationException If an error occurred while saving application descriptor.
+     */
+    public void updateDeploymentDescription(ServiceDescription serviceDescription, HostDescription hostDescription,
+                                         ApplicationDeploymentDescription applicationDeploymentDescription)
+            throws AiravataAPIInvocationException;
+
     /**
      * Retrieve list of registered deployment descriptions of the given regex service name & regex host name
      * @param serviceName
@@ -153,12 +205,35 @@ public interface ApplicationManager {
 
     /**
      * Save host description on registry
-     * @param host
-     * @return
-     * @throws AiravataAPIInvocationException
+     * @param host The host descriptor object to update in the database.
+     * @deprecated Deprecated since 0.6 release. Please use {@see #addHostDescription} and {@see #updateHostDescription}
+     * @throws AiravataAPIInvocationException If an error occurred while saving the host description.
      */
+    @Deprecated
     public String saveHostDescription(HostDescription host)throws AiravataAPIInvocationException;
 
+
+    /**
+     * Adds a new host descriptor object. If adding host descriptor already exists in the system this will throw
+     * DescriptorRecordAlreadyExistsException. If user wants to update an existing host descriptor use
+     * {@see #updateHostDescription(HostDescription host)} method.
+     * @param host The host descriptor object to save in the database.
+     * @throws AiravataAPIInvocationException If an error occurred while saving the host description.
+     * @throws DescriptorRecordAlreadyExistsException If host descriptor object already exists in the system.
+     */
+    public void addHostDescription (HostDescription host) throws AiravataAPIInvocationException,
+            DescriptorRecordAlreadyExistsException;
+
+
+    /**
+     * Updates an existing host descriptor. If you are not sure whether descriptor already exists try using
+     * {@see #addHostDescription} and catch {@see DescriptorRecordAlreadyExistsException}. If caught use this method
+     * to update the record.
+     * @param host The host descriptor object to update in the database.
+     * @throws AiravataAPIInvocationException If an error occurred while saving the host description.
+     */
+    public void updateHostDescription(HostDescription host)throws AiravataAPIInvocationException;
+
     /**
      * Retrieve a list of registered hsot descriptions of the given regex host name
      * @param regExName

Added: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/DescriptorRecordAlreadyExistsException.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/DescriptorRecordAlreadyExistsException.java?rev=1425176&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/DescriptorRecordAlreadyExistsException.java (added)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/DescriptorRecordAlreadyExistsException.java Fri Dec 21 23:04:23 2012
@@ -0,0 +1,21 @@
+package org.apache.airavata.client.api;
+
+/**
+ * If a saving descriptor already found in the system this exception will be thrown.
+ */
+public class DescriptorRecordAlreadyExistsException extends Exception {
+
+    private static final long serialVersionUID = 1231L;
+
+    public DescriptorRecordAlreadyExistsException(Throwable e) {
+        super(e);
+    }
+    public DescriptorRecordAlreadyExistsException(String message) {
+        super(message, null);
+    }
+
+    public DescriptorRecordAlreadyExistsException(String message, Throwable e) {
+        super(message, e);
+    }
+
+}

Added: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/builder/DescriptorBuilder.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/builder/DescriptorBuilder.java?rev=1425176&view=auto
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/builder/DescriptorBuilder.java (added)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/builder/DescriptorBuilder.java Fri Dec 21 23:04:23 2012
@@ -0,0 +1,187 @@
+package org.apache.airavata.client.api.builder;
+
+import org.apache.airavata.client.api.AiravataAPIInvocationException;
+import org.apache.airavata.commons.gfac.type.ApplicationDeploymentDescription;
+import org.apache.airavata.commons.gfac.type.HostDescription;
+import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.schemas.gfac.*;
+import org.apache.xmlbeans.SchemaType;
+
+import java.util.List;
+
+/**
+ * This class provides set of utility methods to create descriptors. Following descriptors are
+ * included.
+ * <ol>
+ *     <li>HostDescription - org.apache.airavata.commons.gfac.type.HostDescription</li>
+ * </ol>
+ */
+public class DescriptorBuilder {
+
+    private static final String IP_ADDRESS_VALIDATION_STRING
+            = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$";
+
+    private static final String HOST_NAME_VALIDATION_STRING
+            = "^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9])\\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\\-]*[A-Za-z0-9])$";
+
+
+    /**
+     * Builds a host descriptor object. Host descriptor gives information about application
+     * hosted machine.
+     * @param type The host type. Following types are available at the moment.
+     *             <ol>
+     *             <li>org.apache.airavata.schemas.gfac.GlobusHostType</li>
+     *             <li>org.apache.airavata.schemas.gfac.Ec2HostType</li>
+     *             <li>org.apache.airavata.schemas.gfac.GsisshHostType</li>
+     *             <li>org.apache.airavata.schemas.gfac.UnicoreHostType</li>
+     *             </ol>
+     * @param hostName An unique id given to hosted machine. This could be any name. But should be unique across the
+     *                 workflow.
+     * @param hostAddress This is the IP address where application is running. This should be a valid IP address or
+     *                    valid host name.
+     * @return The org.apache.airavata.commons.gfac.type.HostDescription object.
+     * @throws AiravataAPIInvocationException If provided host address does not comply with IP address format or
+     *          host name format.
+     */
+    public HostDescription buildHostDescription (HostDescriptionType type, String hostName, String hostAddress)
+            throws AiravataAPIInvocationException{
+
+        return buildHostDescription(type.schemaType(), hostName, hostAddress);
+
+    }
+
+    /**
+     * Builds a host descriptor object. Host descriptor gives information about application
+     * hosted machine.
+     * @param schemaType The host type as per the schema. All available schema types are listed
+     *                   in org.apache.xmlbeans.SchemaType
+     * @param hostName An unique id given to hosted machine. This could be any name. But should be unique across the
+     *                 workflow.
+     * @param hostAddress This is the IP address where application is running. This should be a valid IP address or
+     *                    valid host name.
+     * @return The org.apache.airavata.commons.gfac.type.HostDescription object.
+     * @throws AiravataAPIInvocationException If provided host address does not comply with IP address format or
+     *          host name format.
+     */
+    public HostDescription buildHostDescription (SchemaType schemaType, String hostName, String hostAddress)
+            throws AiravataAPIInvocationException{
+
+        if (!validateHostAddress(hostAddress)) {
+            throw new AiravataAPIInvocationException("Invalid host address. Host address should be " +
+                    "either an IP address or a valid host name.");
+        }
+
+        HostDescription hostDescription = new HostDescription(schemaType);
+        hostDescription.getType().setHostName(hostName);
+        hostDescription.getType().setHostAddress(hostAddress);
+
+        return hostDescription;
+
+    }
+
+    /**
+     * Create an input parameter.
+     * @param parameterName The input parameter name.
+     * @param parameterDescription A short description about the input parameter.
+     * @param parameterDataType Input parameter type. E.g :- String, Integer etc ..
+     *                          All possible types are define in DataType.Enum class.
+     *                          E.g :- DataType.String
+     * @see org.apache.airavata.schemas.gfac.DataType.Enum
+     * @return Encapsulating InputParameterType object.
+     */
+    public InputParameterType buildInputParameterType (String parameterName, String parameterDescription,
+                                                  DataType.Enum parameterDataType) {
+
+        InputParameterType parameter = InputParameterType.Factory.newInstance();
+        parameter.setParameterName(parameterName);
+        parameter.setParameterDescription(parameterDescription);
+
+        ParameterType parameterType = parameter.addNewParameterType();
+        parameterType.setType(parameterDataType);
+        parameterType.setName(parameterDataType.toString());
+
+        return parameter;
+
+    }
+
+    /**
+     * Create an input parameter.
+     * @param parameterName The input parameter name.
+     * @param parameterDescription A short description about the input parameter.
+     * @param parameterDataType Input parameter type. E.g :- String, Integer etc ..
+     *                          All possible types are define in DataType.Enum class.
+     *                          E.g :- DataType.String
+     * @see org.apache.airavata.schemas.gfac.DataType.Enum
+     * @return Encapsulating InputParameterType object.
+     */
+    public OutputParameterType buildOutputParameterType (String parameterName, String parameterDescription,
+                                                  DataType.Enum parameterDataType) {
+
+        OutputParameterType parameter = OutputParameterType.Factory.newInstance();
+        parameter.setParameterName(parameterName);
+        parameter.setParameterDescription(parameterDescription);
+
+        ParameterType parameterType = parameter.addNewParameterType();
+        parameterType.setType(parameterDataType);
+        parameterType.setName(parameterDataType.toString());
+
+        return parameter;
+
+    }
+
+    /**
+     * Creates a ServiceDescription object. This includes information about the service. Mainly we
+     * are focusing on following details about the service.
+     * <ol>
+     *     <li>A name for service</li>
+     *     <li>A short description about the service</li>
+     *     <li>A what are input data types</li>
+     *     <li>A what are output data types</li>
+     * </ol>
+     * @param serviceName Name of the service.
+     * @param description A short description about the service.
+     * @param inputParameterTypes Input parameter types.
+     * @param outputParameterTypes Output parameter types.
+     * @return A ServiceDescription object with above information encapsulated.
+     */
+    public ServiceDescription buildServiceDescription (String serviceName, String description,
+                                                       List<InputParameterType> inputParameterTypes,
+                                                       List<OutputParameterType> outputParameterTypes) {
+
+        ServiceDescription serviceDescription = new ServiceDescription();
+        serviceDescription.getType().setName(serviceName);
+        serviceDescription.getType().setDescription(description);
+
+
+        serviceDescription.getType().
+                setInputParametersArray(inputParameterTypes.toArray(
+                        new InputParameterType[inputParameterTypes.size()]));
+        serviceDescription.getType().
+                setOutputParametersArray(outputParameterTypes.toArray(
+                        new OutputParameterType[outputParameterTypes.size()]));
+
+        return serviceDescription;
+
+    }
+
+    public ApplicationDeploymentDescription buildApplicationDeploymentDescription (String applicationName,
+                                                                                   String executablePath,
+                                                                                   String workingDirectory) {
+
+        ApplicationDeploymentDescription applicationDeploymentDescription = new ApplicationDeploymentDescription();
+        ApplicationDeploymentDescriptionType applicationDeploymentDescriptionType
+                = applicationDeploymentDescription.getType();
+        applicationDeploymentDescriptionType.addNewApplicationName().setStringValue(applicationName);
+        applicationDeploymentDescriptionType.setExecutableLocation(executablePath);
+        applicationDeploymentDescriptionType.setScratchWorkingDirectory(workingDirectory);
+
+        return applicationDeploymentDescription;
+
+    }
+
+
+
+    private boolean validateHostAddress(String hostAddress) {
+        return hostAddress.matches(IP_ADDRESS_VALIDATION_STRING) || hostAddress.matches(HOST_NAME_VALIDATION_STRING);
+    }
+}

Modified: airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ApplicationManagerImpl.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ApplicationManagerImpl.java?rev=1425176&r1=1425175&r2=1425176&view=diff
==============================================================================
--- airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ApplicationManagerImpl.java (original)
+++ airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ApplicationManagerImpl.java Fri Dec 21 23:04:23 2012
@@ -29,10 +29,14 @@ import java.util.Map;
 import org.apache.airavata.client.AiravataClient;
 import org.apache.airavata.client.api.AiravataAPIInvocationException;
 import org.apache.airavata.client.api.ApplicationManager;
+import org.apache.airavata.client.api.DescriptorRecordAlreadyExistsException;
+import org.apache.airavata.common.exception.AiravataConfigurationException;
 import org.apache.airavata.commons.gfac.type.ApplicationDeploymentDescription;
 import org.apache.airavata.commons.gfac.type.HostDescription;
 import org.apache.airavata.commons.gfac.type.ServiceDescription;
+import org.apache.airavata.registry.api.exception.RegistryException;
 import org.apache.airavata.registry.api.exception.UnimplementedRegistryOperationException;
+import org.apache.airavata.registry.api.exception.gateway.DescriptorAlreadyExistsException;
 
 public class ApplicationManagerImpl implements ApplicationManager {
 	private AiravataClient client;
@@ -81,7 +85,43 @@ public class ApplicationManagerImpl impl
 		}
 	}
 
-	@Override
+    @Override
+    public void addServiceDescription(ServiceDescription serviceDescription) throws AiravataAPIInvocationException,
+            DescriptorRecordAlreadyExistsException {
+        try {
+            getClient().getRegistryClient().addServiceDescriptor(serviceDescription);
+        } catch (DescriptorAlreadyExistsException e) {
+            throw new DescriptorRecordAlreadyExistsException("Service descriptor "
+                    + serviceDescription.getType().getName()
+                    + " already exists.", e);
+        } catch (RegistryException e) {
+            throw new AiravataAPIInvocationException("An internal error occurred while trying to add service descriptor"
+                    + serviceDescription.getType().getName(),
+                    e);
+        } catch (AiravataConfigurationException e) {
+            throw new AiravataAPIInvocationException("Error retrieving registry controller. " +
+                    "An error occurred while trying to " +
+                    "add service descriptor" + serviceDescription.getType().getName(), e);
+        }
+    }
+
+    @Override
+    public void updateServiceDescription(ServiceDescription serviceDescription) throws AiravataAPIInvocationException {
+        try {
+            getClient().getRegistryClient().updateServiceDescriptor(serviceDescription);
+        } catch (RegistryException e) {
+            throw new AiravataAPIInvocationException("An internal error occurred while trying to add service descriptor"
+                    + serviceDescription.getType().getName(),
+                    e);
+        } catch (AiravataConfigurationException e) {
+            throw new AiravataAPIInvocationException("Error retrieving registry controller. " +
+                    "An error occurred while trying to " +
+                    "add service descriptor" + serviceDescription.getType().getName(), e);
+        }
+    }
+
+
+    @Override
 	public void deleteServiceDescription(String serviceId)
 			throws AiravataAPIInvocationException {
 		try {
@@ -125,7 +165,66 @@ public class ApplicationManagerImpl impl
 		}
 	}
 
-	@Override
+
+    @Override
+    public void addDeploymentDescription(ServiceDescription serviceDescription, HostDescription hostDescription,
+                                         ApplicationDeploymentDescription applicationDeploymentDescription)
+            throws AiravataAPIInvocationException, DescriptorRecordAlreadyExistsException {
+
+        try {
+            getClient().getRegistryClient().addApplicationDescriptor(serviceDescription.getType().getName(),
+                    hostDescription.getType().getHostName(), applicationDeploymentDescription);
+        } catch (DescriptorAlreadyExistsException e) {
+            throw new DescriptorRecordAlreadyExistsException("Application descriptor " +
+                    applicationDeploymentDescription.getType().getApplicationName().getStringValue()
+                    + " already associated to host " + hostDescription.getType().getHostName()
+                    + " and service " + serviceDescription.getType().getName(), e);
+        } catch (RegistryException e) {
+
+            throw new AiravataAPIInvocationException("An internal error occurred while trying to add " +
+                    "application descriptor " +
+                    applicationDeploymentDescription.getType().getApplicationName().getStringValue()
+                    + " associated to host " + hostDescription.getType().getHostName()
+                    + " and service " + serviceDescription.getType().getName(), e);
+
+        } catch (AiravataConfigurationException e) {
+
+            throw new AiravataAPIInvocationException("Error retrieving registry controller. " +
+                    "An error occurred while trying to add application descriptor " +
+                    applicationDeploymentDescription.getType().getApplicationName().getStringValue()
+                    + " associated to host " + hostDescription.getType().getHostName()
+                    + " and service " + serviceDescription.getType().getName(), e);
+        }
+
+    }
+
+    @Override
+    public void updateDeploymentDescription(ServiceDescription serviceDescription, HostDescription hostDescription,
+                                            ApplicationDeploymentDescription applicationDeploymentDescription)
+            throws AiravataAPIInvocationException {
+        try {
+            getClient().getRegistryClient().updateApplicationDescriptor(serviceDescription.getType().getName(),
+                    hostDescription.getType().getHostName(), applicationDeploymentDescription);
+        } catch (RegistryException e) {
+
+            throw new AiravataAPIInvocationException("An internal error occurred while trying to add " +
+                    "application descriptor " +
+                    applicationDeploymentDescription.getType().getApplicationName().getStringValue()
+                    + " associated to host " + hostDescription.getType().getHostName()
+                    + " and service " + serviceDescription.getType().getName(), e);
+
+        } catch (AiravataConfigurationException e) {
+
+            throw new AiravataAPIInvocationException("Error retrieving registry controller. " +
+                    "An error occurred while trying to add application descriptor " +
+                    applicationDeploymentDescription.getType().getApplicationName().getStringValue()
+                    + " associated to host " + hostDescription.getType().getHostName()
+                    + " and service " + serviceDescription.getType().getName(), e);
+        }
+    }
+
+
+    @Override
 	public List<ApplicationDeploymentDescription> searchDeploymentDescription(
 			String serviceName, String hostName)
 			throws AiravataAPIInvocationException {
@@ -212,7 +311,44 @@ public class ApplicationManagerImpl impl
 		}
 	}
 
-	@Override
+    @Override
+    public void addHostDescription(HostDescription host) throws AiravataAPIInvocationException,
+            DescriptorRecordAlreadyExistsException {
+
+        try {
+            getClient().getRegistryClient().addHostDescriptor(host);
+        } catch (DescriptorAlreadyExistsException e) {
+            throw new DescriptorRecordAlreadyExistsException("Host descriptor " + host.getType().getHostName()
+                    + " already exists.", e);
+        } catch (RegistryException e) {
+            throw new AiravataAPIInvocationException("An internal error occurred while trying to add host descriptor"
+                    + host.getType().getHostName(),
+                    e);
+        } catch (AiravataConfigurationException e) {
+            throw new AiravataAPIInvocationException("Error retrieving registry controller. " +
+                    "An error occurred while trying to " +
+                    "add host descriptor" + host.getType().getHostName(), e);
+        }
+
+    }
+
+    @Override
+    public void updateHostDescription(HostDescription host) throws AiravataAPIInvocationException {
+        try {
+            getClient().getRegistryClient().updateHostDescriptor(host);
+        } catch (RegistryException e) {
+            throw new AiravataAPIInvocationException("An internal error occurred while trying to add host descriptor"
+                    + host.getType().getHostName(),
+                    e);
+        } catch (AiravataConfigurationException e) {
+            throw new AiravataAPIInvocationException("Error retrieving registry controller. " +
+                    "An error occurred while trying to " +
+                    "add host descriptor" + host.getType().getHostName(), e);
+        }
+    }
+
+
+    @Override
 	public List<HostDescription> searchHostDescription(String regExName)
 			throws AiravataAPIInvocationException {
 		throw new AiravataAPIInvocationException(new UnimplementedRegistryOperationException());

Modified: airavata/trunk/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java
URL: http://svn.apache.org/viewvc/airavata/trunk/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java?rev=1425176&r1=1425175&r2=1425176&view=diff
==============================================================================
--- airavata/trunk/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java (original)
+++ airavata/trunk/modules/integration-tests/src/test/java/org/apache/airavata/integration/BaseCaseIT.java Fri Dec 21 23:04:23 2012
@@ -14,17 +14,13 @@ import junit.framework.Assert;
 import org.apache.airavata.client.AiravataAPIFactory;
 import org.apache.airavata.client.api.AiravataAPI;
 import org.apache.airavata.client.api.AiravataAPIInvocationException;
+import org.apache.airavata.client.api.builder.DescriptorBuilder;
 import org.apache.airavata.common.utils.Version;
 import org.apache.airavata.commons.gfac.type.ApplicationDeploymentDescription;
 import org.apache.airavata.commons.gfac.type.HostDescription;
 import org.apache.airavata.commons.gfac.type.ServiceDescription;
 import org.apache.airavata.registry.api.PasswordCallback;
-import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType;
-import org.apache.airavata.schemas.gfac.DataType;
-import org.apache.airavata.schemas.gfac.GlobusHostType;
-import org.apache.airavata.schemas.gfac.InputParameterType;
-import org.apache.airavata.schemas.gfac.OutputParameterType;
-import org.apache.airavata.schemas.gfac.ParameterType;
+import org.apache.airavata.schemas.gfac.*;
 import org.apache.airavata.workflow.model.wf.Workflow;
 import org.apache.airavata.workflow.model.wf.WorkflowInput;
 import org.apache.airavata.ws.monitor.Monitor;
@@ -219,56 +215,41 @@ public class BaseCaseIT {
 
     @Test
     public void testEchoService() throws Exception {
-        HostDescription hostDescription = new HostDescription(GlobusHostType.type);
-        hostDescription.getType().setHostName("localhost");
-        hostDescription.getType().setHostAddress("127.0.0.1");
 
-        log("Saving host description ....");
-        airavataAPI.getApplicationManager().saveHostDescription(hostDescription);
+        DescriptorBuilder descriptorBuilder = airavataAPI.getDescriptorBuilder();
+
+        HostDescription hostDescription
+                = descriptorBuilder.buildHostDescription(HostDescriptionType.type, "localhost", "127.0.0.1");
+
+        log("Adding host description ....");
+        airavataAPI.getApplicationManager().addHostDescription(hostDescription);
 
         Assert.assertTrue(airavataAPI.getApplicationManager().isHostDescriptorExists(hostDescription.getType()
                 .getHostName()));
 
-        ServiceDescription serviceDescription = new ServiceDescription();
+
         List<InputParameterType> inputParameters = new ArrayList<InputParameterType>();
+        inputParameters.add(descriptorBuilder.buildInputParameterType("echo_input", "echo input", DataType.STRING));
+
         List<OutputParameterType> outputParameters = new ArrayList<OutputParameterType>();
-        serviceDescription.getType().setName("Echo");
-        serviceDescription.getType().setDescription("Echo service");
-        InputParameterType parameter = InputParameterType.Factory.newInstance();
-        parameter.setParameterName("echo_input");
-        parameter.setParameterDescription("echo input");
-        ParameterType parameterType = parameter.addNewParameterType();
-        parameterType.setType(DataType.STRING);
-        parameterType.setName("String");
-        inputParameters.add(parameter);
-
-        OutputParameterType outputParameter = OutputParameterType.Factory.newInstance();
-        outputParameter.setParameterName("echo_output");
-        outputParameter.setParameterDescription("Echo output");
-        ParameterType outputParaType = outputParameter.addNewParameterType();
-        outputParaType.setType(DataType.STRING);
-        outputParaType.setName("String");
-        outputParameters.add(outputParameter);
+        outputParameters.add(descriptorBuilder.buildOutputParameterType("echo_output", "Echo output", DataType.STRING));
 
-        serviceDescription.getType().setInputParametersArray(inputParameters.toArray(new InputParameterType[]{}));
-        serviceDescription.getType().setOutputParametersArray(outputParameters.toArray(new OutputParameterType[]{}));
+        ServiceDescription serviceDescription = descriptorBuilder.buildServiceDescription("Echo", "Echo service",
+                inputParameters, outputParameters);
 
-        log("Saving service description ...");
-        airavataAPI.getApplicationManager().saveServiceDescription(serviceDescription);
+        log("Adding service description ...");
+        airavataAPI.getApplicationManager().addServiceDescription(serviceDescription);
         Assert.assertTrue(airavataAPI.getApplicationManager().isServiceDescriptorExists(serviceDescription.
                 getType().getName()));
 
         // Deployment descriptor
-        ApplicationDeploymentDescription applicationDeploymentDescription = new ApplicationDeploymentDescription();
-        ApplicationDeploymentDescriptionType applicationDeploymentDescriptionType
-                = applicationDeploymentDescription.getType();
-        applicationDeploymentDescriptionType.addNewApplicationName().setStringValue("EchoApplication");
-        applicationDeploymentDescriptionType.setExecutableLocation("/bin/echo");
-        applicationDeploymentDescriptionType.setScratchWorkingDirectory("/tmp");
-
-        log("Saving deployment description ...");
-        airavataAPI.getApplicationManager().saveDeploymentDescription(serviceDescription.getType().getName(),
-                hostDescription.getType().getHostName(), applicationDeploymentDescription);
+        ApplicationDeploymentDescription applicationDeploymentDescription
+                = descriptorBuilder.buildApplicationDeploymentDescription("EchoApplication", "/bin/echo", "/tmp");
+
+        log("Adding deployment description ...");
+        airavataAPI.getApplicationManager().addDeploymentDescription(serviceDescription,
+                hostDescription, applicationDeploymentDescription);
+
         Assert.assertTrue(airavataAPI.getApplicationManager().isDeploymentDescriptorExists(serviceDescription.getType().
                 getName(), hostDescription.getType().getHostName(),
                 applicationDeploymentDescription.getType().getApplicationName().getStringValue()));