Author: samindaw
Date: Mon Jun 10 19:21:49 2013
New Revision: 1491570

URL: http://svn.apache.org/r1491570
Log:
application job data persistance for BESProvider + refacting

Modified:
    
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java
    
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java
    
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java
    
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java
    
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java

Modified: 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java
 (original)
+++ 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/api/ProvenanceManager.java
 Mon Jun 10 19:21:49 2013
@@ -398,6 +398,14 @@ public interface ProvenanceManager {
       */
      public void updateApplicationJobStatus(String jobId, ApplicationJobStatus 
status, Date statusUpdateTime) throws AiravataAPIInvocationException;
      
+        /**
+        * Update the status of the job for the current server time
+        * @param jobId
+        * @param status
+        * @throws RegistryException
+        */
+     public void updateApplicationJobStatus(String jobId, ApplicationJobStatus 
status) throws AiravataAPIInvocationException;
+     
      /**
       * Update the job data. GFacProvider implementation should decide the job 
data. Typically it'll 
       * be a serialization of the submitted job query (eg: rsl for a GRAM job) 

Modified: 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java
 (original)
+++ 
airavata/trunk/modules/airavata-client/src/main/java/org/apache/airavata/client/impl/ProvenanceManagerImpl.java
 Mon Jun 10 19:21:49 2013
@@ -21,6 +21,7 @@
 
 package org.apache.airavata.client.impl;
 
+import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -521,60 +522,60 @@ public class ProvenanceManagerImpl imple
        }
 
        @Override
-       public void updateApplicationJobStatus(String gfacJobId, 
ApplicationJobStatus status, Date statusUpdateTime)
+       public void updateApplicationJobStatus(String jobId, 
ApplicationJobStatus status, Date statusUpdateTime)
                        throws AiravataAPIInvocationException {
                try {
-                       
client.getRegistryClient().updateApplicationJobStatus(gfacJobId, status, 
statusUpdateTime);
+                       
client.getRegistryClient().updateApplicationJobStatus(jobId, status, 
statusUpdateTime);
                } catch (Exception e) {
                        throw new AiravataAPIInvocationException(e);
                }
        }
 
        @Override
-       public void updateApplicationJobData(String gfacJobId, String jobdata)
+       public void updateApplicationJobData(String jobId, String jobdata)
                        throws AiravataAPIInvocationException {
                try {
-                       
client.getRegistryClient().updateApplicationJobData(gfacJobId, jobdata);
+                       
client.getRegistryClient().updateApplicationJobData(jobId, jobdata);
                } catch (Exception e) {
                        throw new AiravataAPIInvocationException(e);
                }
        }
 
        @Override
-       public void updateApplicationJobSubmittedTime(String gfacJobId, Date 
submitted)
+       public void updateApplicationJobSubmittedTime(String jobId, Date 
submitted)
                        throws AiravataAPIInvocationException {
                try {
-                       
client.getRegistryClient().updateApplicationJobSubmittedTime(gfacJobId, 
submitted);
+                       
client.getRegistryClient().updateApplicationJobSubmittedTime(jobId, submitted);
                } catch (Exception e) {
                        throw new AiravataAPIInvocationException(e);
                }
        }
 
        @Override
-       public void updateApplicationJobStatusUpdateTime(String gfacJobId, Date 
completed)
+       public void updateApplicationJobStatusUpdateTime(String jobId, Date 
completed)
                        throws AiravataAPIInvocationException {
                try {
-                       
client.getRegistryClient().updateApplicationJobStatusUpdateTime(gfacJobId, 
completed);
+                       
client.getRegistryClient().updateApplicationJobStatusUpdateTime(jobId, 
completed);
                } catch (Exception e) {
                        throw new AiravataAPIInvocationException(e);
                }
        }
 
        @Override
-       public void updateApplicationJobMetadata(String gfacJobId, String 
metadata)
+       public void updateApplicationJobMetadata(String jobId, String metadata)
                        throws AiravataAPIInvocationException {
                try {
-                       
client.getRegistryClient().updateApplicationJobMetadata(gfacJobId, metadata);
+                       
client.getRegistryClient().updateApplicationJobMetadata(jobId, metadata);
                } catch (Exception e) {
                        throw new AiravataAPIInvocationException(e);
                }
        }
 
        @Override
-       public ApplicationJob getApplicationJob(String gfacJobId)
+       public ApplicationJob getApplicationJob(String jobId)
                        throws AiravataAPIInvocationException {
                try {
-                       return 
client.getRegistryClient().getApplicationJob(gfacJobId);
+                       return 
client.getRegistryClient().getApplicationJob(jobId);
                } catch (Exception e) {
                        throw new AiravataAPIInvocationException(e);
                }
@@ -602,4 +603,10 @@ public class ProvenanceManagerImpl imple
                }
        }
 
+       @Override
+       public void updateApplicationJobStatus(String jobId,
+                       ApplicationJobStatus status) throws 
AiravataAPIInvocationException {
+               updateApplicationJobStatus(jobId, status, 
Calendar.getInstance().getTime());
+       }
+
 }

Modified: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
 (original)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/BESProvider.java
 Mon Jun 10 19:21:49 2013
@@ -25,21 +25,32 @@ import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.context.security.GSISecurityContext;
 import org.apache.airavata.gfac.provider.GFacProvider;
 import org.apache.airavata.gfac.provider.GFacProviderException;
+import org.apache.airavata.gfac.utils.GFacUtils;
+import org.apache.airavata.registry.api.workflow.ApplicationJob;
+import 
org.apache.airavata.registry.api.workflow.ApplicationJob.ApplicationJobStatus;
 import org.apache.airavata.schemas.gfac.UnicoreHostType;
 import org.apache.xmlbeans.XmlCursor;
 import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration;
+import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStateEnumeration.Enum;
 import org.ggf.schemas.bes.x2006.x08.besFactory.ActivityStatusType;
 import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityDocument;
 import org.ggf.schemas.bes.x2006.x08.besFactory.CreateActivityResponseDocument;
 import org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesDocument;
 import 
org.ggf.schemas.bes.x2006.x08.besFactory.GetActivityStatusesResponseDocument;
+import org.ggf.schemas.jsdl.x2005.x11.jsdl.JobDefinitionType;
 import org.globus.gsi.gssapi.GlobusGSSCredentialImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -86,10 +97,11 @@ public class BESProvider implements GFac
         CreateActivityDocument cad = CreateActivityDocument.Factory
                 .newInstance();
         
+               JobDefinitionType jobDefinition = null;
         try {
             //FIXME: Replace by a native client
-//                     cad.addNewCreateActivity().addNewActivityDocument()
-//                             
.setJobDefinition(JSDLGenerator.buildJSDLInstance(jobExecutionContext).getJobDefinition());
+//                     jobDefinition = 
JSDLGenerator.buildJSDLInstance(jobExecutionContext).getJobDefinition();
+//                     
cad.addNewCreateActivity().addNewActivityDocument().setJobDefinition(jobDefinition);
                        System.out.println("REMOVE ME");
                } catch (Exception e1) {
                        throw new GFacProviderException("Cannot generate JSDL 
instance from the JobExecutionContext.",e1);
@@ -123,7 +135,7 @@ public class BESProvider implements GFac
             jobId = new Long(Calendar.getInstance().getTimeInMillis())
                     .toString();
         }
-        
+               saveApplicationJob(jobExecutionContext, jobDefinition);
         
log.info(formatStatusMessage(activityEpr.getAddress().getStringValue(), 
factory.getActivityStatus(activityEpr)
                 .toString()));
         
@@ -135,6 +147,7 @@ public class BESProvider implements GFac
             ActivityStatusType activityStatus = null;
                try {
                        activityStatus = getStatus(factory, activityEpr);
+                       
GFacUtils.updateApplicationJobStatus(jobExecutionContext, jobId, 
getApplicationJobStatus(activityStatus));
                        log.info (subStatusAsString(activityStatus));
                } catch (UnknownActivityIdentifierFault e) {
                        throw new GFacProviderException(e.getMessage(), 
e.getCause());
@@ -164,6 +177,36 @@ public class BESProvider implements GFac
                } 
        }
 
+       private ApplicationJobStatus getApplicationJobStatus(ActivityStatusType 
activityStatus){
+               if (activityStatus==null){
+                       return ApplicationJobStatus.UNKNOWN;
+               }
+               Enum state = activityStatus.getState();
+               if (ActivityStateEnumeration.PENDING.equals(state)){
+                       return ApplicationJobStatus.PENDING;
+               } else if (ActivityStateEnumeration.CANCELLED.equals(state)){
+                       return ApplicationJobStatus.CANCELLED;
+               } else if (ActivityStateEnumeration.FAILED.equals(state)){
+                       return ApplicationJobStatus.FAILED;
+               } else if (ActivityStateEnumeration.FINISHED.equals(state)){
+                       return ApplicationJobStatus.FINISHED;
+               } else if (ActivityStateEnumeration.RUNNING.equals(state)){
+                       return ApplicationJobStatus.EXECUTING;
+               }
+               return ApplicationJobStatus.UNKNOWN;
+       }
+       
+       private void saveApplicationJob(JobExecutionContext jobExecutionContext,
+                       JobDefinitionType jobDefinition) {
+               ApplicationJob appJob = 
GFacUtils.createApplicationJob(jobExecutionContext);
+        appJob.setJobId(jobId);
+        appJob.setJobData(jobDefinition.toString());
+        appJob.setSubmittedTime(Calendar.getInstance().getTime());
+        appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
+        appJob.setStatusUpdateTime(appJob.getSubmittedTime());
+        GFacUtils.recordApplicationJob(jobExecutionContext, appJob);
+       }
+
        public void dispose(JobExecutionContext jobExecutionContext)
                        throws GFacProviderException {
                secProperties = null;

Modified: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
 (original)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/GramProvider.java
 Mon Jun 10 19:21:49 2013
@@ -23,7 +23,6 @@ package org.apache.airavata.gfac.provide
 import java.util.Calendar;
 import java.util.Map;
 
-import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.JobSubmissionFault;
 import org.apache.airavata.gfac.context.JobExecutionContext;
@@ -92,21 +91,9 @@ public class GramProvider implements GFa
            
             //WorkflowNodeGramData workflowNodeGramData = new 
WorkflowNodeGramData(experimentID, nodeID, job.getRSL(),hostName , 
job.getIDAsString());;
             
-            try {
-               // for provider test
-               if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() 
!= null){
-                       ApplicationJob appJob = 
GFacUtils.createApplicationJob(jobExecutionContext);
-                    appJob.setJobId(job.getIDAsString());
-                    appJob.setJobData(job.getRSL());
-                    appJob.setSubmittedTime(Calendar.getInstance().getTime());
-                    appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
-                    appJob.setStatusUpdateTime(appJob.getSubmittedTime());
-                    
jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().addApplicationJob(appJob);
-               }
-                
//jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateWorkflowNodeGramData(workflowNodeGramData);
-            } catch (AiravataAPIInvocationException e) {
-                throw new GFacProviderException(e.getMessage(), e, 
jobExecutionContext);
-            }
+               // for provider test
+               saveApplicationJob(jobExecutionContext);
+               
             /*
             * Wait until job is done
             */
@@ -145,6 +132,16 @@ public class GramProvider implements GFa
         }
 
     }
+
+       private void saveApplicationJob(JobExecutionContext 
jobExecutionContext) {
+               ApplicationJob appJob = 
GFacUtils.createApplicationJob(jobExecutionContext);
+               appJob.setJobId(job.getIDAsString());
+               appJob.setJobData(job.getRSL());
+               appJob.setSubmittedTime(Calendar.getInstance().getTime());
+               appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
+               appJob.setStatusUpdateTime(appJob.getSubmittedTime());
+               GFacUtils.recordApplicationJob(jobExecutionContext, appJob);
+       }
        
     public void dispose(JobExecutionContext jobExecutionContext) throws 
GFacProviderException {
     }

Modified: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java
 (original)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/provider/impl/LocalProvider.java
 Mon Jun 10 19:21:49 2013
@@ -30,7 +30,6 @@ import java.util.Map;
 
 import javax.xml.bind.JAXB;
 
-import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.gfac.Constants;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.context.JobExecutionContext;
@@ -129,33 +128,9 @@ public class LocalProvider implements GF
             Process process = builder.start();
             jobId="Local_"+Calendar.getInstance().getTimeInMillis();
             if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != 
null){
-                       ApplicationJob appJob = 
GFacUtils.createApplicationJob(jobExecutionContext);
-                appJob.setJobId(jobId);
-                LocalProviderJobData data = new LocalProviderJobData();
-                data.setApplicationName(app.getExecutableLocation());
-                data.setInputDir(app.getInputDataDirectory());
-                data.setOutputDir(app.getOutputDataDirectory());
-                data.setWorkingDir(builder.directory().toString());
-                
data.setInputParameters(ProviderUtils.getInputParameters(jobExecutionContext));
-                ByteArrayOutputStream stream = new ByteArrayOutputStream();
-                JAXB.marshal(data, stream);
-                appJob.setJobData(stream.toString());
-                appJob.setSubmittedTime(Calendar.getInstance().getTime());
-                appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
-                appJob.setStatusUpdateTime(appJob.getSubmittedTime());
-                try {
-                                       
jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().addApplicationJob(appJob);
-                               } catch (AiravataAPIInvocationException e) {
-                                       e.printStackTrace();
-                               }
-               }
-            if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != 
null){
-                try {
-                                       
jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId,
 ApplicationJobStatus.INITIALIZE, Calendar.getInstance().getTime());
-                               } catch (AiravataAPIInvocationException e) {
-                                       e.printStackTrace();
-                               }
+                       saveApplicationJob(jobExecutionContext);
                }
+            GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, 
ApplicationJobStatus.INITIALIZE);
             Thread standardOutWriter = new 
InputStreamToFileWriter(process.getInputStream(), app.getStandardOutput());
             Thread standardErrorWriter = new 
InputStreamToFileWriter(process.getErrorStream(), app.getStandardError());
 
@@ -164,23 +139,10 @@ public class LocalProvider implements GF
             standardErrorWriter.setDaemon(true);
             standardOutWriter.start();
             standardErrorWriter.start();
-            if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() != 
null){
-                try {
-                                       
jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId,
 ApplicationJobStatus.EXECUTING, Calendar.getInstance().getTime());
-                               } catch (AiravataAPIInvocationException e) {
-                                       e.printStackTrace();
-                               }
-               }
+            GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, 
ApplicationJobStatus.EXECUTING);
             // wait for the process (application) to finish executing
             int returnValue = process.waitFor();
-
-               if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() 
!= null){
-                try {
-                                       
jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId,
 ApplicationJobStatus.FINALIZE, Calendar.getInstance().getTime());
-                               } catch (AiravataAPIInvocationException e) {
-                                       e.printStackTrace();
-                               }
-               }
+            GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, 
ApplicationJobStatus.FINALIZE);
 
             // make sure other two threads are done
             standardOutWriter.join();
@@ -191,22 +153,10 @@ public class LocalProvider implements GF
              * just provide warning in the log messages
              */
             if (returnValue != 0) {
-               if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() 
!= null){
-                    try {
-                                       
jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId,
 ApplicationJobStatus.FAILED, Calendar.getInstance().getTime());
-                               } catch (AiravataAPIInvocationException e) {
-                                       e.printStackTrace();
-                               }
-               }
+               GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, 
ApplicationJobStatus.FAILED);
                 log.error("Process finished with non zero return value. 
Process may have failed");
             } else {
-               if(jobExecutionContext.getGFacConfiguration().getAiravataAPI() 
!= null){
-                    try {
-                                       
jobExecutionContext.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(jobId,
 ApplicationJobStatus.FINISHED, Calendar.getInstance().getTime());
-                               } catch (AiravataAPIInvocationException e) {
-                                       e.printStackTrace();
-                               }
-               }
+               GFacUtils.updateApplicationJobStatus(jobExecutionContext,jobId, 
ApplicationJobStatus.FINISHED);
                 log.info("Process finished with return value of zero.");
             }
 
@@ -225,6 +175,27 @@ public class LocalProvider implements GF
         }
     }
 
+       private void saveApplicationJob(JobExecutionContext jobExecutionContext)
+                       throws GFacProviderException {
+               ApplicationDeploymentDescriptionType app = jobExecutionContext.
+                
getApplicationContext().getApplicationDeploymentDescription().getType();
+               ApplicationJob appJob = 
GFacUtils.createApplicationJob(jobExecutionContext);
+               appJob.setJobId(jobId);
+               LocalProviderJobData data = new LocalProviderJobData();
+               data.setApplicationName(app.getExecutableLocation());
+               data.setInputDir(app.getInputDataDirectory());
+               data.setOutputDir(app.getOutputDataDirectory());
+               data.setWorkingDir(builder.directory().toString());
+               
data.setInputParameters(ProviderUtils.getInputParameters(jobExecutionContext));
+               ByteArrayOutputStream stream = new ByteArrayOutputStream();
+               JAXB.marshal(data, stream);
+               appJob.setJobData(stream.toString());
+               appJob.setSubmittedTime(Calendar.getInstance().getTime());
+               appJob.setJobStatus(ApplicationJobStatus.SUBMITTED);
+               appJob.setStatusUpdateTime(appJob.getSubmittedTime());
+               GFacUtils.recordApplicationJob(jobExecutionContext, appJob);
+       }
+
     public void dispose(JobExecutionContext jobExecutionContext) throws 
GFacProviderException {
         ApplicationDeploymentDescriptionType app = 
jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription().getType();
 

Modified: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java
 (original)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GFacUtils.java
 Mon Jun 10 19:21:49 2013
@@ -20,11 +20,14 @@
 */
 package org.apache.airavata.gfac.utils;
 
+import org.apache.airavata.client.api.AiravataAPI;
+import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.commons.gfac.type.ActualParameter;
 import org.apache.airavata.gfac.Constants;
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.deployment.classloaders.JarFileClassLoader;
 import org.apache.airavata.registry.api.workflow.ApplicationJob;
+import 
org.apache.airavata.registry.api.workflow.ApplicationJob.ApplicationJobStatus;
 import org.apache.airavata.schemas.gfac.*;
 import org.apache.axiom.om.OMElement;
 import org.apache.axis2.deployment.DeploymentException;
@@ -415,4 +418,41 @@ public class GFacUtils {
                
appJob.setApplicationDescriptionId(jobExecutionContext.getApplicationContext().getApplicationDeploymentDescription().getType().getApplicationName().getStringValue());
                return appJob;
        }
+       
+       public static void 
updateApplicationJobStatusUpdateTime(JobExecutionContext context, String jobId, 
Date statusUpdateTime){
+        AiravataAPI airavataAPI = 
context.getGFacConfiguration().getAiravataAPI();
+               if(airavataAPI != null){
+                       try {
+                               
airavataAPI.getProvenanceManager().updateApplicationJobStatusUpdateTime(jobId, 
statusUpdateTime);
+                       } catch (AiravataAPIInvocationException e) {
+                               log.error("Error in updating application job 
status time "+statusUpdateTime.toString()+" for job Id "+jobId+"!!!", e);
+                       }
+        }
+       }
+       
+       public static void updateApplicationJobStatus(JobExecutionContext 
context, String jobId, ApplicationJobStatus status, Date statusUpdateTime){
+        AiravataAPI airavataAPI = 
context.getGFacConfiguration().getAiravataAPI();
+               if(airavataAPI != null){
+                       try {
+                               
airavataAPI.getProvenanceManager().updateApplicationJobStatus(jobId, status, 
statusUpdateTime);
+                       } catch (AiravataAPIInvocationException e) {
+                               log.error("Error in updating application job 
status "+status.toString()+" for job Id "+jobId+"!!!", e);
+                       }
+        }
+       }
+       
+       public static void recordApplicationJob(JobExecutionContext context, 
ApplicationJob job){
+        AiravataAPI airavataAPI = 
context.getGFacConfiguration().getAiravataAPI();
+               if(airavataAPI != null){
+                       try {
+                               
airavataAPI.getProvenanceManager().addApplicationJob(job);
+                       } catch (AiravataAPIInvocationException e) {
+                               log.error("Error in persisting application job 
data for application job "+job.getJobId()+"!!!", e);
+                       }
+        }
+       }
+       
+       public static void updateApplicationJobStatus(JobExecutionContext 
context, String jobId, ApplicationJobStatus status){
+               updateApplicationJobStatus(context, jobId, status, 
Calendar.getInstance().getTime());
+       }
 }

Modified: 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java
 (original)
+++ 
airavata/trunk/modules/gfac-core/src/main/java/org/apache/airavata/gfac/utils/GramJobSubmissionListener.java
 Mon Jun 10 19:21:49 2013
@@ -22,7 +22,6 @@ package org.apache.airavata.gfac.utils;
 
 import java.util.Calendar;
 
-import org.apache.airavata.client.api.exception.AiravataAPIInvocationException;
 import org.apache.airavata.gfac.GFacException;
 import org.apache.airavata.gfac.context.JobExecutionContext;
 import org.apache.airavata.gfac.context.security.GSISecurityContext;
@@ -83,13 +82,7 @@ public class GramJobSubmissionListener i
                             break;
                         }
                     } else {
-                       try {
-                                       if 
(context.getGFacConfiguration().getAiravataAPI()!=null){
-                                               
context.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatusUpdateTime(job.getIDAsString(),
 Calendar.getInstance().getTime());
-                                       }
-                               } catch (AiravataAPIInvocationException e) {
-                                       e.printStackTrace();
-                               }
+                       GFacUtils.updateApplicationJobStatusUpdateTime(context, 
job.getIDAsString(), Calendar.getInstance().getTime());
                         log.info("job " + job.getIDAsString() + " have same 
status: "
                                 + GramJob.getStatusAsString(status));
                     }
@@ -128,13 +121,7 @@ public class GramJobSubmissionListener i
     }
 
     private synchronized boolean setStatus(int status, int error) {
-       try {
-                       if 
(context.getGFacConfiguration().getAiravataAPI()!=null){
-                               
context.getGFacConfiguration().getAiravataAPI().getProvenanceManager().updateApplicationJobStatus(job.getIDAsString(),
 getApplicationJobStatus(status), Calendar.getInstance().getTime());
-                       }
-               } catch (AiravataAPIInvocationException e) {
-                       e.printStackTrace();
-               }
+               
GFacUtils.updateApplicationJobStatus(context,job.getIDAsString(), 
getApplicationJobStatus(status));
         this.status = status;
         this.error = error;
 

Modified: 
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java
 (original)
+++ 
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/ProvenanceRegistry.java
 Mon Jun 10 19:21:49 2013
@@ -453,7 +453,7 @@ public interface ProvenanceRegistry exte
      * @throws RegistryException
      */
     public void updateApplicationJobStatus(String jobId, ApplicationJobStatus 
status, Date statusUpdateTime) throws RegistryException;
-    
+   
     /**
      * Update the job data. GFacProvider implementation should decide the job 
data. Typically it'll 
      * be a serialization of the submitted job query (eg: rsl for a GRAM job) 

Modified: 
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java
URL: 
http://svn.apache.org/viewvc/airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java?rev=1491570&r1=1491569&r2=1491570&view=diff
==============================================================================
--- 
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java
 (original)
+++ 
airavata/trunk/modules/registry/registry-api/src/main/java/org/apache/airavata/registry/api/workflow/ApplicationJob.java
 Mon Jun 10 19:21:49 2013
@@ -29,19 +29,75 @@ import java.util.Date;
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
 public class ApplicationJob {
+       /**
+        * Represents the status of the application job execution life 
cycle.<br /> 
+        * <em><strong>Note</strong> : The applicable 
<code>ApplicationJobStatus</code> values and the 
+        * particular actions that define or lead to those 
<code>ApplicationJobStatus</code> values is 
+        * based on type of application (eg: GRAM, EC2) being executed</em>.   
+        */
        public static enum ApplicationJobStatus{
-               AUTHENTICATE, //authenticating
-               SUBMITTED, //job is submitted, possibly waiting to start 
executing
-               INITIALIZE, //job is being initialized 
-               PENDING, //job is pending to be started
-               EXECUTING, //submitted job is being executed
-               SUSPENDED, //job was paused
-               WAITING_FOR_DATA, // job is waiting for data to continue 
executing
-               FINALIZE, //job is being initialized 
-               FINISHED, // job completed successfully
-               FAILED, // error occurred while job was executing and the job 
stopped
-               CANCELLED, //job was cancelled
-               UNKNOWN // unknown status. lookup the metadata for more details.
+               /**
+                * Input data/files is being staged for the application job.
+                */
+               STAGING,
+               /**
+                * Authenticating
+                */
+               AUTHENTICATE,
+               /**
+                * Application job is submitted, possibly waiting to start 
executing.
+                */
+               SUBMITTED,
+               /**
+                * Application job is being initialized.
+                */
+               INITIALIZE, 
+               /**
+                * Application job is waiting to start/continue its executing.
+                */
+               PENDING,
+               /**
+                * Application job is being executed.
+                */
+               EXECUTING, 
+               /**
+                * Application job is paused/suspended
+                */
+               SUSPENDED,
+               /**
+                * Application job is waiting for data or a trigger to continue 
its execution.
+                */
+               WAITING_FOR_DATA,
+               /**
+                * Finalizing the execution of the application job.
+                */
+               FINALIZE,
+               /**
+                * Results of the application job execution are being generated.
+                */
+               RESULTS_GEN,
+               /**
+                * Generated results from the application job execution is 
being retrieved.
+                */
+               RESULTS_RETRIEVE,
+               /**
+                * Application job completed successfully.
+                */
+               FINISHED,
+               /**
+                * Error occurred during the application job execution and the 
job was terminated.
+                */
+               FAILED, 
+               /**
+                * Execution of the application job was cancelled.
+                */
+               CANCELLED,
+               /**
+                * Unable to determine the current status of the application 
job. <br />
+                * <em><strong>Note: </strong>More information may be available 
on the application job 
+                * </em><code>metadata</code>.
+                */
+               UNKNOWN 
        }
        
        private String experimentId;
@@ -61,6 +117,10 @@ public class ApplicationJob {
        
        private String metadata;
 
+       /**
+        * The id of the experiment which this application job corresponds to
+        * @return
+        */
        public String getExperimentId() {
                return experimentId;
        }
@@ -69,6 +129,9 @@ public class ApplicationJob {
                this.experimentId = experimentId;
        }
 
+       /**
+        * The id of the workflow instance execution which this application job 
corresponds to
+        */
        public String getWorkflowExecutionId() {
                return workflowExecutionId;
        }
@@ -77,6 +140,9 @@ public class ApplicationJob {
                this.workflowExecutionId = workflowExecutionId;
        }
 
+       /**
+        * The id of the node which this application job corresponds to
+        */
        public String getNodeId() {
                return nodeId;
        }
@@ -85,6 +151,9 @@ public class ApplicationJob {
                this.nodeId = nodeId;
        }
 
+       /**
+        * The id of the service description which this application job 
corresponds to
+        */
        public String getServiceDescriptionId() {
                return serviceDescriptionId;
        }
@@ -92,7 +161,12 @@ public class ApplicationJob {
        public void setServiceDescriptionId(String serviceDescriptionId) {
                this.serviceDescriptionId = serviceDescriptionId;
        }
-
+       
+       /**
+        * The id of the host description which this application job 
corresponds to <br />
+        * <em><strong>Note: </strong>For data saved using the deprecated API 
function 
+        * {@code updateWorkflowNodeGramData(...)} this will be the address of 
the host</em>
+        */
        public String getHostDescriptionId() {
                return hostDescriptionId;
        }
@@ -101,6 +175,9 @@ public class ApplicationJob {
                this.hostDescriptionId = hostDescriptionId;
        }
 
+       /**
+        * The id of the application description which this application job 
corresponds to 
+        */
        public String getApplicationDescriptionId() {
                return applicationDescriptionId;
        }
@@ -109,22 +186,47 @@ public class ApplicationJob {
                this.applicationDescriptionId = applicationDescriptionId;
        }
 
+       /**
+        * id representing the application job uniquely identified in the 
Airavata system <br />
+        * <em><strong>Note: </strong>This id may or may not correspond to an 
id that can identify a 
+        * resource execution in the computational middleware</em>
+        */
        public String getJobId() {
                return jobId;
        }
 
+       /**
+        * Set a unique id which represents this job in the Airavata system. 
+        */
        public void setJobId(String jobId) {
                this.jobId = jobId;
        }
 
+       /**
+        * Configuration, execution and input data relating to the execution of 
the application job. <br /> 
+        * <em><strong>Note: </strong>The structure of the data is determined 
by the type of application 
+        * <code>(eg: GRAM, EC2) being executed.</code></em> 
+        */
        public String getJobData() {
                return jobData;
        }
 
+       /**
+        * Set the configuration, execution and input data relating to the 
execution of the application. 
+        * job. <br /> 
+        * <em><strong>Note: </strong>The structure of the data is up to the 
Provider implementation 
+        * <code>(eg: GRAMProvider, EC2Provider)</code>. It is strongly 
encouraged to include in this 
+        * field all the information (excluding descriptor data & any sensitive 
data such as password 
+        * credentials) necessary for a 3rd party to repeat the execution of 
application job if 
+        * necessary.</em> 
+        */
        public void setJobData(String jobData) {
                this.jobData = jobData;
        }
 
+       /**
+        * When was this application job was submitted.
+        */
        public Date getSubmittedTime() {
                return submittedTime;
        }
@@ -133,6 +235,10 @@ public class ApplicationJob {
                this.submittedTime = submittedTime;
        }
 
+       /**
+        * When was the status of this application job was last updated.
+        * @return
+        */
        public Date getStatusUpdateTime() {
                return statusUpdateTime;
        }
@@ -141,6 +247,10 @@ public class ApplicationJob {
                this.statusUpdateTime = statusUpdateTime;
        }
 
+       /**
+        * Get the currently recorded status of the application job. 
+        * @return
+        */
        public ApplicationJobStatus getJobStatus() {
                return jobStatus;
        }
@@ -149,6 +259,11 @@ public class ApplicationJob {
                this.jobStatus = jobStatus;
        }
 
+       /**
+        * Custom metadata maintained for the application job containing that 
may contain any additional 
+        * information relating to the execution.
+        * @return
+        */
        public String getMetadata() {
                return metadata;
        }


Reply via email to