You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sc...@apache.org on 2015/06/18 22:51:21 UTC

[14/17] airavata git commit: Changing the registry model and resource packages to comply with the new data models

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java
new file mode 100644
index 0000000..1b379e0
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Process.java
@@ -0,0 +1,217 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+import java.util.Collection;
+
+@Entity
+@Table(name = "PROCESS")
+public class Process {
+    private final static Logger logger = LoggerFactory.getLogger(Process.class);
+    private String processId;
+    private String experimentId;
+    private Timestamp creationTime;
+    private Timestamp lastUpdateTime;
+    private String processDetail;
+    private String applicationInterfaceId;
+    private String taskDag;
+    private Experiment experiment;
+    private ProcessError processError;
+    private Collection<ProcessInput> processInputs;
+    private Collection<ProcessOutput> processOutputs;
+    private ProcessResourceSchedule processResourceSchedule;
+    private ProcessStatus processStatus;
+    private Collection<Task> tasks;
+
+    @Id
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Basic
+    @Column(name = "EXPERIMENT_ID")
+    public String getExperimentId() {
+        return experimentId;
+    }
+
+    public void setExperimentId(String experimentId) {
+        this.experimentId = experimentId;
+    }
+
+    @Basic
+    @Column(name = "CREATION_TIME")
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Basic
+    @Column(name = "LAST_UPDATE_TIME")
+    public Timestamp getLastUpdateTime() {
+        return lastUpdateTime;
+    }
+
+    public void setLastUpdateTime(Timestamp lastUpdateTime) {
+        this.lastUpdateTime = lastUpdateTime;
+    }
+
+    @Basic
+    @Column(name = "PROCESS_DETAIL")
+    public String getProcessDetail() {
+        return processDetail;
+    }
+
+    public void setProcessDetail(String processDetail) {
+        this.processDetail = processDetail;
+    }
+
+    @Basic
+    @Column(name = "APPLICATION_INTERFACE_ID")
+    public String getApplicationInterfaceId() {
+        return applicationInterfaceId;
+    }
+
+    public void setApplicationInterfaceId(String applicationInterfaceId) {
+        this.applicationInterfaceId = applicationInterfaceId;
+    }
+
+    @Basic
+    @Column(name = "TASK_DAG")
+    public String getTaskDag() {
+        return taskDag;
+    }
+
+    public void setTaskDag(String taskDag) {
+        this.taskDag = taskDag;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Process process = (Process) o;
+
+        if (applicationInterfaceId != null ? !applicationInterfaceId.equals(process.applicationInterfaceId) : process.applicationInterfaceId != null)
+            return false;
+        if (creationTime != null ? !creationTime.equals(process.creationTime) : process.creationTime != null)
+            return false;
+        if (experimentId != null ? !experimentId.equals(process.experimentId) : process.experimentId != null)
+            return false;
+        if (lastUpdateTime != null ? !lastUpdateTime.equals(process.lastUpdateTime) : process.lastUpdateTime != null)
+            return false;
+        if (processDetail != null ? !processDetail.equals(process.processDetail) : process.processDetail != null)
+            return false;
+        if (processId != null ? !processId.equals(process.processId) : process.processId != null) return false;
+        if (taskDag != null ? !taskDag.equals(process.taskDag) : process.taskDag != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = processId != null ? processId.hashCode() : 0;
+        result = 31 * result + (experimentId != null ? experimentId.hashCode() : 0);
+        result = 31 * result + (creationTime != null ? creationTime.hashCode() : 0);
+        result = 31 * result + (lastUpdateTime != null ? lastUpdateTime.hashCode() : 0);
+        result = 31 * result + (processDetail != null ? processDetail.hashCode() : 0);
+        result = 31 * result + (applicationInterfaceId != null ? applicationInterfaceId.hashCode() : 0);
+        result = 31 * result + (taskDag != null ? taskDag.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "EXPERIMENT_ID", referencedColumnName = "EXPERIMENT_ID")
+    public Experiment getExperiment() {
+        return experiment;
+    }
+
+    public void setExperiment(Experiment experimentByExperimentId) {
+        this.experiment = experimentByExperimentId;
+    }
+
+    @OneToOne(mappedBy = "process")
+    public ProcessError getProcessError() {
+        return processError;
+    }
+
+    public void setProcessError(ProcessError processErrorsByProcessId) {
+        this.processError = processErrorsByProcessId;
+    }
+
+    @OneToMany(mappedBy = "process")
+    public Collection<ProcessInput> getProcessInputs() {
+        return processInputs;
+    }
+
+    public void setProcessInputs(Collection<ProcessInput> processInputsByProcessId) {
+        this.processInputs = processInputsByProcessId;
+    }
+
+    @OneToMany(mappedBy = "process")
+    public Collection<ProcessOutput> getProcessOutputs() {
+        return processOutputs;
+    }
+
+    public void setProcessOutputs(Collection<ProcessOutput> processOutputsByProcessId) {
+        this.processOutputs = processOutputsByProcessId;
+    }
+
+    @OneToOne(mappedBy = "process")
+    public ProcessResourceSchedule getProcessResourceSchedule() {
+        return processResourceSchedule;
+    }
+
+    public void setProcessResourceSchedule(ProcessResourceSchedule processResourceSchedulesByProcessId) {
+        this.processResourceSchedule = processResourceSchedulesByProcessId;
+    }
+
+    @OneToOne(mappedBy = "process")
+    public ProcessStatus getProcessStatus() {
+        return processStatus;
+    }
+
+    public void setProcessStatus(ProcessStatus processStatusesByProcessId) {
+        this.processStatus = processStatusesByProcessId;
+    }
+
+    @OneToMany(mappedBy = "process")
+    public Collection<Task> getTasks() {
+        return tasks;
+    }
+
+    public void setTasks(Collection<Task> taskByProcessId) {
+        this.tasks = taskByProcessId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessError.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessError.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessError.java
new file mode 100644
index 0000000..cd64ad7
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessError.java
@@ -0,0 +1,143 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.lang.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "PROCESS_ERROR")
+public class ProcessError {
+    private final static Logger logger = LoggerFactory.getLogger(ProcessError.class);
+    private String processId;
+    private Timestamp creationTime;
+    private String actualErrorMessage;
+    private String userFriendlyMessage;
+    private Boolean transientOrPersistent;
+    private String rootCauseErrorIdList;
+    private Process process;
+
+    @Id
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Basic
+    @Column(name = "CREATION_TIME")
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Basic
+    @Column(name = "ACTUAL_ERROR_MESSAGE")
+    public String getActualErrorMessage() {
+        return actualErrorMessage;
+    }
+
+    public void setActualErrorMessage(String actualErrorMessage) {
+        this.actualErrorMessage = actualErrorMessage;
+    }
+
+    @Basic
+    @Column(name = "USER_FRIENDLY_MESSAGE")
+    public String getUserFriendlyMessage() {
+        return userFriendlyMessage;
+    }
+
+    public void setUserFriendlyMessage(String userFriendlyMessage) {
+        this.userFriendlyMessage = userFriendlyMessage;
+    }
+
+    @Basic
+    @Column(name = "TRANSIENT_OR_PERSISTENT")
+    public Boolean getTransientOrPersistent() {
+        return transientOrPersistent;
+    }
+
+    public void setTransientOrPersistent(Boolean transientOrPersistent) {
+        this.transientOrPersistent = transientOrPersistent;
+    }
+
+    @Basic
+    @Column(name = "ROOT_CAUSE_ERROR_ID_LIST")
+    public String getRootCauseErrorIdList() {
+        return rootCauseErrorIdList;
+    }
+
+    public void setRootCauseErrorIdList(String rootCauseErrorIdList) {
+        this.rootCauseErrorIdList = rootCauseErrorIdList;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProcessError that = (ProcessError) o;
+
+        if (actualErrorMessage != null ? !actualErrorMessage.equals(that.actualErrorMessage) : that.actualErrorMessage != null)
+            return false;
+        if (creationTime != null ? !creationTime.equals(that.creationTime) : that.creationTime != null) return false;
+        if (processId != null ? !processId.equals(that.processId) : that.processId != null) return false;
+        if (rootCauseErrorIdList != null ? !rootCauseErrorIdList.equals(that.rootCauseErrorIdList) : that.rootCauseErrorIdList != null)
+            return false;
+        if (transientOrPersistent != null ? !transientOrPersistent.equals(that.transientOrPersistent) : that.transientOrPersistent != null)
+            return false;
+        if (userFriendlyMessage != null ? !userFriendlyMessage.equals(that.userFriendlyMessage) : that.userFriendlyMessage != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = processId != null ? processId.hashCode() : 0;
+        result = 31 * result + (creationTime != null ? creationTime.hashCode() : 0);
+        result = 31 * result + (actualErrorMessage != null ? actualErrorMessage.hashCode() : 0);
+        result = 31 * result + (userFriendlyMessage != null ? userFriendlyMessage.hashCode() : 0);
+        result = 31 * result + (transientOrPersistent != null ? transientOrPersistent.hashCode() : 0);
+        result = 31 * result + (rootCauseErrorIdList != null ? rootCauseErrorIdList.hashCode() : 0);
+        return result;
+    }
+
+    @OneToOne
+    @JoinColumn(name = "PROCESS_ID", referencedColumnName = "PROCESS_ID", nullable = false)
+    public Process getProcess() {
+        return process;
+    }
+
+    public void setProcess(Process processByProcessId) {
+        this.process = processByProcessId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessInput.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessInput.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessInput.java
new file mode 100644
index 0000000..0ef2cba
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessInput.java
@@ -0,0 +1,238 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.lang.*;
+
+@Entity
+@Table(name = "PROCESS_INPUT")
+public class ProcessInput {
+    private final static Logger logger = LoggerFactory.getLogger(ProcessInput.class);
+    private int processInputId;
+    private String processId;
+    private String inputName;
+    private String inputValue;
+    private String dataType;
+    private String applicationArgument;
+    private Boolean standardInput;
+    private String userFriendlyDescription;
+    private String metadata;
+    private Integer inputOrder;
+    private Boolean isRequired;
+    private Boolean requiredToAddedToCmd;
+    private Boolean dataStaged;
+    private Process process;
+
+    public void setProcessInputId(Integer processInputId) {
+        this.processInputId = processInputId;
+    }
+
+    @Id
+    @GeneratedValue
+    @Column(name = "PROCESS_INPUT_ID")
+    public int getProcessInputId() {
+        return processInputId;
+    }
+
+    public void setProcessInputId(int processInputId) {
+        this.processInputId = processInputId;
+    }
+
+    @Basic
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Basic
+    @Column(name = "INPUT_NAME")
+    public String getInputName() {
+        return inputName;
+    }
+
+    public void setInputName(String inputName) {
+        this.inputName = inputName;
+    }
+
+    @Basic
+    @Column(name = "INPUT_VALUE")
+    public String getInputValue() {
+        return inputValue;
+    }
+
+    public void setInputValue(String inputValue) {
+        this.inputValue = inputValue;
+    }
+
+    @Basic
+    @Column(name = "DATA_TYPE")
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    @Basic
+    @Column(name = "APPLICATION_ARGUMENT")
+    public String getApplicationArgument() {
+        return applicationArgument;
+    }
+
+    public void setApplicationArgument(String applicationArgument) {
+        this.applicationArgument = applicationArgument;
+    }
+
+    @Basic
+    @Column(name = "STANDARD_INPUT")
+    public Boolean getStandardInput() {
+        return standardInput;
+    }
+
+    public void setStandardInput(Boolean standardInput) {
+        this.standardInput = standardInput;
+    }
+
+    @Basic
+    @Column(name = "USER_FRIENDLY_DESCRIPTION")
+    public String getUserFriendlyDescription() {
+        return userFriendlyDescription;
+    }
+
+    public void setUserFriendlyDescription(String userFriendlyDescription) {
+        this.userFriendlyDescription = userFriendlyDescription;
+    }
+
+    @Basic
+    @Column(name = "METADATA")
+    public String getMetadata() {
+        return metadata;
+    }
+
+    public void setMetadata(String metadata) {
+        this.metadata = metadata;
+    }
+
+    @Basic
+    @Column(name = "INPUT_ORDER")
+    public Integer getInputOrder() {
+        return inputOrder;
+    }
+
+    public void setInputOrder(Integer inputOrder) {
+        this.inputOrder = inputOrder;
+    }
+
+    @Basic
+    @Column(name = "IS_REQUIRED")
+    public Boolean getIsRequired() {
+        return isRequired;
+    }
+
+    public void setIsRequired(Boolean isRequired) {
+        this.isRequired = isRequired;
+    }
+
+    @Basic
+    @Column(name = "REQUIRED_TO_ADDED_TO_CMD")
+    public Boolean getRequiredToAddedToCmd() {
+        return requiredToAddedToCmd;
+    }
+
+    public void setRequiredToAddedToCmd(Boolean requiredToAddedToCmd) {
+        this.requiredToAddedToCmd = requiredToAddedToCmd;
+    }
+
+    @Basic
+    @Column(name = "DATA_STAGED")
+    public Boolean getDataStaged() {
+        return dataStaged;
+    }
+
+    public void setDataStaged(Boolean dataStaged) {
+        this.dataStaged = dataStaged;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProcessInput that = (ProcessInput) o;
+
+        if (processInputId != that.processInputId) return false;
+        if (applicationArgument != null ? !applicationArgument.equals(that.applicationArgument) : that.applicationArgument != null)
+            return false;
+        if (dataStaged != null ? !dataStaged.equals(that.dataStaged) : that.dataStaged != null) return false;
+        if (dataType != null ? !dataType.equals(that.dataType) : that.dataType != null) return false;
+        if (inputName != null ? !inputName.equals(that.inputName) : that.inputName != null) return false;
+        if (inputOrder != null ? !inputOrder.equals(that.inputOrder) : that.inputOrder != null) return false;
+        if (inputValue != null ? !inputValue.equals(that.inputValue) : that.inputValue != null) return false;
+        if (isRequired != null ? !isRequired.equals(that.isRequired) : that.isRequired != null) return false;
+        if (metadata != null ? !metadata.equals(that.metadata) : that.metadata != null) return false;
+        if (processId != null ? !processId.equals(that.processId) : that.processId != null) return false;
+        if (requiredToAddedToCmd != null ? !requiredToAddedToCmd.equals(that.requiredToAddedToCmd) : that.requiredToAddedToCmd != null)
+            return false;
+        if (standardInput != null ? !standardInput.equals(that.standardInput) : that.standardInput != null)
+            return false;
+        if (userFriendlyDescription != null ? !userFriendlyDescription.equals(that.userFriendlyDescription) : that.userFriendlyDescription != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = processInputId;
+        result = 31 * result + (processId != null ? processId.hashCode() : 0);
+        result = 31 * result + (inputName != null ? inputName.hashCode() : 0);
+        result = 31 * result + (inputValue != null ? inputValue.hashCode() : 0);
+        result = 31 * result + (dataType != null ? dataType.hashCode() : 0);
+        result = 31 * result + (applicationArgument != null ? applicationArgument.hashCode() : 0);
+        result = 31 * result + (standardInput != null ? standardInput.hashCode() : 0);
+        result = 31 * result + (userFriendlyDescription != null ? userFriendlyDescription.hashCode() : 0);
+        result = 31 * result + (metadata != null ? metadata.hashCode() : 0);
+        result = 31 * result + (inputOrder != null ? inputOrder.hashCode() : 0);
+        result = 31 * result + (isRequired != null ? isRequired.hashCode() : 0);
+        result = 31 * result + (requiredToAddedToCmd != null ? requiredToAddedToCmd.hashCode() : 0);
+        result = 31 * result + (dataStaged != null ? dataStaged.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PROCESS_ID", referencedColumnName = "PROCESS_ID")
+    public Process getProcess() {
+        return process;
+    }
+
+    public void setProcess(Process processByProcessId) {
+        this.process = processByProcessId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessOutput.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessOutput.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessOutput.java
new file mode 100644
index 0000000..0290539
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessOutput.java
@@ -0,0 +1,184 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.lang.*;
+
+@Entity
+@Table(name = "PROCESS_OUTPUT")
+public class ProcessOutput {
+    private final static Logger logger = LoggerFactory.getLogger(ProcessOutput.class);
+    private int processOutputId;
+    private String processId;
+    private String dataType;
+    private String applicationArgument;
+    private Boolean isRequired;
+    private Boolean requiredToAddedToCmd;
+    private Boolean dataMovement;
+    private String location;
+    private String searchQuery;
+    private Process process;
+
+    public void setProcessOutputId(Integer processOutputId) {
+        this.processOutputId = processOutputId;
+    }
+
+    @Id
+    @GeneratedValue
+    @Column(name = "PROCESS_OUTPUT_ID")
+    public int getProcessOutputId() {
+        return processOutputId;
+    }
+
+    public void setProcessOutputId(int processOutputId) {
+        this.processOutputId = processOutputId;
+    }
+
+    @Basic
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Basic
+    @Column(name = "DATA_TYPE")
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    @Basic
+    @Column(name = "APPLICATION_ARGUMENT")
+    public String getApplicationArgument() {
+        return applicationArgument;
+    }
+
+    public void setApplicationArgument(String applicationArgument) {
+        this.applicationArgument = applicationArgument;
+    }
+
+    @Basic
+    @Column(name = "IS_REQUIRED")
+    public Boolean getIsRequired() {
+        return isRequired;
+    }
+
+    public void setIsRequired(Boolean isRequired) {
+        this.isRequired = isRequired;
+    }
+
+    @Basic
+    @Column(name = "REQUIRED_TO_ADDED_TO_CMD")
+    public Boolean getRequiredToAddedToCmd() {
+        return requiredToAddedToCmd;
+    }
+
+    public void setRequiredToAddedToCmd(Boolean requiredToAddedToCmd) {
+        this.requiredToAddedToCmd = requiredToAddedToCmd;
+    }
+
+    @Basic
+    @Column(name = "DATA_MOVEMENT")
+    public Boolean getDataMovement() {
+        return dataMovement;
+    }
+
+    public void setDataMovement(Boolean dataMovement) {
+        this.dataMovement = dataMovement;
+    }
+
+    @Basic
+    @Column(name = "LOCATION")
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    @Basic
+    @Column(name = "SEARCH_QUERY")
+    public String getSearchQuery() {
+        return searchQuery;
+    }
+
+    public void setSearchQuery(String searchQuery) {
+        this.searchQuery = searchQuery;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProcessOutput that = (ProcessOutput) o;
+
+        if (processOutputId != that.processOutputId) return false;
+        if (applicationArgument != null ? !applicationArgument.equals(that.applicationArgument) : that.applicationArgument != null)
+            return false;
+        if (dataMovement != null ? !dataMovement.equals(that.dataMovement) : that.dataMovement != null) return false;
+        if (dataType != null ? !dataType.equals(that.dataType) : that.dataType != null) return false;
+        if (isRequired != null ? !isRequired.equals(that.isRequired) : that.isRequired != null) return false;
+        if (location != null ? !location.equals(that.location) : that.location != null) return false;
+        if (processId != null ? !processId.equals(that.processId) : that.processId != null) return false;
+        if (requiredToAddedToCmd != null ? !requiredToAddedToCmd.equals(that.requiredToAddedToCmd) : that.requiredToAddedToCmd != null)
+            return false;
+        if (searchQuery != null ? !searchQuery.equals(that.searchQuery) : that.searchQuery != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = processOutputId;
+        result = 31 * result + (processId != null ? processId.hashCode() : 0);
+        result = 31 * result + (dataType != null ? dataType.hashCode() : 0);
+        result = 31 * result + (applicationArgument != null ? applicationArgument.hashCode() : 0);
+        result = 31 * result + (isRequired != null ? isRequired.hashCode() : 0);
+        result = 31 * result + (requiredToAddedToCmd != null ? requiredToAddedToCmd.hashCode() : 0);
+        result = 31 * result + (dataMovement != null ? dataMovement.hashCode() : 0);
+        result = 31 * result + (location != null ? location.hashCode() : 0);
+        result = 31 * result + (searchQuery != null ? searchQuery.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PROCESS_ID", referencedColumnName = "PROCESS_ID")
+    public Process getProcess() {
+        return process;
+    }
+
+    public void setProcess(Process processByProcessId) {
+        this.process = processByProcessId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessResourceSchedule.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessResourceSchedule.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessResourceSchedule.java
new file mode 100644
index 0000000..9c49ffb
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessResourceSchedule.java
@@ -0,0 +1,169 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.lang.*;
+
+@Entity
+@Table(name = "PROCESS_RESOURCE_SCHEDULE")
+public class ProcessResourceSchedule {
+    private final static Logger logger = LoggerFactory.getLogger(ProcessResourceSchedule.class);
+    private String processId;
+    private String resourceHostId;
+    private Integer totalCpuCount;
+    private Integer nodeCount;
+    private Integer numberOfThreads;
+    private String queueName;
+    private Integer wallTimeLimit;
+    private Integer totalPhysicalMemory;
+    private Process process;
+
+    @Id
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Basic
+    @Column(name = "RESOURCE_HOST_ID")
+    public String getResourceHostId() {
+        return resourceHostId;
+    }
+
+    public void setResourceHostId(String resourceHostId) {
+        this.resourceHostId = resourceHostId;
+    }
+
+    @Basic
+    @Column(name = "TOTAL_CPU_COUNT")
+    public Integer getTotalCpuCount() {
+        return totalCpuCount;
+    }
+
+    public void setTotalCpuCount(Integer totalCpuCount) {
+        this.totalCpuCount = totalCpuCount;
+    }
+
+    @Basic
+    @Column(name = "NODE_COUNT")
+    public Integer getNodeCount() {
+        return nodeCount;
+    }
+
+    public void setNodeCount(Integer nodeCount) {
+        this.nodeCount = nodeCount;
+    }
+
+    @Basic
+    @Column(name = "NUMBER_OF_THREADS")
+    public Integer getNumberOfThreads() {
+        return numberOfThreads;
+    }
+
+    public void setNumberOfThreads(Integer numberOfThreads) {
+        this.numberOfThreads = numberOfThreads;
+    }
+
+    @Basic
+    @Column(name = "QUEUE_NAME")
+    public String getQueueName() {
+        return queueName;
+    }
+
+    public void setQueueName(String queueName) {
+        this.queueName = queueName;
+    }
+
+    @Basic
+    @Column(name = "WALL_TIME_LIMIT")
+    public Integer getWallTimeLimit() {
+        return wallTimeLimit;
+    }
+
+    public void setWallTimeLimit(Integer wallTimeLimit) {
+        this.wallTimeLimit = wallTimeLimit;
+    }
+
+    @Basic
+    @Column(name = "TOTAL_PHYSICAL_MEMORY")
+    public Integer getTotalPhysicalMemory() {
+        return totalPhysicalMemory;
+    }
+
+    public void setTotalPhysicalMemory(Integer totalPhysicalMemory) {
+        this.totalPhysicalMemory = totalPhysicalMemory;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProcessResourceSchedule that = (ProcessResourceSchedule) o;
+
+        if (nodeCount != null ? !nodeCount.equals(that.nodeCount) : that.nodeCount != null) return false;
+        if (numberOfThreads != null ? !numberOfThreads.equals(that.numberOfThreads) : that.numberOfThreads != null)
+            return false;
+        if (processId != null ? !processId.equals(that.processId) : that.processId != null) return false;
+        if (queueName != null ? !queueName.equals(that.queueName) : that.queueName != null) return false;
+        if (resourceHostId != null ? !resourceHostId.equals(that.resourceHostId) : that.resourceHostId != null)
+            return false;
+        if (totalCpuCount != null ? !totalCpuCount.equals(that.totalCpuCount) : that.totalCpuCount != null)
+            return false;
+        if (totalPhysicalMemory != null ? !totalPhysicalMemory.equals(that.totalPhysicalMemory) : that.totalPhysicalMemory != null)
+            return false;
+        if (wallTimeLimit != null ? !wallTimeLimit.equals(that.wallTimeLimit) : that.wallTimeLimit != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = processId != null ? processId.hashCode() : 0;
+        result = 31 * result + (resourceHostId != null ? resourceHostId.hashCode() : 0);
+        result = 31 * result + (totalCpuCount != null ? totalCpuCount.hashCode() : 0);
+        result = 31 * result + (nodeCount != null ? nodeCount.hashCode() : 0);
+        result = 31 * result + (numberOfThreads != null ? numberOfThreads.hashCode() : 0);
+        result = 31 * result + (queueName != null ? queueName.hashCode() : 0);
+        result = 31 * result + (wallTimeLimit != null ? wallTimeLimit.hashCode() : 0);
+        result = 31 * result + (totalPhysicalMemory != null ? totalPhysicalMemory.hashCode() : 0);
+        return result;
+    }
+
+    @OneToOne
+    @JoinColumn(name = "PROCESS_ID", referencedColumnName = "PROCESS_ID", nullable = false)
+    public Process getProcess() {
+        return process;
+    }
+
+    public void setProcess(Process processByProcessId) {
+        this.process = processByProcessId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessStatus.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessStatus.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessStatus.java
new file mode 100644
index 0000000..c322dc3
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProcessStatus.java
@@ -0,0 +1,114 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.lang.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "PROCESS_STATUS")
+public class ProcessStatus {
+    private final static Logger logger = LoggerFactory.getLogger(ProcessStatus.class);
+    private String processId;
+    private String state;
+    private Timestamp timeOfStateChange;
+    private String reason;
+    private Process process;
+
+    @Id
+    @Column(name = "PROCESS_ID")
+    public String getProcessId() {
+        return processId;
+    }
+
+    public void setProcessId(String processId) {
+        this.processId = processId;
+    }
+
+    @Basic
+    @Column(name = "STATE")
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    @Basic
+    @Column(name = "TIME_OF_STATE_CHANGE")
+    public Timestamp getTimeOfStateChange() {
+        return timeOfStateChange;
+    }
+
+    public void setTimeOfStateChange(Timestamp timeOfStateChange) {
+        this.timeOfStateChange = timeOfStateChange;
+    }
+
+    @Basic
+    @Column(name = "REASON")
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProcessStatus that = (ProcessStatus) o;
+
+        if (processId != null ? !processId.equals(that.processId) : that.processId != null) return false;
+        if (reason != null ? !reason.equals(that.reason) : that.reason != null) return false;
+        if (state != null ? !state.equals(that.state) : that.state != null) return false;
+        if (timeOfStateChange != null ? !timeOfStateChange.equals(that.timeOfStateChange) : that.timeOfStateChange != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = processId != null ? processId.hashCode() : 0;
+        result = 31 * result + (state != null ? state.hashCode() : 0);
+        result = 31 * result + (timeOfStateChange != null ? timeOfStateChange.hashCode() : 0);
+        result = 31 * result + (reason != null ? reason.hashCode() : 0);
+        return result;
+    }
+
+    @OneToOne
+    @JoinColumn(name = "PROCESS_ID", referencedColumnName = "PROCESS_ID", nullable = false)
+    public Process getProcess() {
+        return process;
+    }
+
+    public void setProcess(Process processByProcessId) {
+        this.process = processByProcessId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Project.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Project.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Project.java
index d5c0402..d1f2261 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Project.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Project.java
@@ -20,68 +20,70 @@
 */
 package org.apache.airavata.registry.core.experiment.catalog.model;
 
-import org.apache.openjpa.persistence.DataCache;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.persistence.*;
-import java.io.Serializable;
 import java.sql.Timestamp;
+import java.util.Collection;
 
-@DataCache
 @Entity
-@Table(name ="PROJECT")
-public class Project implements Serializable {
-    @Id
-    @Column(name = "PROJECT_ID")
-    private String project_id;
-
-    @Column(name = "GATEWAY_ID")
-    private String gateway_id;
-
-    @Column(name = "PROJECT_NAME")
-    private String project_name;
-
-    @Column(name = "DESCRIPTION")
+@Table(name = "PROJECT")
+public class Project {
+    private final static Logger logger = LoggerFactory.getLogger(Project.class);
+    private String gatewayId;
+    private String ownerName;
+    private String projectName;
+    private String projectId;
     private String description;
-
-    @Column(name = "USER_NAME")
-    private String user_name;
-
-    @Column(name = "CREATION_TIME")
     private Timestamp creationTime;
-
-    @ManyToOne(cascade=CascadeType.MERGE)
-    @JoinColumn(name = "GATEWAY_ID")
+    private Collection<Experiment> experiments;
+    private User user;
     private Gateway gateway;
+    private Collection<ProjectUser> projectUsers;
 
-    @ManyToOne(cascade=CascadeType.MERGE)
-    @JoinColumn(name = "USER_NAME")
-    private Users users;
+    @Basic
+    @Column(name = "GATEWAY_ID")
+    public String getGatewayId() {
+        return gatewayId;
+    }
 
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
 
-    public String getProject_name() {
-        return project_name;
+    @Basic
+    @Column(name = "OWNER_NAME")
+    public String getOwnerName() {
+        return ownerName;
     }
 
-    public Gateway getGateway() {
-        return gateway;
+    public void setOwnerName(String ownerName) {
+        this.ownerName = ownerName;
     }
 
-    public void setProject_name(String project_name) {
-        this.project_name = project_name;
+    @Basic
+    @Column(name = "PROJECT_NAME")
+    public String getProjectName() {
+        return projectName;
     }
 
-    public void setGateway(Gateway gateway) {
-        this.gateway = gateway;
+    public void setProjectName(String projectName) {
+        this.projectName = projectName;
     }
 
-    public Users getUsers() {
-        return users;
+    @Id
+    @Column(name = "PROJECT_ID")
+    public String getProjectId() {
+        return projectId;
     }
 
-    public void setUsers(Users users) {
-        this.users = users;
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
     }
 
+    @Basic
+    @Column(name = "DESCRIPTION")
     public String getDescription() {
         return description;
     }
@@ -90,6 +92,8 @@ public class Project implements Serializable {
         this.description = description;
     }
 
+    @Basic
+    @Column(name = "CREATION_TIME")
     public Timestamp getCreationTime() {
         return creationTime;
     }
@@ -98,28 +102,72 @@ public class Project implements Serializable {
         this.creationTime = creationTime;
     }
 
-    public void setProject_id(String project_id) {
-        this.project_id = project_id;
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Project project = (Project) o;
+
+        if (creationTime != null ? !creationTime.equals(project.creationTime) : project.creationTime != null)
+            return false;
+        if (description != null ? !description.equals(project.description) : project.description != null)
+            return false;
+        if (gatewayId != null ? !gatewayId.equals(project.gatewayId) : project.gatewayId != null) return false;
+        if (ownerName != null ? !ownerName.equals(project.ownerName) : project.ownerName != null) return false;
+        if (projectId != null ? !projectId.equals(project.projectId) : project.projectId != null) return false;
+        if (projectName != null ? !projectName.equals(project.projectName) : project.projectName != null)
+            return false;
+
+        return true;
     }
 
-    public String getProject_id() {
-        return project_id;
+    @Override
+    public int hashCode() {
+        int result = gatewayId != null ? gatewayId.hashCode() : 0;
+        result = 31 * result + (ownerName != null ? ownerName.hashCode() : 0);
+        result = 31 * result + (projectName != null ? projectName.hashCode() : 0);
+        result = 31 * result + (projectId != null ? projectId.hashCode() : 0);
+        result = 31 * result + (description != null ? description.hashCode() : 0);
+        result = 31 * result + (creationTime != null ? creationTime.hashCode() : 0);
+        return result;
     }
 
-    public String getUser_name() {
-        return user_name;
+    @OneToMany(mappedBy = "projectsByProjectId")
+    public Collection<Experiment> getExperiments() {
+        return experiments;
     }
 
-    public void setUser_name(String user_name) {
-        this.user_name = user_name;
+    public void setExperiments(Collection<Experiment> experimentByProjectId) {
+        this.experiments = experimentByProjectId;
     }
 
-    public String getGateway_id() {
-        return gateway_id;
+    @ManyToOne
+    @JoinColumn(name = "OWNER_NAME", referencedColumnName = "USER_NAME")
+    public User getUser() {
+        return user;
     }
 
-    public void setGateway_id(String gateway_id) {
-        this.gateway_id = gateway_id;
+    public void setUser(User userByOwnerName) {
+        this.user = userByOwnerName;
     }
-}
 
+    @ManyToOne
+    @JoinColumn(name = "GATEWAY_ID", referencedColumnName = "GATEWAY_ID")
+    public Gateway getGateway() {
+        return gateway;
+    }
+
+    public void setGateway(Gateway gatewayByGatewayId) {
+        this.gateway = gatewayByGatewayId;
+    }
+
+    @OneToMany(mappedBy = "project")
+    public Collection<ProjectUser> getProjectUsers() {
+        return projectUsers;
+    }
+
+    public void setProjectUsers(Collection<ProjectUser> projectUsersByProjectId) {
+        this.projectUsers = projectUsersByProjectId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser.java
index 8c721ad..c2ae505 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser.java
@@ -17,44 +17,36 @@
  * specific language governing permissions and limitations
  * under the License.
  *
- */
-
+*/
 package org.apache.airavata.registry.core.experiment.catalog.model;
 
-
-import org.apache.openjpa.persistence.DataCache;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.persistence.*;
-import java.io.Serializable;
 
-@DataCache
 @Entity
-@IdClass(ProjectUser_PK.class)
 @Table(name = "PROJECT_USER")
-public class ProjectUser implements Serializable {
-    @Id
-    @Column(name = "PROJECT_ID")
-    private String projectID;
-    @Id
-    @Column(name = "USER_NAME")
+@IdClass(ProjectUsersPK.class)
+public class ProjectUser {
+    private final static Logger logger = LoggerFactory.getLogger(ProjectUser.class);
+    private String projectId;
     private String userName;
-
-    @ManyToOne(cascade=CascadeType.MERGE)
-    @JoinColumn(name = "PROJECT_ID")
+    private User user;
     private Project project;
 
-    @ManyToOne(cascade=CascadeType.MERGE)
-    @JoinColumn(name = "USER_NAME")
-    private Users user;
-
-    public String getProjectID() {
-        return projectID;
+    @Id
+    @Column(name = "PROJECT_ID")
+    public String getProjectId() {
+        return projectId;
     }
 
-    public void setProjectID(String projectID) {
-        this.projectID = projectID;
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
     }
 
+    @Id
+    @Column(name = "USER_NAME")
     public String getUserName() {
         return userName;
     }
@@ -63,19 +55,43 @@ public class ProjectUser implements Serializable {
         this.userName = userName;
     }
 
-    public Project getProject() {
-        return project;
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProjectUser that = (ProjectUser) o;
+
+        if (projectId != null ? !projectId.equals(that.projectId) : that.projectId != null) return false;
+        if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
+
+        return true;
     }
 
-    public void setProject(Project project) {
-        this.project = project;
+    @Override
+    public int hashCode() {
+        int result = projectId != null ? projectId.hashCode() : 0;
+        result = 31 * result + (userName != null ? userName.hashCode() : 0);
+        return result;
     }
 
-    public Users getUser() {
+    @ManyToOne
+    @JoinColumn(name = "USER_NAME", referencedColumnName = "USER_NAME", nullable = false)
+    public User getUser() {
         return user;
     }
 
-    public void setUser(Users user) {
-        this.user = user;
+    public void setUser(User userByUserName) {
+        this.user = userByUserName;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PROJECT_ID", referencedColumnName = "PROJECT_ID", nullable = false)
+    public Project getProject() {
+        return project;
+    }
+
+    public void setProject(Project projectByProjectId) {
+        this.project = projectByProjectId;
     }
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser_PK.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser_PK.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser_PK.java
deleted file mode 100644
index 5e5475e..0000000
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUser_PK.java
+++ /dev/null
@@ -1,64 +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.registry.core.experiment.catalog.model;
-
-import java.io.Serializable;
-
-public class ProjectUser_PK implements Serializable {
-    private String projectID;
-    private String userName;
-
-    public ProjectUser_PK(String projectID, String userName) {
-        this.projectID = projectID;
-        this.userName = userName;
-    }
-
-    public ProjectUser_PK() {
-        ;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        return false;
-    }
-
-    @Override
-    public int hashCode() {
-        return 1;
-    }
-
-    public String getProjectID() {
-        return projectID;
-    }
-
-    public void setProjectID(String projectID) {
-        this.projectID = projectID;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUsersPK.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUsersPK.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUsersPK.java
new file mode 100644
index 0000000..8bd0e89
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/ProjectUsersPK.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.Column;
+import javax.persistence.Id;
+import java.io.Serializable;
+
+public class ProjectUsersPK implements Serializable {
+    private final static Logger logger = LoggerFactory.getLogger(ProjectUsersPK.class);
+    private String projectId;
+    private String userName;
+
+    @Column(name = "PROJECT_ID")
+    @Id
+    public String getProjectId() {
+        return projectId;
+    }
+
+    public void setProjectId(String projectId) {
+        this.projectId = projectId;
+    }
+
+    @Column(name = "USER_NAME")
+    @Id
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ProjectUsersPK that = (ProjectUsersPK) o;
+
+        if (projectId != null ? !projectId.equals(that.projectId) : that.projectId != null) return false;
+        if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = projectId != null ? projectId.hashCode() : 0;
+        result = 31 * result + (userName != null ? userName.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/QosParam.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/QosParam.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/QosParam.java
deleted file mode 100644
index 5694597..0000000
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/QosParam.java
+++ /dev/null
@@ -1,103 +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.registry.core.experiment.catalog.model;
-
-import org.apache.openjpa.persistence.DataCache;
-
-import javax.persistence.*;
-import java.io.Serializable;
-
-@DataCache
-@Entity
-@Table(name = "QOS_PARAM")
-public class QosParam implements Serializable {
-    @Id
-    @GeneratedValue
-    @Column(name = "QOS_ID")
-    private int qosId;
-    @Column(name = "EXPERIMENT_ID")
-    private String expId;
-    @Column(name = "TASK_ID")
-    private String taskId;
-    @Column(name = "START_EXECUTION_AT")
-    private String startExecutionAt;
-    @Column(name = "EXECUTE_BEFORE")
-    private String executeBefore;
-    @Column(name = "NO_OF_RETRIES")
-    private int noOfRetries;
-
-    @ManyToOne(cascade= CascadeType.MERGE)
-    @JoinColumn(name = "EXPERIMENT_ID")
-    private Experiment experiment;
-
-    @ManyToOne(cascade= CascadeType.MERGE)
-    @JoinColumn(name = "TASK_ID")
-    private TaskDetail task;
-
-    public int getQosId() {
-        return qosId;
-    }
-
-    public void setQosId(int qosId) {
-        this.qosId = qosId;
-    }
-
-    public String getExpId() {
-        return expId;
-    }
-
-    public void setExpId(String expId) {
-        this.expId = expId;
-    }
-
-    public String getTaskId() {
-        return taskId;
-    }
-
-    public void setTaskId(String taskId) {
-        this.taskId = taskId;
-    }
-
-    public String getStartExecutionAt() {
-        return startExecutionAt;
-    }
-
-    public void setStartExecutionAt(String startExecutionAt) {
-        this.startExecutionAt = startExecutionAt;
-    }
-
-    public String getExecuteBefore() {
-        return executeBefore;
-    }
-
-    public void setExecuteBefore(String executeBefore) {
-        this.executeBefore = executeBefore;
-    }
-
-    public int getNoOfRetries() {
-        return noOfRetries;
-    }
-
-    public void setNoOfRetries(int noOfRetries) {
-        this.noOfRetries = noOfRetries;
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Status.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Status.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Status.java
deleted file mode 100644
index 29e17dd..0000000
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Status.java
+++ /dev/null
@@ -1,146 +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.registry.core.experiment.catalog.model;
-
-import org.apache.openjpa.persistence.DataCache;
-
-import javax.persistence.*;
-import java.io.Serializable;
-import java.sql.Timestamp;
-
-@DataCache
-@Entity
-@Table(name = "STATUS")
-public class Status implements Serializable {
-    @Id
-    @GeneratedValue
-    @Column(name = "STATUS_ID")
-    private int statusId;
-    @Column(name = "EXPERIMENT_ID")
-    private String expId;
-    @Column(name = "NODE_INSTANCE_ID")
-    private String nodeId;
-    @Column(name = "TRANSFER_ID")
-    private String transferId;
-    @Column(name = "TASK_ID")
-    private String taskId;
-    @Column(name = "JOB_ID")
-    private String jobId;
-    @Column(name = "STATE")
-    private String state;
-    @Column(name = "STATUS_UPDATE_TIME")
-    private Timestamp statusUpdateTime;
-    @Column(name = "STATUS_TYPE")
-    private String statusType;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
-    @JoinColumn(name = "EXPERIMENT_ID")
-    private Experiment experiment;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
-    @JoinColumn(name = "TASK_ID")
-    private TaskDetail task;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
-    @JoinColumn(name = "NODE_INSTANCE_ID")
-    private WorkflowNodeDetail nodeDetail;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
-    @JoinColumn(name = "TRANSFER_ID")
-    private DataTransferDetail transferDetail;
-
-    @ManyToOne(fetch = FetchType.LAZY, cascade= CascadeType.MERGE)
-    @JoinColumn(name = "JOB_ID")
-    private JobDetail jobDetail;
-
-    public int getStatusId() {
-        return statusId;
-    }
-
-    public void setStatusId(int statusId) {
-        this.statusId = statusId;
-    }
-
-    public String getExpId() {
-        return expId;
-    }
-
-    public void setExpId(String expId) {
-        this.expId = expId;
-    }
-
-    public String getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(String nodeId) {
-        this.nodeId = nodeId;
-    }
-
-    public String getTransferId() {
-        return transferId;
-    }
-
-    public void setTransferId(String transferId) {
-        this.transferId = transferId;
-    }
-
-    public String getTaskId() {
-        return taskId;
-    }
-
-    public void setTaskId(String taskId) {
-        this.taskId = taskId;
-    }
-
-    public String getJobId() {
-        return jobId;
-    }
-
-    public void setJobId(String jobId) {
-        this.jobId = jobId;
-    }
-
-    public String getState() {
-        return state;
-    }
-
-    public void setState(String state) {
-        this.state = state;
-    }
-
-    public Timestamp getStatusUpdateTime() {
-        return statusUpdateTime;
-    }
-
-    public void setStatusUpdateTime(Timestamp statusUpdateTime) {
-        this.statusUpdateTime = statusUpdateTime;
-    }
-
-    public String getStatusType() {
-        return statusType;
-    }
-
-    public void setStatusType(String statusType) {
-        this.statusType = statusType;
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java
new file mode 100644
index 0000000..2e7fc07
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/Task.java
@@ -0,0 +1,175 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.lang.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "TASK")
+public class Task {
+    private final static Logger logger = LoggerFactory.getLogger(Task.class);
+    private String taskId;
+    private String taskType;
+    private String parentProcessId;
+    private Timestamp creationTime;
+    private Timestamp lastUpdateTime;
+    private String taskDetail;
+    private Byte taskInternalStore;
+    private Process process;
+    private TaskError taskError;
+    private TaskStatus taskStatus;
+
+    @Id
+    @Column(name = "TASK_ID")
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    @Basic
+    @Column(name = "TASK_TYPE")
+    public String getTaskType() {
+        return taskType;
+    }
+
+    public void setTaskType(String taskType) {
+        this.taskType = taskType;
+    }
+
+    @Basic
+    @Column(name = "PARENT_PROCESS_ID")
+    public String getParentProcessId() {
+        return parentProcessId;
+    }
+
+    public void setParentProcessId(String parentProcessId) {
+        this.parentProcessId = parentProcessId;
+    }
+
+    @Basic
+    @Column(name = "CREATION_TIME")
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Basic
+    @Column(name = "LAST_UPDATE_TIME")
+    public Timestamp getLastUpdateTime() {
+        return lastUpdateTime;
+    }
+
+    public void setLastUpdateTime(Timestamp lastUpdateTime) {
+        this.lastUpdateTime = lastUpdateTime;
+    }
+
+    @Basic
+    @Column(name = "TASK_DETAIL")
+    public String getTaskDetail() {
+        return taskDetail;
+    }
+
+    public void setTaskDetail(String taskDetail) {
+        this.taskDetail = taskDetail;
+    }
+
+    @Basic
+    @Column(name = "TASK_INTERNAL_STORE")
+    public Byte getTaskInternalStore() {
+        return taskInternalStore;
+    }
+
+    public void setTaskInternalStore(Byte taskInternalStore) {
+        this.taskInternalStore = taskInternalStore;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        Task task = (Task) o;
+
+        if (creationTime != null ? !creationTime.equals(task.creationTime) : task.creationTime != null) return false;
+        if (lastUpdateTime != null ? !lastUpdateTime.equals(task.lastUpdateTime) : task.lastUpdateTime != null)
+            return false;
+        if (parentProcessId != null ? !parentProcessId.equals(task.parentProcessId) : task.parentProcessId != null)
+            return false;
+        if (taskDetail != null ? !taskDetail.equals(task.taskDetail) : task.taskDetail != null) return false;
+        if (taskId != null ? !taskId.equals(task.taskId) : task.taskId != null) return false;
+        if (taskInternalStore != null ? !taskInternalStore.equals(task.taskInternalStore) : task.taskInternalStore != null)
+            return false;
+        if (taskType != null ? !taskType.equals(task.taskType) : task.taskType != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = taskId != null ? taskId.hashCode() : 0;
+        result = 31 * result + (taskType != null ? taskType.hashCode() : 0);
+        result = 31 * result + (parentProcessId != null ? parentProcessId.hashCode() : 0);
+        result = 31 * result + (creationTime != null ? creationTime.hashCode() : 0);
+        result = 31 * result + (lastUpdateTime != null ? lastUpdateTime.hashCode() : 0);
+        result = 31 * result + (taskDetail != null ? taskDetail.hashCode() : 0);
+        result = 31 * result + (taskInternalStore != null ? taskInternalStore.hashCode() : 0);
+        return result;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PARENT_PROCESS_ID", referencedColumnName = "PROCESS_ID")
+    public Process getProcess() {
+        return process;
+    }
+
+    public void setProcess(Process processByParentProcessId) {
+        this.process = processByParentProcessId;
+    }
+
+    @OneToOne(mappedBy = "task")
+    public TaskError getTaskError() {
+        return taskError;
+    }
+
+    public void setTaskError(TaskError taskErrorsByTaskId) {
+        this.taskError = taskErrorsByTaskId;
+    }
+
+    @OneToOne(mappedBy = "task")
+    public TaskStatus getTaskStatus() {
+        return taskStatus;
+    }
+
+    public void setTaskStatus(TaskStatus taskStatusesByTaskId) {
+        this.taskStatus = taskStatusesByTaskId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskDetail.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskDetail.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskDetail.java
deleted file mode 100644
index 412ed79..0000000
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskDetail.java
+++ /dev/null
@@ -1,221 +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.registry.core.experiment.catalog.model;
-
-import org.apache.openjpa.persistence.DataCache;
-
-import javax.persistence.*;
-import java.io.Serializable;
-import java.sql.Timestamp;
-import java.util.List;
-
-@DataCache
-@Entity
-@Table(name = "TASK_DETAIL")
-public class TaskDetail implements Serializable {
-    @Id
-    @Column(name = "TASK_ID")
-    private String taskId;
-    @Column(name = "NODE_INSTANCE_ID")
-    private String nodeId;
-    @Column(name = "CREATION_TIME")
-    private Timestamp creationTime;
-    @Column(name = "APPLICATION_ID")
-    private String appId;
-    @Column(name = "APPLICATION_VERSION")
-    private String appVersion;
-    @Column(name = "ALLOW_NOTIFICATION")
-    private boolean allowNotification;
-
-    @Column(name = "APPLICATION_DEPLOYMENT_ID")
-    private String applicationDeploymentId;
-
-    @ManyToOne(cascade= CascadeType.MERGE)
-    @JoinColumn(name = "NODE_INSTANCE_ID")
-    private WorkflowNodeDetail nodeDetail;
-
-    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
-    private List<ApplicationOutput> applicationOutputs;
-
-    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
-    private List<ApplicationInput> applicationInputs;
-
-    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
-    private Computational_Resource_Scheduling resourceScheduling;
-
-    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
-    private AdvancedInputDataHandling inputDataHandling;
-
-    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
-    private AdvancedOutputDataHandling outputDataHandling;
-
-    @OneToOne (fetch = FetchType.LAZY, mappedBy = "task")
-    private Status taskStatus;
-
-    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
-    private List<JobDetail> jobDetails;
-
-    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
-    private List<DataTransferDetail> dataTransferDetails;
-
-    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
-    private List<Notification_Email> notificationEmails;
-
-    @OneToMany (fetch = FetchType.LAZY, mappedBy = "task")
-    private List<ErrorDetail> errorDetails;
-
-    public String getTaskId() {
-        return taskId;
-    }
-
-    public void setTaskId(String taskId) {
-        this.taskId = taskId;
-    }
-
-    public String getNodeId() {
-        return nodeId;
-    }
-
-    public void setNodeId(String nodeId) {
-        this.nodeId = nodeId;
-    }
-
-    public Timestamp getCreationTime() {
-        return creationTime;
-    }
-
-    public void setCreationTime(Timestamp creationTime) {
-        this.creationTime = creationTime;
-    }
-
-    public String getAppId() {
-        return appId;
-    }
-
-    public void setAppId(String appId) {
-        this.appId = appId;
-    }
-
-    public String getAppVersion() {
-        return appVersion;
-    }
-
-    public void setAppVersion(String appVersion) {
-        this.appVersion = appVersion;
-    }
-
-	public String getApplicationDeploymentId() {
-		return applicationDeploymentId;
-	}
-
-	public void setApplicationDeploymentId(String applicationDeploymentId) {
-		this.applicationDeploymentId = applicationDeploymentId;
-	}
-
-    public boolean isAllowNotification() {
-        return allowNotification;
-    }
-
-    public void setAllowNotification(boolean allowNotification) {
-        this.allowNotification = allowNotification;
-    }
-
-    public List<ApplicationOutput> getApplicationOutputs() {
-        return applicationOutputs;
-    }
-
-    public void setApplicationOutputs(List<ApplicationOutput> applicationOutputs) {
-        this.applicationOutputs = applicationOutputs;
-    }
-
-    public List<ApplicationInput> getApplicationInputs() {
-        return applicationInputs;
-    }
-
-    public void setApplicationInputs(List<ApplicationInput> applicationInputs) {
-        this.applicationInputs = applicationInputs;
-    }
-
-    public Computational_Resource_Scheduling getResourceScheduling() {
-        return resourceScheduling;
-    }
-
-    public void setResourceScheduling(Computational_Resource_Scheduling resourceScheduling) {
-        this.resourceScheduling = resourceScheduling;
-    }
-
-    public AdvancedInputDataHandling getInputDataHandling() {
-        return inputDataHandling;
-    }
-
-    public void setInputDataHandling(AdvancedInputDataHandling inputDataHandling) {
-        this.inputDataHandling = inputDataHandling;
-    }
-
-    public AdvancedOutputDataHandling getOutputDataHandling() {
-        return outputDataHandling;
-    }
-
-    public void setOutputDataHandling(AdvancedOutputDataHandling outputDataHandling) {
-        this.outputDataHandling = outputDataHandling;
-    }
-
-    public List<JobDetail> getJobDetails() {
-        return jobDetails;
-    }
-
-    public void setJobDetails(List<JobDetail> jobDetails) {
-        this.jobDetails = jobDetails;
-    }
-
-    public List<DataTransferDetail> getDataTransferDetails() {
-        return dataTransferDetails;
-    }
-
-    public void setDataTransferDetails(List<DataTransferDetail> dataTransferDetails) {
-        this.dataTransferDetails = dataTransferDetails;
-    }
-
-    public List<Notification_Email> getNotificationEmails() {
-        return notificationEmails;
-    }
-
-    public void setNotificationEmails(List<Notification_Email> notificationEmails) {
-        this.notificationEmails = notificationEmails;
-    }
-
-    public Status getTaskStatus() {
-        return taskStatus;
-    }
-
-    public void setTaskStatus(Status taskStatus) {
-        this.taskStatus = taskStatus;
-    }
-
-    public List<ErrorDetail> getErrorDetails() {
-        return errorDetails;
-    }
-
-    public void setErrorDetails(List<ErrorDetail> errorDetails) {
-        this.errorDetails = errorDetails;
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskError.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskError.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskError.java
new file mode 100644
index 0000000..3efe523
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskError.java
@@ -0,0 +1,142 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "TASK_ERROR")
+public class TaskError {
+    private final static Logger logger = LoggerFactory.getLogger(TaskError.class);
+    private String taskId;
+    private Timestamp creationTime;
+    private String actualErrorMessage;
+    private String userFriendlyMessage;
+    private Boolean transientOrPersistent;
+    private String rootCauseErrorIdList;
+    private Task task;
+
+    @Id
+    @Column(name = "TASK_ID")
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    @Basic
+    @Column(name = "CREATION_TIME")
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Basic
+    @Column(name = "ACTUAL_ERROR_MESSAGE")
+    public String getActualErrorMessage() {
+        return actualErrorMessage;
+    }
+
+    public void setActualErrorMessage(String actualErrorMessage) {
+        this.actualErrorMessage = actualErrorMessage;
+    }
+
+    @Basic
+    @Column(name = "USER_FRIENDLY_MESSAGE")
+    public String getUserFriendlyMessage() {
+        return userFriendlyMessage;
+    }
+
+    public void setUserFriendlyMessage(String userFriendlyMessage) {
+        this.userFriendlyMessage = userFriendlyMessage;
+    }
+
+    @Basic
+    @Column(name = "TRANSIENT_OR_PERSISTENT")
+    public Boolean getTransientOrPersistent() {
+        return transientOrPersistent;
+    }
+
+    public void setTransientOrPersistent(Boolean transientOrPersistent) {
+        this.transientOrPersistent = transientOrPersistent;
+    }
+
+    @Basic
+    @Column(name = "ROOT_CAUSE_ERROR_ID_LIST")
+    public String getRootCauseErrorIdList() {
+        return rootCauseErrorIdList;
+    }
+
+    public void setRootCauseErrorIdList(String rootCauseErrorIdList) {
+        this.rootCauseErrorIdList = rootCauseErrorIdList;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        TaskError that = (TaskError) o;
+
+        if (actualErrorMessage != null ? !actualErrorMessage.equals(that.actualErrorMessage) : that.actualErrorMessage != null)
+            return false;
+        if (creationTime != null ? !creationTime.equals(that.creationTime) : that.creationTime != null) return false;
+        if (rootCauseErrorIdList != null ? !rootCauseErrorIdList.equals(that.rootCauseErrorIdList) : that.rootCauseErrorIdList != null)
+            return false;
+        if (taskId != null ? !taskId.equals(that.taskId) : that.taskId != null) return false;
+        if (transientOrPersistent != null ? !transientOrPersistent.equals(that.transientOrPersistent) : that.transientOrPersistent != null)
+            return false;
+        if (userFriendlyMessage != null ? !userFriendlyMessage.equals(that.userFriendlyMessage) : that.userFriendlyMessage != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = taskId != null ? taskId.hashCode() : 0;
+        result = 31 * result + (creationTime != null ? creationTime.hashCode() : 0);
+        result = 31 * result + (actualErrorMessage != null ? actualErrorMessage.hashCode() : 0);
+        result = 31 * result + (userFriendlyMessage != null ? userFriendlyMessage.hashCode() : 0);
+        result = 31 * result + (transientOrPersistent != null ? transientOrPersistent.hashCode() : 0);
+        result = 31 * result + (rootCauseErrorIdList != null ? rootCauseErrorIdList.hashCode() : 0);
+        return result;
+    }
+
+    @OneToOne
+    @JoinColumn(name = "TASK_ID", referencedColumnName = "TASK_ID", nullable = false)
+    public Task getTask() {
+        return task;
+    }
+
+    public void setTask(Task taskByTaskId) {
+        this.task = taskByTaskId;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/f366c384/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskStatus.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskStatus.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskStatus.java
new file mode 100644
index 0000000..020fe1b
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/model/TaskStatus.java
@@ -0,0 +1,113 @@
+/*
+ *
+ * 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.registry.core.experiment.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "TASK_STATUS")
+public class TaskStatus {
+    private final static Logger logger = LoggerFactory.getLogger(TaskStatus.class);
+    private String taskId;
+    private String state;
+    private Timestamp timeOfStateChange;
+    private String reason;
+    private Task task;
+
+    @Id
+    @Column(name = "TASK_ID")
+    public String getTaskId() {
+        return taskId;
+    }
+
+    public void setTaskId(String taskId) {
+        this.taskId = taskId;
+    }
+
+    @Basic
+    @Column(name = "STATE")
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    @Basic
+    @Column(name = "TIME_OF_STATE_CHANGE")
+    public Timestamp getTimeOfStateChange() {
+        return timeOfStateChange;
+    }
+
+    public void setTimeOfStateChange(Timestamp timeOfStateChange) {
+        this.timeOfStateChange = timeOfStateChange;
+    }
+
+    @Basic
+    @Column(name = "REASON")
+    public String getReason() {
+        return reason;
+    }
+
+    public void setReason(String reason) {
+        this.reason = reason;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        TaskStatus that = (TaskStatus) o;
+
+        if (reason != null ? !reason.equals(that.reason) : that.reason != null) return false;
+        if (state != null ? !state.equals(that.state) : that.state != null) return false;
+        if (taskId != null ? !taskId.equals(that.taskId) : that.taskId != null) return false;
+        if (timeOfStateChange != null ? !timeOfStateChange.equals(that.timeOfStateChange) : that.timeOfStateChange != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = taskId != null ? taskId.hashCode() : 0;
+        result = 31 * result + (state != null ? state.hashCode() : 0);
+        result = 31 * result + (timeOfStateChange != null ? timeOfStateChange.hashCode() : 0);
+        result = 31 * result + (reason != null ? reason.hashCode() : 0);
+        return result;
+    }
+
+    @OneToOne
+    @JoinColumn(name = "TASK_ID", referencedColumnName = "TASK_ID", nullable = false)
+    public Task getTask() {
+        return task;
+    }
+
+    public void setTask(Task taskByTaskId) {
+        this.task = taskByTaskId;
+    }
+}
\ No newline at end of file