You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sh...@apache.org on 2015/06/03 20:14:48 UTC

[31/39] airavata git commit: Refactored gfac sub modules, merged gfac-ssh, gfac-gsissh, gfac-local, gfac-monitor and gsissh modules and create gface-impl, removed implementation from gfac-core to gfac-impl

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java
deleted file mode 100644
index c764b63..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/cpi/GFacImpl.java
+++ /dev/null
@@ -1,798 +0,0 @@
-///*
-// *
-// * Licensed to the Apache Software Foundation (ASF) under one
-// * or more contributor license agreements.  See the NOTICE file
-// * distributed with this work for additional information
-// * regarding copyright ownership.  The ASF licenses this file
-// * to you under the Apache License, Version 2.0 (the
-// * "License"); you may not use this file except in compliance
-// * with the License.  You may obtain a copy of the License at
-// *
-// *   http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing,
-// * software distributed under the License is distributed on an
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// * KIND, either express or implied.  See the License for the
-// * specific language governing permissions and limitations
-// * under the License.
-// *
-//*/
-//package org.apache.airavata.gfac.core.cpi;
-//
-//import java.io.File;
-//import java.io.IOException;
-//import java.net.URL;
-//import java.util.ArrayList;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.Properties;
-//
-//import javax.xml.parsers.ParserConfigurationException;
-//import javax.xml.xpath.XPathExpressionException;
-//
-//import org.apache.airavata.client.api.AiravataAPI;
-//import org.apache.airavata.common.exception.ApplicationSettingsException;
-//import org.apache.airavata.common.utils.MonitorPublisher;
-//import org.apache.airavata.common.utils.ServerSettings;
-//import org.apache.airavata.common.utils.listener.AbstractActivityListener;
-//import org.apache.airavata.commons.gfac.type.ApplicationDescription;
-//import org.apache.airavata.commons.gfac.type.HostDescription;
-//import org.apache.airavata.commons.gfac.type.ServiceDescription;
-//import org.apache.airavata.gfac.Constants;
-//import org.apache.airavata.gfac.GFacConfiguration;
-//import org.apache.airavata.gfac.GFacException;
-//import org.apache.airavata.gfac.Scheduler;
-//import org.apache.airavata.gfac.core.context.ApplicationContext;
-//import org.apache.airavata.gfac.core.context.JobExecutionContext;
-//import org.apache.airavata.gfac.core.context.MessageContext;
-//import org.apache.airavata.gfac.core.handler.GFacHandler;
-//import org.apache.airavata.gfac.core.handler.GFacHandlerConfig;
-//import org.apache.airavata.gfac.core.handler.GFacHandlerException;
-//import org.apache.airavata.gfac.core.handler.ThreadedHandler;
-//import org.apache.airavata.gfac.core.monitor.ExperimentIdentity;
-//import org.apache.airavata.gfac.core.monitor.JobIdentity;
-//import org.apache.airavata.gfac.core.monitor.MonitorID;
-//import org.apache.airavata.gfac.core.monitor.TaskIdentity;
-////import org.apache.airavata.api.server.listener.ExperimentStatusChangedEvent;
-//import org.apache.airavata.gfac.core.monitor.state.JobStatusChangeRequest;
-//import org.apache.airavata.gfac.core.monitor.state.TaskStatusChangeRequest;
-//import org.apache.airavata.gfac.core.monitor.state.TaskStatusChangedEvent;
-//import org.apache.airavata.gfac.core.notification.events.ExecutionFailEvent;
-//import org.apache.airavata.gfac.core.notification.listeners.LoggingListener;
-//import org.apache.airavata.gfac.core.notification.listeners.WorkflowTrackingListener;
-//import org.apache.airavata.gfac.core.provider.GFacProvider;
-//import org.apache.airavata.gfac.core.scheduler.HostScheduler;
-//import org.apache.airavata.gfac.core.states.GfacExperimentState;
-//import org.apache.airavata.gfac.core.utils.GFacUtils;
-//import org.apache.airavata.model.workspace.experiment.DataObjectType;
-//import org.apache.airavata.model.workspace.experiment.Experiment;
-//import org.apache.airavata.model.workspace.experiment.ExperimentState;
-//import org.apache.airavata.model.workspace.experiment.JobState;
-//import org.apache.airavata.model.workspace.experiment.TaskDetails;
-//import org.apache.airavata.model.workspace.experiment.TaskState;
-//import org.apache.airavata.registry.api.AiravataRegistry2;
-//import org.apache.airavata.registry.cpi.Registry;
-//import org.apache.airavata.registry.cpi.RegistryModelType;
-//import org.apache.zookeeper.ZooKeeper;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.xml.sax.SAXException;
-//
-//import com.google.common.eventbus.EventBus;
-//
-///**
-// * This is the GFac CPI class for external usage, this simply have a single method to submit a job to
-// * the resource, required data for the job has to be stored in registry prior to invoke this object.
-// */
-//public class GFacImpl implements GFac {
-//    private static final Logger log = LoggerFactory.getLogger(GFacImpl.class);
-//    public static final String ERROR_SENT = "ErrorSent";
-//
-//    private Registry registry;
-//
-//    private AiravataAPI airavataAPI;
-//
-//    private AiravataRegistry2 airavataRegistry2;
-//
-//    private ZooKeeper zk;
-//
-//    private static List<ThreadedHandler> daemonHandlers;
-//
-//    private File gfacConfigFile;
-//
-//    private List<AbstractActivityListener> activityListeners;
-//
-//    private static MonitorPublisher monitorPublisher;
-//
-//    /**
-//     * Constructor for GFac
-//     *
-//     * @param registry
-//     * @param airavataAPI
-//     * @param airavataRegistry2
-//     */
-//    public GFacImpl(Registry registry, AiravataAPI airavataAPI, AiravataRegistry2 airavataRegistry2) {
-//        this.registry = registry;
-//        this.airavataAPI = airavataAPI;
-//        this.airavataRegistry2 = airavataRegistry2;
-//        daemonHandlers = new ArrayList<ThreadedHandler>();
-//        activityListeners = new ArrayList<AbstractActivityListener>();
-//        monitorPublisher = new MonitorPublisher(new EventBus());     // This is a EventBus common for gfac
-//        startStatusUpdators();
-//        startDaemonHandlers();
-//    }
-//
-//    private void startStatusUpdators() {
-//        try {
-//            String[] listenerClassList = ServerSettings.getActivityListeners();
-//            for (String listenerClass : listenerClassList) {
-//                Class<? extends AbstractActivityListener> aClass = Class.forName(listenerClass).asSubclass(AbstractActivityListener.class);
-//                AbstractActivityListener abstractActivityListener = aClass.newInstance();
-//                activityListeners.add(abstractActivityListener);
-//                abstractActivityListener.setup(getMonitorPublisher(), registry);
-//                log.info("Registering listener: " + listenerClass);
-//                getMonitorPublisher().registerListener(abstractActivityListener);
-//            }
-//        }catch (ClassNotFoundException e) {
-//            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-//        } catch (InstantiationException e) {
-//            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-//        } catch (IllegalAccessException e) {
-//            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-//        } catch (ApplicationSettingsException e){
-//            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-//        }
-//    }
-//    private void startDaemonHandlers()  {
-//        List<GFacHandlerConfig> daemonHandlerConfig = null;
-//        URL resource = GFacImpl.class.getClassLoader().getResource(org.apache.airavata.common.utils.Constants.GFAC_CONFIG_XML);
-//        gfacConfigFile = new File(resource.getPath());
-//        try {
-//            daemonHandlerConfig = GFacConfiguration.getDaemonHandlers(gfacConfigFile);
-//        } catch (ParserConfigurationException e) {
-//            log.error("Error parsing gfac-config.xml, double check the xml configuration",e);
-//        } catch (IOException e) {
-//            log.error("Error parsing gfac-config.xml, double check the xml configuration", e);
-//        } catch (SAXException e) {
-//            log.error("Error parsing gfac-config.xml, double check the xml configuration", e);
-//        } catch (XPathExpressionException e) {
-//            log.error("Error parsing gfac-config.xml, double check the xml configuration", e);
-//        }
-//
-//        for(GFacHandlerConfig handlerConfig:daemonHandlerConfig){
-//            String className = handlerConfig.getClassName();
-//            try {
-//                Class<?> aClass = Class.forName(className).asSubclass(ThreadedHandler.class);
-//                ThreadedHandler threadedHandler = (ThreadedHandler) aClass.newInstance();
-//                threadedHandler.initProperties(handlerConfig.getProperties());
-//                daemonHandlers.add(threadedHandler);
-//            }catch (ClassNotFoundException e){
-//                log.error("Error initializing the handler: " + className);
-//                log.error(className + " class has to implement " + ThreadedHandler.class);
-//            } catch (InstantiationException e) {
-//                log.error("Error initializing the handler: " + className);
-//                log.error(className + " class has to implement " + ThreadedHandler.class);
-//            } catch (IllegalAccessException e) {
-//                log.error("Error initializing the handler: " + className);
-//                log.error(className + " class has to implement " + ThreadedHandler.class);
-//            } catch (GFacHandlerException e) {
-//                log.error("Error initializing the handler " + className);
-//            } catch (GFacException e) {
-//                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-//            }
-//        }
-//        for(ThreadedHandler tHandler:daemonHandlers){
-//            (new Thread(tHandler)).start();
-//        }
-//    }
-//
-//    /**
-//     * This can be used to submit jobs for testing purposes just by filling parameters by hand (JobExecutionContext)
-//     */
-//    public GFacImpl() {
-//        daemonHandlers = new ArrayList<ThreadedHandler>();
-//        startDaemonHandlers();
-//    }
-//
-//    /**
-//     * This is the job launching method outsiders of GFac can use, this will invoke the GFac handler chain and providers
-//     * And update the registry occordingly, so the users can query the database to retrieve status and output from Registry
-//     *
-//     * @param experimentID
-//     * @return
-//     * @throws GFacException
-//     */
-//    public boolean submitJob(String experimentID,String taskID, String gatewayID) throws GFacException {
-//        JobExecutionContext jobExecutionContext = null;
-//        try {
-//            jobExecutionContext = createJEC(experimentID, taskID, gatewayID);
-//            return submitJob(jobExecutionContext);
-//        } catch (Exception e) {
-//            log.error("Error inovoking the job with experiment ID: " + experimentID);
-//            throw new GFacException(e);
-//        }
-//    }
-//
-//    private JobExecutionContext createJEC(String experimentID, String taskID, String gatewayID) throws Exception {
-//        JobExecutionContext jobExecutionContext;
-//        TaskDetails taskData = (TaskDetails) registry.get(RegistryModelType.TASK_DETAIL, taskID);
-//
-//        // this is wear our new model and old model is mapping (so serviceName in ExperimentData and service name in ServiceDescriptor
-//        // has to be same.
-//
-//        // 1. Get the Task from the task ID and construct the Job object and save it in to registry
-//        // 2. Add another property to jobExecutionContext and read them inside the provider and use it.
-//        String serviceName = taskData.getApplicationId();
-//        if (serviceName == null) {
-//            throw new GFacException("Error executing the job because there is not Application Name in this Experiment:  " + serviceName );
-//        }
-//
-//        ServiceDescription serviceDescription = airavataRegistry2.getServiceDescriptor(serviceName);
-//        if (serviceDescription == null ) {
-//            throw new GFacException("Error executing the job because there is not Application Name in this Experiment:  " + serviceName );
-//        }
-//        String hostName;
-//        HostDescription hostDescription = null;
-//        if(taskData.getTaskScheduling().getResourceHostId() != null){
-//            hostName = taskData.getTaskScheduling().getResourceHostId();
-//            hostDescription = airavataRegistry2.getHostDescriptor(hostName);
-//        }else{
-//        	  List<HostDescription> registeredHosts = new ArrayList<HostDescription>();
-//              Map<String, ApplicationDescription> applicationDescriptors = airavataRegistry2.getApplicationDescriptors(serviceName);
-//              for (String hostDescName : applicationDescriptors.keySet()) {
-//                  registeredHosts.add(airavataRegistry2.getHostDescriptor(hostDescName));
-//              }
-//              Class<? extends HostScheduler> aClass = Class.forName(ServerSettings.getHostScheduler()).asSubclass(HostScheduler.class);
-//             HostScheduler hostScheduler = aClass.newInstance();
-//             //TODO cleanup
-//            hostDescription = registeredHosts.get(0);//hostScheduler.schedule(registeredHosts);
-//        	hostName = hostDescription.getType().getHostName();
-//        }
-//        if(hostDescription == null){
-//        	throw new GFacException("Error executing the job as the host is not registered " + hostName);
-//        }
-//        ApplicationDescription applicationDescription = airavataRegistry2.getApplicationDescriptors(serviceName, hostName);
-//        URL resource = GFacImpl.class.getClassLoader().getResource(org.apache.airavata.common.utils.Constants.GFAC_CONFIG_XML);
-//        Properties configurationProperties = ServerSettings.getProperties();
-//        GFacConfiguration gFacConfiguration = GFacConfiguration.create(new File(resource.getPath()), airavataAPI, configurationProperties);
-//
-//
-//        // start constructing jobexecutioncontext
-//        jobExecutionContext = new JobExecutionContext(gFacConfiguration, serviceName);
-//
-//        // setting experiment/task/workflownode related information
-//        Experiment experiment = (Experiment) registry.get(RegistryModelType.EXPERIMENT, experimentID);
-//        jobExecutionContext.setExperiment(experiment);
-//        jobExecutionContext.setExperimentID(experimentID);
-//        jobExecutionContext.setWorkflowNodeDetails(experiment.getWorkflowNodeDetailsList().get(0));
-//        jobExecutionContext.setTaskData(taskData);
-//
-//        // setting the registry
-//        jobExecutionContext.setRegistry(registry);
-//
-//        ApplicationContext applicationContext = new ApplicationContext();
-//        applicationContext.setApplicationDeploymentDescription(applicationDescription);
-//        applicationContext.setHostDescription(hostDescription);
-//        applicationContext.setServiceDescription(serviceDescription);
-//        jobExecutionContext.setApplicationContext(applicationContext);
-//
-//        List<DataObjectType> experimentInputs = taskData.getApplicationInputs();
-//        jobExecutionContext.setInMessageContext(new MessageContext(GFacUtils.getInMessageContext(experimentInputs,
-//                serviceDescription.getType().getInputParametersArray())));
-//
-//        List<DataObjectType> outputData = taskData.getApplicationOutputs();
-//        jobExecutionContext.setOutMessageContext(new MessageContext(GFacUtils.getInMessageContext(outputData,
-//                serviceDescription.getType().getOutputParametersArray())));
-//
-//        jobExecutionContext.setProperty(Constants.PROP_TOPIC, experimentID);
-//        jobExecutionContext.setGfac(this);
-//        return jobExecutionContext;
-//    }
-//
-//    private boolean submitJob(JobExecutionContext jobExecutionContext) throws GFacException {
-//        // We need to check whether this job is submitted as a part of a large workflow. If yes,
-//        // we need to setup workflow tracking listerner.
-//        String workflowInstanceID = null;
-//        if ((workflowInstanceID = (String) jobExecutionContext.getProperty(Constants.PROP_WORKFLOW_INSTANCE_ID)) != null) {
-//            // This mean we need to register workflow tracking listener.
-//            //todo implement WorkflowTrackingListener properly
-//            registerWorkflowTrackingListener(workflowInstanceID, jobExecutionContext);
-//        }
-//        // Register log event listener. This is required in all scenarios.
-//        jobExecutionContext.getNotificationService().registerListener(new LoggingListener());
-//        schedule(jobExecutionContext);
-//        return true;
-//    }
-//
-//
-//    public boolean cancel(String experimentID, String taskID, String gatewayID) throws GFacException {
-//        JobExecutionContext jobExecutionContext = null;
-//        try {
-//            jobExecutionContext = createJEC(experimentID, taskID, gatewayID);
-//            return cancel(jobExecutionContext);
-//        } catch (Exception e) {
-//            log.error("Error inovoking the job with experiment ID: " + experimentID);
-//            throw new GFacException(e);
-//        }
-//    }
-//
-//    private boolean cancel(JobExecutionContext jobExecutionContext) throws GFacException {
-//        // We need to check whether this job is submitted as a part of a large workflow. If yes,
-//        // we need to setup workflow tracking listerner.
-//        String workflowInstanceID = null;
-//        if ((workflowInstanceID = (String) jobExecutionContext.getProperty(Constants.PROP_WORKFLOW_INSTANCE_ID)) != null) {
-//            // This mean we need to register workflow tracking listener.
-//            //todo implement WorkflowTrackingListener properly
-//            registerWorkflowTrackingListener(workflowInstanceID, jobExecutionContext);
-//        }
-//        // Register log event listener. This is required in all scenarios.
-//        jobExecutionContext.getNotificationService().registerListener(new LoggingListener());
-//        try {
-//            Scheduler.schedule(jobExecutionContext);
-//            GFacProvider provider = jobExecutionContext.getProvider();
-//            if (provider != null) {
-//                initProvider(provider, jobExecutionContext);
-//                cancelProvider(provider, jobExecutionContext);
-//                disposeProvider(provider, jobExecutionContext);
-//            }
-//        }catch (Exception e) {
-//            try {
-//                monitorPublisher.publish(new JobStatusChangeRequest(new MonitorID(jobExecutionContext),
-//                        new JobIdentity(jobExecutionContext.getExperimentID(),
-//                                jobExecutionContext.getWorkflowNodeDetails().getNodeInstanceId(),
-//                                jobExecutionContext.getTaskData().getTaskID(), jobExecutionContext.getJobDetails().getJobID()), JobState.FAILED));
-//            } catch (NullPointerException e1) {
-//                log.error("Error occured during updating the statuses of Experiments,tasks or Job statuses to failed, " +
-//                        "NullPointerException occurred because at this point there might not have Job Created", e1, e);
-//                // Updating status if job id is not set
-////				monitorPublisher
-////						.publish(new ExperimentStatusChangedEvent(new ExperimentIdentity(jobExecutionContext.getExperimentID()), ExperimentState.FAILED));
-//                // Updating the task status if there's any task associated
-//                monitorPublisher.publish(new TaskStatusChangedEvent(new TaskIdentity(jobExecutionContext.getExperimentID(), jobExecutionContext
-//                        .getWorkflowNodeDetails().getNodeInstanceId(), jobExecutionContext.getTaskData().getTaskID()), TaskState.FAILED));
-//
-//            }
-//            jobExecutionContext.setProperty(ERROR_SENT, "true");
-//            jobExecutionContext.getNotifier().publish(new ExecutionFailEvent(e.getCause()));
-//            throw new GFacException(e.getMessage(), e);
-//        }
-//        return true;
-//    }
-//
-//    private void schedule(JobExecutionContext jobExecutionContext) throws GFacException {
-//        // Scheduler will decide the execution flow of handlers and provider which handles
-//        // the job.
-//        String experimentID = jobExecutionContext.getExperimentID();
-//        try {
-//            Scheduler.schedule(jobExecutionContext);
-//
-//            // Executing in handlers in the order as they have configured in GFac configuration
-//            invokeInFlowHandlers(jobExecutionContext);
-////            if (experimentID != null){
-////                registry2.changeStatus(jobExecutionContext.getExperimentID(),AiravataJobState.State.INHANDLERSDONE);
-////            }
-////        }catch (ClassNotFoundException e) {
-////            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-////        } catch (InstantiationException e) {
-////            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-////        } catch (IllegalAccessException e) {
-////            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-////        } catch (ApplicationSettingsException e){
-////            log.error("Error loading the listener classes configured in airavata-server.properties",e);
-////        }
-////    }
-////    private void startDaemonHandlers()  {
-////        List<GFacHandlerConfig> daemonHandlerConfig = null;
-////        URL resource = GFacImpl.class.getClassLoader().getResource(org.apache.airavata.common.utils.Constants.GFAC_CONFIG_XML);
-////        gfacConfigFile = new File(resource.getPath());
-////        try {
-////            daemonHandlerConfig = GFacConfiguration.getDaemonHandlers(gfacConfigFile);
-////        } catch (ParserConfigurationException e) {
-////            log.error("Error parsing gfac-config.xml, double check the xml configuration",e);
-////        } catch (IOException e) {
-////            log.error("Error parsing gfac-config.xml, double check the xml configuration", e);
-////        } catch (SAXException e) {
-////            log.error("Error parsing gfac-config.xml, double check the xml configuration", e);
-////        } catch (XPathExpressionException e) {
-////            log.error("Error parsing gfac-config.xml, double check the xml configuration", e);
-////        }
-////
-////        for(GFacHandlerConfig handlerConfig:daemonHandlerConfig){
-////            String className = handlerConfig.getClassName();
-////            try {
-////                Class<?> aClass = Class.forName(className).asSubclass(ThreadedHandler.class);
-////                ThreadedHandler threadedHandler = (ThreadedHandler) aClass.newInstance();
-////                threadedHandler.initProperties(handlerConfig.getProperties());
-////                daemonHandlers.add(threadedHandler);
-////            }catch (ClassNotFoundException e){
-////                log.error("Error initializing the handler: " + className);
-////                log.error(className + " class has to implement " + ThreadedHandler.class);
-////            } catch (InstantiationException e) {
-////                log.error("Error initializing the handler: " + className);
-////                log.error(className + " class has to implement " + ThreadedHandler.class);
-////            } catch (IllegalAccessException e) {
-////                log.error("Error initializing the handler: " + className);
-////                log.error(className + " class has to implement " + ThreadedHandler.class);
-////            } catch (GFacHandlerException e) {
-////                log.error("Error initializing the handler " + className);
-////            } catch (GFacException e) {
-////                e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
-////            }
-////        }
-////        for(ThreadedHandler tHandler:daemonHandlers){
-////            (new Thread(tHandler)).start();
-////        }
-////    }
-////
-////    /**
-////     * This can be used to submit jobs for testing purposes just by filling parameters by hand (JobExecutionContext)
-////     */
-////    public GFacImpl() {
-////        daemonHandlers = new ArrayList<ThreadedHandler>();
-////        startDaemonHandlers();
-////    }
-////
-////    /**
-////     * This is the job launching method outsiders of GFac can use, this will invoke the GFac handler chain and providers
-////     * And update the registry occordingly, so the users can query the database to retrieve status and output from Registry
-////     *
-////     * @param experimentID
-////     * @return
-////     * @throws GFacException
-////     */
-////    public boolean submitJob(String experimentID,String taskID, String gatewayID) throws GFacException {
-////        JobExecutionContext jobExecutionContext = null;
-////        try {
-////            jobExecutionContext = createJEC(experimentID, taskID, gatewayID);
-////            return submitJob(jobExecutionContext);
-////        } catch (Exception e) {
-////            log.error("Error inovoking the job with experiment ID: " + experimentID);
-////            throw new GFacException(e);
-////        }
-////    }
-////
-////    private JobExecutionContext createJEC(String experimentID, String taskID, String gatewayID) throws Exception {
-////        JobExecutionContext jobExecutionContext;
-////        TaskDetails taskData = (TaskDetails) registry.get(RegistryModelType.TASK_DETAIL, taskID);
-////
-////        // this is wear our new model and old model is mapping (so serviceName in ExperimentData and service name in ServiceDescriptor
-////        // has to be same.
-////
-////        // 1. Get the Task from the task ID and construct the Job object and save it in to registry
-////        // 2. Add another property to jobExecutionContext and read them inside the provider and use it.
-////        String serviceName = taskData.getApplicationId();
-////        if (serviceName == null) {
-////            throw new GFacException("Error executing the job because there is not Application Name in this Experiment:  " + serviceName );
-////        }
-////
-////        ServiceDescription serviceDescription = airavataRegistry2.getServiceDescriptor(serviceName);
-////        if (serviceDescription == null ) {
-////            throw new GFacException("Error executing the job because there is not Application Name in this Experiment:  " + serviceName );
-////        }
-////        String hostName;
-////        HostDescription hostDescription = null;
-////        if(taskData.getTaskScheduling().getResourceHostId() != null){
-////            hostName = taskData.getTaskScheduling().getResourceHostId();
-////            hostDescription = airavataRegistry2.getHostDescriptor(hostName);
-////        }else{
-////        	  List<HostDescription> registeredHosts = new ArrayList<HostDescription>();
-////              Map<String, ApplicationDescription> applicationDescriptors = airavataRegistry2.getApplicationDescriptors(serviceName);
-////              for (String hostDescName : applicationDescriptors.keySet()) {
-////                  registeredHosts.add(airavataRegistry2.getHostDescriptor(hostDescName));
-////              }
-////              Class<? extends HostScheduler> aClass = Class.forName(ServerSettings.getHostScheduler()).asSubclass(HostScheduler.class);
-////             HostScheduler hostScheduler = aClass.newInstance();
-////             //TODO cleanup
-////            hostDescription = registeredHosts.get(0);//hostScheduler.schedule(registeredHosts);
-////        	hostName = hostDescription.getType().getHostName();
-////        }
-////        if(hostDescription == null){
-////        	throw new GFacException("Error executing the job as the host is not registered " + hostName);
-////        }
-////        ApplicationDescription applicationDescription = airavataRegistry2.getApplicationDescriptors(serviceName, hostName);
-////        URL resource = GFacImpl.class.getClassLoader().getResource(org.apache.airavata.common.utils.Constants.GFAC_CONFIG_XML);
-////        Properties configurationProperties = ServerSettings.getProperties();
-////        GFacConfiguration gFacConfiguration = GFacConfiguration.create(new File(resource.getPath()), airavataAPI, configurationProperties);
-////
-////
-////        // start constructing jobexecutioncontext
-////        jobExecutionContext = new JobExecutionContext(gFacConfiguration, serviceName);
-////
-////        // setting experiment/task/workflownode related information
-////        Experiment experiment = (Experiment) registry.get(RegistryModelType.EXPERIMENT, experimentID);
-////        jobExecutionContext.setExperiment(experiment);
-////        jobExecutionContext.setExperimentID(experimentID);
-////        jobExecutionContext.setWorkflowNodeDetails(experiment.getWorkflowNodeDetailsList().get(0));
-////        jobExecutionContext.setTaskData(taskData);
-////
-////        // setting the registry
-////        jobExecutionContext.setRegistry(registry);
-////
-////        ApplicationContext applicationContext = new ApplicationContext();
-////        applicationContext.setApplicationDeploymentDescription(applicationDescription);
-////        applicationContext.setHostDescription(hostDescription);
-////        applicationContext.setServiceDescription(serviceDescription);
-////        jobExecutionContext.setApplicationContext(applicationContext);
-////
-////        List<DataObjectType> experimentInputs = taskData.getApplicationInputs();
-////        jobExecutionContext.setInMessageContext(new MessageContext(GFacUtils.getInMessageContext(experimentInputs,
-////                serviceDescription.getType().getInputParametersArray())));
-////
-////        List<DataObjectType> outputData = taskData.getApplicationOutputs();
-////        jobExecutionContext.setOutMessageContext(new MessageContext(GFacUtils.getInMessageContext(outputData,
-////                serviceDescription.getType().getOutputParametersArray())));
-////
-////        jobExecutionContext.setProperty(Constants.PROP_TOPIC, experimentID);
-////        jobExecutionContext.setGfac(this);
-////        return jobExecutionContext;
-////    }
-////
-////    private boolean submitJob(JobExecutionContext jobExecutionContext) throws GFacException {
-////        // We need to check whether this job is submitted as a part of a large workflow. If yes,
-////        // we need to setup workflow tracking listerner.
-////        String workflowInstanceID = null;
-////        if ((workflowInstanceID = (String) jobExecutionContext.getProperty(Constants.PROP_WORKFLOW_INSTANCE_ID)) != null) {
-////            // This mean we need to register workflow tracking listener.
-////            //todo implement WorkflowTrackingListener properly
-////            registerWorkflowTrackingListener(workflowInstanceID, jobExecutionContext);
-////        }
-////        // Register log event listener. This is required in all scenarios.
-////        jobExecutionContext.getNotificationService().registerListener(new LoggingListener());
-////        schedule(jobExecutionContext);
-////        return true;
-////    }
-////
-////
-////    public boolean cancel(String experimentID, String taskID, String gatewayID) throws GFacException {
-////        JobExecutionContext jobExecutionContext = null;
-////        try {
-////            jobExecutionContext = createJEC(experimentID, taskID, gatewayID);
-////            return cancel(jobExecutionContext);
-////        } catch (Exception e) {
-////            log.error("Error inovoking the job with experiment ID: " + experimentID);
-////            throw new GFacException(e);
-////        }
-////    }
-////
-////    private boolean cancel(JobExecutionContext jobExecutionContext) throws GFacException {
-////        // We need to check whether this job is submitted as a part of a large workflow. If yes,
-////        // we need to setup workflow tracking listerner.
-////        String workflowInstanceID = null;
-////        if ((workflowInstanceID = (String) jobExecutionContext.getProperty(Constants.PROP_WORKFLOW_INSTANCE_ID)) != null) {
-////            // This mean we need to register workflow tracking listener.
-////            //todo implement WorkflowTrackingListener properly
-////            registerWorkflowTrackingListener(workflowInstanceID, jobExecutionContext);
-////        }
-////        // Register log event listener. This is required in all scenarios.
-////        jobExecutionContext.getNotificationService().registerListener(new LoggingListener());
-////        try {
-////            Scheduler.schedule(jobExecutionContext);
-////            GFacProvider provider = jobExecutionContext.getProvider();
-////            if (provider != null) {
-////                initProvider(provider, jobExecutionContext);
-////                cancelProvider(provider, jobExecutionContext);
-////                disposeProvider(provider, jobExecutionContext);
-////            }
-////        }catch (Exception e) {
-////            try {
-////                monitorPublisher.publish(new JobStatusChangeRequest(new MonitorID(jobExecutionContext),
-////                        new JobIdentity(jobExecutionContext.getExperimentID(),
-////                                jobExecutionContext.getWorkflowNodeDetails().getNodeInstanceId(),
-////                                jobExecutionContext.getTaskData().getTaskID(), jobExecutionContext.getJobDetails().getJobID()), JobState.FAILED));
-////            } catch (NullPointerException e1) {
-////                log.error("Error occured during updating the statuses of Experiments,tasks or Job statuses to failed, " +
-////                        "NullPointerException occurred because at this point there might not have Job Created", e1, e);
-////                // Updating status if job id is not set
-//////				monitorPublisher
-//////						.publish(new ExperimentStatusChangedEvent(new ExperimentIdentity(jobExecutionContext.getExperimentID()), ExperimentState.FAILED));
-////                // Updating the task status if there's any task associated
-////                monitorPublisher.publish(new TaskStatusChangedEvent(new TaskIdentity(jobExecutionContext.getExperimentID(), jobExecutionContext
-////                        .getWorkflowNodeDetails().getNodeInstanceId(), jobExecutionContext.getTaskData().getTaskID()), TaskState.FAILED));
-////
-////            }
-////            jobExecutionContext.setProperty(ERROR_SENT, "true");
-////            jobExecutionContext.getNotifier().publish(new ExecutionFailEvent(e.getCause()));
-////            throw new GFacException(e.getMessage(), e);
-////        }
-////        return true;
-////    }
-////
-////    private void schedule(JobExecutionContext jobExecutionContext) throws GFacException {
-////        // Scheduler will decide the execution flow of handlers and provider which handles
-////        // the job.
-////        String experimentID = jobExecutionContext.getExperimentID();
-////        try {
-////            Scheduler.schedule(jobExecutionContext);
-////
-////            // Executing in handlers in the order as they have configured in GFac configuration
-////            invokeInFlowHandlers(jobExecutionContext);
-//////            if (experimentID != null){
-//////                registry2.changeStatus(jobExecutionContext.getExperimentID(),AiravataJobState.State.INHANDLERSDONE);
-//////            }
-////
-////            // After executing the in handlers provider instance should be set to job execution context.
-////            // We get the provider instance and execute it.
-////            GFacProvider provider = jobExecutionContext.getProvider();
-////            if (provider != null) {
-////                initProvider(provider, jobExecutionContext);
-////                executeProvider(provider, jobExecutionContext);
-////                disposeProvider(provider, jobExecutionContext);
-////            }
-////            if (GFacUtils.isSynchronousMode(jobExecutionContext)) {
-////                invokeOutFlowHandlers(jobExecutionContext);
-////            }
-////        } catch (Exception e) {
-////            try {
-////                monitorPublisher.publish(new JobStatusChangeRequest(new MonitorID(jobExecutionContext),
-////                        new JobIdentity(jobExecutionContext.getExperimentID(),
-////                        jobExecutionContext.getWorkflowNodeDetails().getNodeInstanceId(),
-////                        jobExecutionContext.getTaskData().getTaskID(), jobExecutionContext.getJobDetails().getJobID()), JobState.FAILED));
-////            } catch (NullPointerException e1) {
-////                log.error("Error occured during updating the statuses of Experiments,tasks or Job statuses to failed, " +
-////                        "NullPointerException occurred because at this point there might not have Job Created", e1, e);
-////                // Updating status if job id is not set
-//////				monitorPublisher
-//////						.publish(new ExperimentStatusChangedEvent(new ExperimentIdentity(jobExecutionContext.getExperimentID()), ExperimentState.FAILED));
-////				// Updating the task status if there's any task associated
-////				monitorPublisher.publish(new TaskStatusChangedEvent(new TaskIdentity(jobExecutionContext.getExperimentID(), jobExecutionContext
-////						.getWorkflowNodeDetails().getNodeInstanceId(), jobExecutionContext.getTaskData().getTaskID()), TaskState.FAILED));
-////
-////            }
-////            jobExecutionContext.setProperty(ERROR_SENT, "true");
-////            jobExecutionContext.getNotifier().publish(new ExecutionFailEvent(e.getCause()));
-////            throw new GFacException(e.getMessage(), e);
-////        }
-////    }
-////
-////    private void initProvider(GFacProvider provider, JobExecutionContext jobExecutionContext) throws GFacException {
-////        try {
-////            provider.initialize(jobExecutionContext);
-////        } catch (Exception e) {
-////            throw new GFacException("Error while initializing provider " + provider.getClass().getName() + ".", e);
-////        }
-////    }
-////
-////    private void executeProvider(GFacProvider provider, JobExecutionContext jobExecutionContext) throws GFacException {
-////        try {
-////             provider.execute(jobExecutionContext);
-////        } catch (Exception e) {
-////            throw new GFacException("Error while executing provider " + provider.getClass().getName() + " functionality.", e);
-////        }
-////    }
-////    private void cancelProvider(GFacProvider provider, JobExecutionContext jobExecutionContext) throws GFacException {
-////        try {
-////            provider.cancelJob(jobExecutionContext);
-////        } catch (Exception e) {
-////            throw new GFacException("Error while executing provider " + provider.getClass().getName() + " functionality.", e);
-////        }
-////    }
-////
-////    private void disposeProvider(GFacProvider provider, JobExecutionContext jobExecutionContext) throws GFacException {
-////        try {
-////            provider.dispose(jobExecutionContext);
-////        } catch (Exception e) {
-////            throw new GFacException("Error while invoking provider " + provider.getClass().getName() + " dispose method.", e);
-////        }
-////    }
-////
-////    private void registerWorkflowTrackingListener(String workflowInstanceID, JobExecutionContext jobExecutionContext) {
-////        String workflowNodeID = (String) jobExecutionContext.getProperty(Constants.PROP_WORKFLOW_NODE_ID);
-////        String topic = (String) jobExecutionContext.getProperty(Constants.PROP_TOPIC);
-////        String brokerUrl = (String) jobExecutionContext.getProperty(Constants.PROP_BROKER_URL);
-////        jobExecutionContext.getNotificationService().registerListener(
-////                new WorkflowTrackingListener(workflowInstanceID, workflowNodeID, brokerUrl, topic));
-////
-////    }
-////
-////    private void invokeInFlowHandlers(JobExecutionContext jobExecutionContext) throws GFacException {
-////        List<GFacHandlerConfig> handlers = jobExecutionContext.getGFacConfiguration().getInHandlers();
-////        for (GFacHandlerConfig handlerClassName : handlers) {
-////            Class<? extends GFacHandler> handlerClass;
-////            GFacHandler handler;
-////            try {
-////                handlerClass = Class.forName(handlerClassName.getClassName().trim()).asSubclass(GFacHandler.class);
-////                handler = handlerClass.newInstance();
-////                handler.initProperties(handlerClassName.getProperties());
-////            } catch (ClassNotFoundException e) {
-////                throw new GFacException("Cannot load handler class " + handlerClassName, e);
-////            } catch (InstantiationException e) {
-////                throw new GFacException("Cannot instantiate handler class " + handlerClassName, e);
-////            } catch (IllegalAccessException e) {
-////                throw new GFacException("Cannot instantiate handler class " + handlerClassName, e);
-////            }
-////            try {
-////                handler.invoke(jobExecutionContext);
-////            } catch (GFacHandlerException e) {
-////                throw new GFacException("Error Executing a InFlow Handler", e.getCause());
-////            }
-////        }
-////    }
-////
-////    public void reInvokeOutFlowHandlers(JobExecutionContext jobExecutionContext) throws GFacException {
-////        this.invokeOutFlowHandlers(jobExecutionContext);
-////    }
-////
-////    public void invokeOutFlowHandlers(JobExecutionContext jobExecutionContext) throws GFacException {
-////        GFacConfiguration gFacConfiguration = jobExecutionContext.getGFacConfiguration();
-////        List<GFacHandlerConfig> handlers = null;
-////        if(gFacConfiguration != null){
-////         handlers = jobExecutionContext.getGFacConfiguration().getOutHandlers();
-////        }else {
-////            try {
-////                jobExecutionContext = createJEC(jobExecutionContext.getExperimentID(),
-////                        jobExecutionContext.getTaskData().getTaskID(), jobExecutionContext.getGatewayID());
-////            } catch (Exception e) {
-////                log.error("Error constructing job execution context during outhandler invocation");
-////                throw new GFacException(e);
-////            }
-////            schedule(jobExecutionContext);
-////        }
-////        for (GFacHandlerConfig handlerClassName : handlers) {
-////            Class<? extends GFacHandler> handlerClass;
-////            GFacHandler handler;
-////            try {
-////                handlerClass = Class.forName(handlerClassName.getClassName().trim()).asSubclass(GFacHandler.class);
-////                handler = handlerClass.newInstance();
-////                handler.initProperties(handlerClassName.getProperties());
-////            } catch (ClassNotFoundException e) {
-////                log.error(e.getMessage());
-////                throw new GFacException("Cannot load handler class " + handlerClassName, e);
-////            } catch (InstantiationException e) {
-////                log.error(e.getMessage());
-////                throw new GFacException("Cannot instantiate handler class " + handlerClassName, e);
-////            } catch (IllegalAccessException e) {
-////                log.error(e.getMessage());
-////                throw new GFacException("Cannot instantiate handler class " + handlerClassName, e);
-////            }
-////            try {
-////                handler.invoke(jobExecutionContext);
-////            } catch (Exception e) {
-////                // TODO: Better error reporting.
-////                throw new GFacException("Error Executing a OutFlow Handler", e);
-////            }
-////        }
-////
-////        monitorPublisher.publish(GfacExperimentState.COMPLETED);
-////        // At this point all the execution is finished so we update the task and experiment statuses.
-////        // Handler authors does not have to worry about updating experiment or task statuses.
-//////        monitorPublisher.publish(new
-//////                ExperimentStatusChangedEvent(new ExperimentIdentity(jobExecutionContext.getExperimentID()),
-//////                ExperimentState.COMPLETED));
-////        // Updating the task status if there's any task associated
-////        monitorPublisher.publish(new TaskStatusChangeRequest(
-////                new TaskIdentity(jobExecutionContext.getExperimentID(),
-////                        jobExecutionContext.getWorkflowNodeDetails().getNodeInstanceId(),
-////                        jobExecutionContext.getTaskData().getTaskID()), TaskState.COMPLETED
-////        ));
-////    }
-////
-////
-////    public AiravataAPI getAiravataAPI() {
-////        return airavataAPI;
-////    }
-////
-////    public AiravataRegistry2 getAiravataRegistry2() {
-////        return airavataRegistry2;
-////    }
-////
-////    public static List<ThreadedHandler> getDaemonHandlers() {
-////        return daemonHandlers;
-////    }
-////
-////    public static String getErrorSent() {
-////        return ERROR_SENT;
-////    }
-////
-////    public File getGfacConfigFile() {
-////        return gfacConfigFile;
-////    }
-////
-////    public static MonitorPublisher getMonitorPublisher() {
-////        return monitorPublisher;
-////    }
-////
-////    public Registry getRegistry() {
-////        return registry;
-////    }
-////}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
index ecf826d..aa98ef6 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AbstractHandler.java
@@ -24,7 +24,7 @@ import org.apache.airavata.common.utils.MonitorPublisher;
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.cpi.BetterGfacImpl;
 import org.apache.airavata.gfac.core.states.GfacHandlerState;
-import org.apache.airavata.gfac.core.utils.GFacUtils;
+import org.apache.airavata.gfac.core.GFacUtils;
 import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType;
 import org.apache.airavata.model.messaging.event.TaskIdentifier;
 import org.apache.airavata.model.messaging.event.TaskOutputChangeEvent;

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
index c6ada52..3685bb8 100644
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/handler/AppDescriptorCheckHandler.java
@@ -22,7 +22,7 @@ package org.apache.airavata.gfac.core.handler;
 
 import org.apache.airavata.gfac.core.context.JobExecutionContext;
 import org.apache.airavata.gfac.core.states.GfacHandlerState;
-import org.apache.airavata.gfac.core.utils.GFacUtils;
+import org.apache.airavata.gfac.core.GFacUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataJobStatusUpdator.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataJobStatusUpdator.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataJobStatusUpdator.java
deleted file mode 100644
index d5b917b..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataJobStatusUpdator.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.core.monitor;
-
-import com.google.common.eventbus.Subscribe;
-import org.apache.airavata.common.logger.AiravataLogger;
-import org.apache.airavata.common.logger.AiravataLoggerFactory;
-import org.apache.airavata.common.utils.AiravataUtils;
-import org.apache.airavata.common.utils.MonitorPublisher;
-import org.apache.airavata.common.utils.ServerSettings;
-import org.apache.airavata.common.utils.listener.AbstractActivityListener;
-import org.apache.airavata.messaging.core.MessageContext;
-import org.apache.airavata.messaging.core.Publisher;
-import org.apache.airavata.model.messaging.event.JobStatusChangeEvent;
-import org.apache.airavata.model.messaging.event.JobStatusChangeRequestEvent;
-import org.apache.airavata.model.messaging.event.MessageType;
-import org.apache.airavata.model.workspace.experiment.JobDetails;
-import org.apache.airavata.model.workspace.experiment.JobState;
-import org.apache.airavata.registry.cpi.CompositeIdentifier;
-import org.apache.airavata.registry.cpi.Registry;
-import org.apache.airavata.registry.cpi.RegistryModelType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Calendar;
-
-public class AiravataJobStatusUpdator implements AbstractActivityListener {
-    private final static Logger logger = LoggerFactory.getLogger(AiravataJobStatusUpdator.class);
-    private Registry airavataRegistry;
-
-    private MonitorPublisher monitorPublisher;
-    private Publisher publisher;
-
-
-    public Registry getAiravataRegistry() {
-        return airavataRegistry;
-    }
-
-    public void setAiravataRegistry(Registry airavataRegistry) {
-        this.airavataRegistry = airavataRegistry;
-    }
-
-
-    @Subscribe
-    public void updateRegistry(JobStatusChangeRequestEvent jobStatus) throws Exception{
-        /* Here we need to parse the jobStatus message and update
-                the registry accordingly, for now we are just printing to standard Out
-                 */
-        JobState state = jobStatus.getState();
-        if (state != null) {
-            try {
-                String taskID = jobStatus.getJobIdentity().getTaskId();
-                String jobID = jobStatus.getJobIdentity().getJobId();
-                String expId = jobStatus.getJobIdentity().getExperimentId();
-                updateJobStatus(expId,taskID, jobID, state);
-    			logger.debug("expId - {}: Publishing job status for " + jobStatus.getJobIdentity().getJobId() + ":"
-                        + state.toString(),jobStatus.getJobIdentity().getExperimentId());
-                JobStatusChangeEvent event = new JobStatusChangeEvent(jobStatus.getState(), jobStatus.getJobIdentity());
-                monitorPublisher.publish(event);
-                String messageId = AiravataUtils.getId("JOB");
-                MessageContext msgCntxt = new MessageContext(event, MessageType.JOB, messageId, jobStatus.getJobIdentity().getGatewayId());
-                msgCntxt.setUpdatedTime(AiravataUtils.getCurrentTimestamp());
-                publisher.publish(msgCntxt);
-            } catch (Exception e) {
-                logger.error("expId - " + jobStatus.getJobIdentity().getExperimentId() + ": Error persisting data"
-                        + e.getLocalizedMessage(), e);
-                throw new Exception("Error persisting job status..", e);
-            }
-        }
-    }
-
-    public  void updateJobStatus(String expId, String taskId, String jobID, JobState state) throws Exception {
-        logger.info("expId - {}: Updating job status for " + jobID + ":" + state.toString(), expId);
-        CompositeIdentifier ids = new CompositeIdentifier(taskId, jobID);
-        JobDetails details = (JobDetails) airavataRegistry.get(RegistryModelType.JOB_DETAIL, ids);
-        if (details == null) {
-            details = new JobDetails();
-        }
-        org.apache.airavata.model.workspace.experiment.JobStatus status = new org.apache.airavata.model.workspace.experiment.JobStatus();
-        if (JobState.CANCELED.equals(details.getJobStatus().getJobState()) ||
-                JobState.CANCELING.equals(details.getJobStatus().getJobState())) {
-            status.setJobState(details.getJobStatus().getJobState());
-        } else {
-            status.setJobState(state);
-        }
-        status.setTimeOfStateChange(Calendar.getInstance().getTimeInMillis());
-        details.setJobStatus(status);
-        details.setJobID(jobID);
-        logger.debug("expId - {}: Updated job status for " + jobID + ":" + details.getJobStatus().toString(), expId);
-        airavataRegistry.update(RegistryModelType.JOB_STATUS, status, ids);
-    }
-
-	@SuppressWarnings("unchecked")
-	public void setup(Object... configurations) {
-		for (Object configuration : configurations) {
-			if (configuration instanceof Registry){
-				this.airavataRegistry=(Registry)configuration;
-			} else if (configuration instanceof MonitorPublisher){
-				this.monitorPublisher=(MonitorPublisher) configuration;
-			} else if (configuration instanceof Publisher){
-                this.publisher=(Publisher) configuration;
-            }
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataTaskStatusUpdator.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataTaskStatusUpdator.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataTaskStatusUpdator.java
deleted file mode 100644
index 90392d6..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataTaskStatusUpdator.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.core.monitor;
-
-import com.google.common.eventbus.Subscribe;
-import org.apache.airavata.common.exception.AiravataException;
-import org.apache.airavata.common.utils.AiravataUtils;
-import org.apache.airavata.common.utils.MonitorPublisher;
-import org.apache.airavata.common.utils.ServerSettings;
-import org.apache.airavata.common.utils.listener.AbstractActivityListener;
-import org.apache.airavata.messaging.core.MessageContext;
-import org.apache.airavata.messaging.core.Publisher;
-import org.apache.airavata.model.messaging.event.*;
-import org.apache.airavata.model.workspace.experiment.TaskDetails;
-import org.apache.airavata.model.workspace.experiment.TaskState;
-import org.apache.airavata.registry.cpi.Registry;
-import org.apache.airavata.registry.cpi.RegistryModelType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Calendar;
-
-public class AiravataTaskStatusUpdator implements AbstractActivityListener {
-    private final static Logger logger = LoggerFactory.getLogger(AiravataTaskStatusUpdator.class);
-    private Registry airavataRegistry;
-    private MonitorPublisher monitorPublisher;
-    private Publisher publisher;
-    
-    public Registry getAiravataRegistry() {
-        return airavataRegistry;
-    }
-
-    public void setAiravataRegistry(Registry airavataRegistry) {
-        this.airavataRegistry = airavataRegistry;
-    }
-
-    @Subscribe
-    public void setupTaskStatus(TaskStatusChangeRequestEvent taskStatus) throws Exception{
-    	try {
-			updateTaskStatus(taskStatus.getTaskIdentity().getTaskId(), taskStatus.getState());
-            logger.debug("expId - {}: Publishing task status for " + taskStatus.getTaskIdentity().getTaskId() + ":"
-                    + taskStatus.getState().toString(), taskStatus.getTaskIdentity().getExperimentId());
-            TaskStatusChangeEvent event = new TaskStatusChangeEvent(taskStatus.getState(), taskStatus.getTaskIdentity());
-            monitorPublisher.publish(event);
-            String messageId = AiravataUtils.getId("TASK");
-            MessageContext msgCntxt = new MessageContext(event, MessageType.TASK, messageId, taskStatus.getTaskIdentity().getGatewayId());
-            msgCntxt.setUpdatedTime(AiravataUtils.getCurrentTimestamp());
-            publisher.publish(msgCntxt);
-		} catch (Exception e) {
-            String msg = "Error persisting data task status to database...";
-            logger.error(msg + e.getLocalizedMessage(), e);
-            throw new Exception(msg, e);
-		}
-    }
-
-    @Subscribe
-    public void setupTaskStatus(JobStatusChangeEvent jobStatus) throws Exception{
-    	TaskState state=TaskState.UNKNOWN;
-    	switch(jobStatus.getState()){
-    	case ACTIVE:
-    		state=TaskState.EXECUTING; break;
-    	case CANCELED:
-    		state=TaskState.CANCELED; break;
-    	case COMPLETE: case FAILED:
-    		state=TaskState.POST_PROCESSING; break;
-    	case HELD: case SUSPENDED: case QUEUED:
-    		state=TaskState.WAITING; break;
-    	case SETUP:
-    		state=TaskState.PRE_PROCESSING; break;
-    	case SUBMITTED:
-    		state=TaskState.STARTED; break;
-    	case UN_SUBMITTED:
-    		state=TaskState.CANCELED; break;
-    	case CANCELING:
-    		state=TaskState.CANCELING; break;
-		default:
-			return;
-    	}
-    	try {
-			updateTaskStatus(jobStatus.getJobIdentity().getTaskId(), state);
-            logger.debug("expId - {}: Publishing task status for " + jobStatus.getJobIdentity().getTaskId() + ":"
-                    + state.toString(), jobStatus.getJobIdentity().getExperimentId());
-            TaskIdentifier taskIdentity = new TaskIdentifier(jobStatus.getJobIdentity().getTaskId(),
-                                                         jobStatus.getJobIdentity().getWorkflowNodeId(),
-                                                         jobStatus.getJobIdentity().getExperimentId(),
-                                                         jobStatus.getJobIdentity().getGatewayId());
-            TaskStatusChangeEvent event = new TaskStatusChangeEvent(state, taskIdentity);
-            monitorPublisher.publish(event);
-            String messageId = AiravataUtils.getId("TASK");
-            MessageContext msgCntxt = new MessageContext(event, MessageType.TASK, messageId,jobStatus.getJobIdentity().getGatewayId());
-            msgCntxt.setUpdatedTime(AiravataUtils.getCurrentTimestamp());
-            publisher.publish(msgCntxt);
-
-        }  catch (Exception e) {
-            logger.error("expId - " + jobStatus.getJobIdentity().getExperimentId() + ": Error persisting data" + e.getLocalizedMessage(), e);
-            throw new Exception("Error persisting task status..", e);
-		}
-    }
-    
-    public  TaskState updateTaskStatus(String taskId, TaskState state) throws Exception {
-    	TaskDetails details = (TaskDetails)airavataRegistry.get(RegistryModelType.TASK_DETAIL, taskId);
-        if(details == null) {
-            logger.error("Task details cannot be null at this point");
-            throw new Exception("Task details cannot be null at this point");
-        }
-        org.apache.airavata.model.workspace.experiment.TaskStatus status = new org.apache.airavata.model.workspace.experiment.TaskStatus();
-        if(!TaskState.CANCELED.equals(details.getTaskStatus().getExecutionState())
-                && !TaskState.CANCELING.equals(details.getTaskStatus().getExecutionState())){
-            status.setExecutionState(state);
-        }else{
-            status.setExecutionState(details.getTaskStatus().getExecutionState());
-        }
-        status.setTimeOfStateChange(Calendar.getInstance().getTimeInMillis());
-        details.setTaskStatus(status);
-        logger.debug("Updating task status for "+taskId+":"+details.getTaskStatus().toString());
-
-        airavataRegistry.update(RegistryModelType.TASK_STATUS, status, taskId);
-        return status.getExecutionState();
-    }
-
-	public void setup(Object... configurations) {
-		for (Object configuration : configurations) {
-			if (configuration instanceof Registry){
-				this.airavataRegistry=(Registry)configuration;
-			} else if (configuration instanceof MonitorPublisher){
-				this.monitorPublisher=(MonitorPublisher) configuration;
-			} else if (configuration instanceof Publisher){
-                this.publisher=(Publisher) configuration;
-            }
-        }
-	}
-
-
-    @Subscribe
-    public void taskOutputChanged(TaskOutputChangeEvent taskOutputEvent) throws AiravataException {
-        String taskId = taskOutputEvent.getTaskIdentity().getTaskId();
-        logger.debug("Task Output changed event received for workflow node : " +
-                taskOutputEvent.getTaskIdentity().getWorkflowNodeId() + ", task : " + taskId);
-        // TODO - do we need to update the output to the registry? , we do it in the workflowInterpreter too.
-        MessageContext messageContext = new MessageContext(taskOutputEvent, MessageType.TASKOUTPUT, taskOutputEvent.getTaskIdentity().getTaskId(), taskOutputEvent.getTaskIdentity().getGatewayId());
-        messageContext.setUpdatedTime(AiravataUtils.getCurrentTimestamp());
-        publisher.publish(messageContext);
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataWorkflowNodeStatusUpdator.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataWorkflowNodeStatusUpdator.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataWorkflowNodeStatusUpdator.java
deleted file mode 100644
index c32742a..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/AiravataWorkflowNodeStatusUpdator.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-package org.apache.airavata.gfac.core.monitor;
-
-import com.google.common.eventbus.Subscribe;
-import org.apache.airavata.common.utils.AiravataUtils;
-import org.apache.airavata.common.utils.MonitorPublisher;
-import org.apache.airavata.common.utils.ServerSettings;
-import org.apache.airavata.common.utils.listener.AbstractActivityListener;
-import org.apache.airavata.messaging.core.MessageContext;
-import org.apache.airavata.messaging.core.Publisher;
-import org.apache.airavata.model.messaging.event.MessageType;
-import org.apache.airavata.model.messaging.event.TaskStatusChangeEvent;
-import org.apache.airavata.model.messaging.event.WorkflowIdentifier;
-import org.apache.airavata.model.messaging.event.WorkflowNodeStatusChangeEvent;
-import org.apache.airavata.model.workspace.experiment.WorkflowNodeDetails;
-import org.apache.airavata.model.workspace.experiment.WorkflowNodeState;
-import org.apache.airavata.model.workspace.experiment.WorkflowNodeStatus;
-import org.apache.airavata.registry.cpi.Registry;
-import org.apache.airavata.registry.cpi.RegistryModelType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Calendar;
-
-public class AiravataWorkflowNodeStatusUpdator implements AbstractActivityListener {
-    private final static Logger logger = LoggerFactory.getLogger(AiravataWorkflowNodeStatusUpdator.class);
-
-    private Registry airavataRegistry;
-    private MonitorPublisher monitorPublisher;
-    private Publisher publisher;
-
-
-
-
-    public Registry getAiravataRegistry() {
-        return airavataRegistry;
-    }
-
-    public void setAiravataRegistry(Registry airavataRegistry) {
-        this.airavataRegistry = airavataRegistry;
-    }
-
-    @Subscribe
-    public void setupWorkflowNodeStatus(TaskStatusChangeEvent taskStatus) throws Exception{
-    	WorkflowNodeState state=WorkflowNodeState.UNKNOWN;
-    	switch(taskStatus.getState()){
-    	case CANCELED:
-    		state=WorkflowNodeState.CANCELED; break;
-    	case COMPLETED:
-    		state=WorkflowNodeState.COMPLETED; break;
-    	case CONFIGURING_WORKSPACE:
-    		state=WorkflowNodeState.INVOKED; break;
-    	case FAILED:
-    		state=WorkflowNodeState.FAILED; break;
-    	case EXECUTING: case WAITING: case PRE_PROCESSING: case POST_PROCESSING: case OUTPUT_DATA_STAGING: case INPUT_DATA_STAGING:
-    		state=WorkflowNodeState.EXECUTING; break;
-    	case STARTED:
-    		state=WorkflowNodeState.INVOKED; break;
-    	case CANCELING:
-    		state=WorkflowNodeState.CANCELING; break;
-		default:
-			return;
-    	}
-    	try {
-            String expId = taskStatus.getTaskIdentity().getExperimentId();
-			updateWorkflowNodeStatus(expId, taskStatus.getTaskIdentity().getWorkflowNodeId(), state);
-            logger.debug("expId - {}: Publishing workflow node status for " + taskStatus.getTaskIdentity().getWorkflowNodeId()
-                    + ":" + state.toString(), taskStatus.getTaskIdentity().getExperimentId());
-            WorkflowIdentifier workflowIdentity = new WorkflowIdentifier(taskStatus.getTaskIdentity().getWorkflowNodeId(),
-                                                                         taskStatus.getTaskIdentity().getExperimentId(),
-                                                                         taskStatus.getTaskIdentity().getGatewayId());
-            WorkflowNodeStatusChangeEvent event = new WorkflowNodeStatusChangeEvent(state, workflowIdentity);
-            monitorPublisher.publish(event);
-            String messageId = AiravataUtils.getId("WFNODE");
-            MessageContext msgCntxt = new MessageContext(event, MessageType.WORKFLOWNODE, messageId, taskStatus.getTaskIdentity().getGatewayId());
-            msgCntxt.setUpdatedTime(AiravataUtils.getCurrentTimestamp());
-
-            publisher.publish(msgCntxt);
-		} catch (Exception e) {
-            logger.error("expId - " + taskStatus.getTaskIdentity().getExperimentId() + ": Error persisting data"
-                    + e.getLocalizedMessage(), e);
-            throw new Exception("Error persisting workflow node status..", e);
-        }
-    }
-
-    public  void updateWorkflowNodeStatus(String experimentId, String workflowNodeId, WorkflowNodeState state) throws Exception {
-		logger.info("expId - {}: Updating workflow node status for "+workflowNodeId+":"+state.toString(), experimentId);
-    	WorkflowNodeDetails details = (WorkflowNodeDetails)airavataRegistry.get(RegistryModelType.WORKFLOW_NODE_DETAIL, workflowNodeId);
-        if(details == null) {
-            details = new WorkflowNodeDetails();
-            details.setNodeInstanceId(workflowNodeId);
-        }
-        WorkflowNodeStatus status = new WorkflowNodeStatus();
-        status.setWorkflowNodeState(state);
-        status.setTimeOfStateChange(Calendar.getInstance().getTimeInMillis());
-        details.setWorkflowNodeStatus(status);
-        airavataRegistry.update(RegistryModelType.WORKFLOW_NODE_STATUS, status, workflowNodeId);
-    }
-
-	public void setup(Object... configurations) {
-		for (Object configuration : configurations) {
-			if (configuration instanceof Registry){
-				this.airavataRegistry=(Registry)configuration;
-			} else if (configuration instanceof MonitorPublisher){
-				this.monitorPublisher=(MonitorPublisher) configuration;
-			}  else if (configuration instanceof Publisher){
-                this.publisher=(Publisher) configuration;
-            }
-        }
-	}
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/EmailParser.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/EmailParser.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/EmailParser.java
new file mode 100644
index 0000000..0961fa4
--- /dev/null
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/EmailParser.java
@@ -0,0 +1,35 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.gfac.core.monitor;
+
+import org.apache.airavata.common.exception.AiravataException;
+
+import javax.mail.Message;
+import javax.mail.MessagingException;
+
+public interface EmailParser {
+    static final String STATUS = "status";
+    static final String JOBID = "jobId";
+    static final String JOBNAME = "jobName";
+    static final String EXIT_STATUS = "exitStatus";
+
+    JobStatusResult parseEmail(Message message) throws MessagingException, AiravataException;
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/ExperimentIdentity.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/ExperimentIdentity.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/ExperimentIdentity.java
deleted file mode 100644
index dd1d9d8..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/ExperimentIdentity.java
+++ /dev/null
@@ -1,36 +0,0 @@
-///*
-//*
-//* Licensed to the Apache Software Foundation (ASF) under one
-//* or more contributor license agreements.  See the NOTICE file
-//* distributed with this work for additional information
-//* regarding copyright ownership.  The ASF licenses this file
-//* to you under the Apache License, Version 2.0 (the
-//* "License"); you may not use this file except in compliance
-//* with the License.  You may obtain a copy of the License at
-//*
-//*   http://www.apache.org/licenses/LICENSE-2.0
-//*
-//* Unless required by applicable law or agreed to in writing,
-//* software distributed under the License is distributed on an
-//* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-//* KIND, either express or implied.  See the License for the
-//* specific language governing permissions and limitations
-//* under the License.
-//*
-//*/
-//
-//package org.apache.airavata.gfac.core.monitor;
-//
-//public class ExperimentIdentity {
-//	private String experimentID;
-//	public ExperimentIdentity(String experimentId) {
-//		setExperimentID(experimentId);
-//	}
-//	public String getExperimentID() {
-//		return experimentID;
-//	}
-//
-//	public void setExperimentID(String experimentID) {
-//		this.experimentID = experimentID;
-//	}
-//}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobIdentity.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobIdentity.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobIdentity.java
deleted file mode 100644
index 881dacd..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobIdentity.java
+++ /dev/null
@@ -1,39 +0,0 @@
-///*
-//*
-//* Licensed to the Apache Software Foundation (ASF) under one
-//* or more contributor license agreements.  See the NOTICE file
-//* distributed with this work for additional information
-//* regarding copyright ownership.  The ASF licenses this file
-//* to you under the Apache License, Version 2.0 (the
-//* "License"); you may not use this file except in compliance
-//* with the License.  You may obtain a copy of the License at
-//*
-//*   http://www.apache.org/licenses/LICENSE-2.0
-//*
-//* Unless required by applicable law or agreed to in writing,
-//* software distributed under the License is distributed on an
-//* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-//* KIND, either express or implied.  See the License for the
-//* specific language governing permissions and limitations
-//* under the License.
-//*
-//*/
-//
-//package org.apache.airavata.gfac.core.monitor;
-//
-//public class JobIdentity extends TaskIdentity {
-//	private String jobId;
-//
-//	public JobIdentity(String experimentId, String workflowNodeId, String taskId, String jobId) {
-//		super(experimentId,workflowNodeId,taskId);
-//		setJobId(jobId);
-//	}
-//
-//	public String getJobId() {
-//		return jobId;
-//	}
-//
-//	public void setJobId(String jobId) {
-//		this.jobId = jobId;
-//	}
-//}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobStatusResult.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobStatusResult.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobStatusResult.java
new file mode 100644
index 0000000..c1ea026
--- /dev/null
+++ b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/JobStatusResult.java
@@ -0,0 +1,55 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.gfac.core.monitor;
+
+import org.apache.airavata.model.workspace.experiment.JobState;
+
+public class JobStatusResult {
+    private JobState state;
+    private String jobId;
+
+    public String getJobName() {
+        return jobName;
+    }
+
+    public void setJobName(String jobName) {
+        this.jobName = jobName;
+    }
+
+    private String jobName;
+
+    public JobState getState() {
+        return state;
+    }
+
+    public void setState(JobState state) {
+        this.state = state;
+    }
+
+    public String getJobId() {
+        return jobId;
+    }
+
+    public void setJobId(String jobId) {
+        this.jobId = jobId;
+    }
+}
+

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/TaskIdentity.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/TaskIdentity.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/TaskIdentity.java
deleted file mode 100644
index 369b7a0..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/TaskIdentity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-///*
-//*
-//* Licensed to the Apache Software Foundation (ASF) under one
-//* or more contributor license agreements.  See the NOTICE file
-//* distributed with this work for additional information
-//* regarding copyright ownership.  The ASF licenses this file
-//* to you under the Apache License, Version 2.0 (the
-//* "License"); you may not use this file except in compliance
-//* with the License.  You may obtain a copy of the License at
-//*
-//*   http://www.apache.org/licenses/LICENSE-2.0
-//*
-//* Unless required by applicable law or agreed to in writing,
-//* software distributed under the License is distributed on an
-//* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-//* KIND, either express or implied.  See the License for the
-//* specific language governing permissions and limitations
-//* under the License.
-//*
-//*/
-//
-//package org.apache.airavata.gfac.core.monitor;
-//
-//public class TaskIdentity extends WorkflowNodeIdentity {
-//	private String taskId;
-//
-//	public TaskIdentity(String experimentId, String workflowNodeId, String taskId) {
-//		super(experimentId,workflowNodeId);
-//		setTaskId(taskId);
-//	}
-//	public String getTaskId() {
-//		return taskId;
-//	}
-//
-//	public void setTaskId(String taskId) {
-//		this.taskId = taskId;
-//	}
-//}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/WorkflowNodeIdentity.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/WorkflowNodeIdentity.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/WorkflowNodeIdentity.java
deleted file mode 100644
index ba6f828..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/WorkflowNodeIdentity.java
+++ /dev/null
@@ -1,37 +0,0 @@
-///*
-//*
-//* Licensed to the Apache Software Foundation (ASF) under one
-//* or more contributor license agreements.  See the NOTICE file
-//* distributed with this work for additional information
-//* regarding copyright ownership.  The ASF licenses this file
-//* to you under the Apache License, Version 2.0 (the
-//* "License"); you may not use this file except in compliance
-//* with the License.  You may obtain a copy of the License at
-//*
-//*   http://www.apache.org/licenses/LICENSE-2.0
-//*
-//* Unless required by applicable law or agreed to in writing,
-//* software distributed under the License is distributed on an
-//* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-//* KIND, either express or implied.  See the License for the
-//* specific language governing permissions and limitations
-//* under the License.
-//*
-//*/
-//
-//package org.apache.airavata.gfac.core.monitor;
-//
-//public class WorkflowNodeIdentity extends ExperimentIdentity {
-//	private String workflowNodeID;
-//	public WorkflowNodeIdentity(String experimentId, String workflowNodeId) {
-//		super(experimentId);
-//		setWorkflowNodeID(workflowNodeId);
-//	}
-//	public String getWorkflowNodeID() {
-//		return workflowNodeID;
-//	}
-//
-//	public void setWorkflowNodeID(String workflowNodeID) {
-//		this.workflowNodeID = workflowNodeID;
-//	}
-//}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangeRequest.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangeRequest.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangeRequest.java
deleted file mode 100644
index 2530ff8..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangeRequest.java
+++ /dev/null
@@ -1,81 +0,0 @@
-///*
-// *
-// * Licensed to the Apache Software Foundation (ASF) under one
-// * or more contributor license agreements.  See the NOTICE file
-// * distributed with this work for additional information
-// * regarding copyright ownership.  The ASF licenses this file
-// * to you under the Apache License, Version 2.0 (the
-// * "License"); you may not use this file except in compliance
-// * with the License.  You may obtain a copy of the License at
-// *
-// *   http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing,
-// * software distributed under the License is distributed on an
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// * KIND, either express or implied.  See the License for the
-// * specific language governing permissions and limitations
-// * under the License.
-// *
-//*/
-//package org.apache.airavata.gfac.core.monitor.state;
-//
-//import org.apache.airavata.common.utils.listener.AbstractStateChangeRequest;
-//import org.apache.airavata.gfac.core.monitor.JobIdentity;
-//import org.apache.airavata.gfac.core.monitor.MonitorID;
-//import org.apache.airavata.model.workspace.experiment.JobState;
-//
-///**
-// * This is the primary job state object used in
-// * through out the monitor module. This use airavata-data-model JobState enum
-// * Ideally after processing each event or monitoring message from remote system
-// * Each monitoring implementation has to return this object with a state and
-// * the monitoring ID
-// */
-//public class JobStatusChangeRequest  extends AbstractStateChangeRequest {
-//    private JobState state;
-//    private JobIdentity identity;
-//
-//    private MonitorID monitorID;
-//
-//    // this constructor can be used in Qstat monitor to handle errors
-//    public JobStatusChangeRequest() {
-//    }
-//
-//    public JobStatusChangeRequest(MonitorID monitorID) {
-//        setIdentity(new JobIdentity(monitorID.getExperimentID(),monitorID.getWorkflowNodeID(),
-//                monitorID.getTaskID(),monitorID.getJobID()));
-//    	setMonitorID(monitorID);
-//    	this.state = monitorID.getStatus();
-//    }
-//    public JobStatusChangeRequest(MonitorID monitorID, JobIdentity jobId, JobState state) {
-//    	setIdentity(jobId);
-//    	setMonitorID(monitorID);
-//    	this.state = state;
-//    }
-//
-//    public JobState getState() {
-//        return state;
-//    }
-//
-//    public void setState(JobState state) {
-//       this.state = state;
-//    }
-//
-//	public JobIdentity getIdentity() {
-//		return identity;
-//	}
-//
-//	public void setIdentity(JobIdentity identity) {
-//		this.identity = identity;
-//	}
-//
-//	public MonitorID getMonitorID() {
-//		return monitorID;
-//	}
-//
-//	public void setMonitorID(MonitorID monitorID) {
-//		this.monitorID = monitorID;
-//	}
-//
-//}

http://git-wip-us.apache.org/repos/asf/airavata/blob/7b809747/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangedEvent.java
----------------------------------------------------------------------
diff --git a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangedEvent.java b/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangedEvent.java
deleted file mode 100644
index b5ccf1c..0000000
--- a/modules/gfac/gfac-core/src/main/java/org/apache/airavata/gfac/core/monitor/state/JobStatusChangedEvent.java
+++ /dev/null
@@ -1,81 +0,0 @@
-///*
-// *
-// * Licensed to the Apache Software Foundation (ASF) under one
-// * or more contributor license agreements.  See the NOTICE file
-// * distributed with this work for additional information
-// * regarding copyright ownership.  The ASF licenses this file
-// * to you under the Apache License, Version 2.0 (the
-// * "License"); you may not use this file except in compliance
-// * with the License.  You may obtain a copy of the License at
-// *
-// *   http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing,
-// * software distributed under the License is distributed on an
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// * KIND, either express or implied.  See the License for the
-// * specific language governing permissions and limitations
-// * under the License.
-// *
-//*/
-//package org.apache.airavata.gfac.core.monitor.state;
-//
-//import org.apache.airavata.common.utils.listener.AbstractStateChangeRequest;
-//import org.apache.airavata.gfac.core.monitor.JobIdentity;
-//import org.apache.airavata.gfac.core.monitor.MonitorID;
-//import org.apache.airavata.model.workspace.experiment.JobState;
-//
-///**
-// * This is the primary job state object used in
-// * through out the monitor module. This use airavata-data-model JobState enum
-// * Ideally after processing each event or monitoring message from remote system
-// * Each monitoring implementation has to return this object with a state and
-// * the monitoring ID
-// */
-//public class JobStatusChangedEvent  extends AbstractStateChangeRequest {
-//    private JobState state;
-//    private JobIdentity identity;
-//
-//    private MonitorID monitorID;
-//
-//    // this constructor can be used in Qstat monitor to handle errors
-//    public JobStatusChangedEvent() {
-//    }
-//
-//    public JobStatusChangedEvent(MonitorID monitorID) {
-//        setIdentity(new JobIdentity(monitorID.getExperimentID(),monitorID.getWorkflowNodeID(),
-//                monitorID.getTaskID(),monitorID.getJobID()));
-//    	setMonitorID(monitorID);
-//    	this.state = monitorID.getStatus();
-//    }
-//    public JobStatusChangedEvent(MonitorID monitorID, JobIdentity jobId, JobState state) {
-//    	setIdentity(jobId);
-//    	setMonitorID(monitorID);
-//    	this.state = state;
-//    }
-//
-//    public JobState getState() {
-//        return state;
-//    }
-//
-//    public void setState(JobState state) {
-//       this.state = state;
-//    }
-//
-//	public JobIdentity getIdentity() {
-//		return identity;
-//	}
-//
-//	public void setIdentity(JobIdentity identity) {
-//		this.identity = identity;
-//	}
-//
-//	public MonitorID getMonitorID() {
-//		return monitorID;
-//	}
-//
-//	public void setMonitorID(MonitorID monitorID) {
-//		this.monitorID = monitorID;
-//	}
-//
-//}