http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogJPAUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogJPAUtils.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogJPAUtils.java
deleted file mode 100644
index b8257cb..0000000
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogJPAUtils.java
+++ /dev/null
@@ -1,82 +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.data.catalog.utils;
-
-import org.apache.airavata.common.exception.ApplicationSettingsException;
-import org.apache.airavata.common.utils.ServerSettings;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.persistence.*;
-import java.util.HashMap;
-import java.util.Map;
-
-public class DataCatalogJPAUtils {
-    private final static Logger logger = 
LoggerFactory.getLogger(DataCatalogJPAUtils.class);
-
-    private static final String PERSISTENCE_UNIT_NAME = "datacatalog_data";
-    private static final String DATACATALOG_JDBC_DRIVER = 
"datacatalog.jdbc.driver";
-    private static final String DATACATALOG_JDBC_URL = "datacatalog.jdbc.url";
-    private static final String DATACATALOG_JDBC_USER = 
"datacatalog.jdbc.user";
-    private static final String DATACATALOG_JDBC_PWD = 
"datacatalog.jdbc.password";
-    private static final String DATACATALOG_VALIDATION_QUERY = 
"datacatalog.validationQuery";
-
-    @PersistenceUnit(unitName="datacatalog_data")
-    protected static EntityManagerFactory factory;
-
-    @PersistenceContext(unitName="datacatalog_data")
-    private static EntityManager dataCatEntityManager;
-
-    public static EntityManager getEntityManager() throws 
ApplicationSettingsException {
-        if (factory == null) {
-            String connectionProperties = "DriverClassName=" + 
readServerProperties(DATACATALOG_JDBC_DRIVER) + "," +
-                    "Url=" + readServerProperties(DATACATALOG_JDBC_URL) + 
"?autoReconnect=true," +
-                    "Username=" + readServerProperties(DATACATALOG_JDBC_USER) 
+ "," +
-                    "Password=" + readServerProperties(DATACATALOG_JDBC_PWD) +
-                    ",validationQuery=" + 
readServerProperties(DATACATALOG_VALIDATION_QUERY);
-            System.out.println(connectionProperties);
-            Map<String, String> properties = new HashMap<String, String>();
-            properties.put("openjpa.ConnectionDriverName", 
"org.apache.commons.dbcp.BasicDataSource");
-            properties.put("openjpa.ConnectionProperties", 
connectionProperties);
-            properties.put("openjpa.DynamicEnhancementAgent", "true");
-            properties.put("openjpa.RuntimeUnenhancedClasses", "unsupported");
-            properties.put("openjpa.RemoteCommitProvider","sjvm");
-            properties.put("openjpa.Log","DefaultLevel=INFO, Runtime=INFO, 
Tool=INFO, SQL=INFO");
-            properties.put("openjpa.jdbc.SynchronizeMappings", 
"buildSchema(ForeignKeys=true)");
-            properties.put("openjpa.jdbc.QuerySQLCache", "false");
-            properties.put("openjpa.ConnectionFactoryProperties", 
"PrettyPrint=true, PrettyPrintLineLength=72," +
-                    " PrintParameters=true, MaxActive=10, MaxIdle=5, 
MinIdle=2, MaxWait=31536000,  autoReconnect=true");
-            factory = 
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties);
-        }
-        dataCatEntityManager = factory.createEntityManager();
-        return dataCatEntityManager;
-    }
-
-    private static String readServerProperties (String propertyName) throws 
ApplicationSettingsException {
-        try {
-            return ServerSettings.getSetting(propertyName);
-        } catch (ApplicationSettingsException e) {
-            logger.error("Unable to read airavata-server.properties...", e);
-            throw new ApplicationSettingsException("Unable to read 
airavata-server.properties...");
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogQueryGenerator.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogQueryGenerator.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogQueryGenerator.java
deleted file mode 100644
index 4ddf8d3..0000000
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/DataCatalogQueryGenerator.java
+++ /dev/null
@@ -1,111 +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.data.catalog.utils;
-
-import org.apache.airavata.registry.cpi.ResultOrderType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import java.util.HashMap;
-import java.util.Map;
-
-public class DataCatalogQueryGenerator {
-
-    private final static Logger logger = 
LoggerFactory.getLogger(DataCatalogQueryGenerator.class);
-       private String tableName;
-       private Map<String,Object> matches=new HashMap<String, Object>();
-       private static final String SELECT_OBJ="p";
-       private static final String DELETE_OBJ="p";
-       private static final String TABLE_OBJ="p";
-
-       public DataCatalogQueryGenerator(String tableName, Object[]... params) {
-               setTableName(tableName);
-               for (Object[] param : params) {
-                       addMatch(param[0].toString(), param[1]);
-               }
-       }
-       
-       public String getTableName() {
-               return tableName;
-       }
-
-    public void setTableName(String tableName) {
-               this.tableName = tableName;
-       }
-
-    public void addMatch(String colName, Object matchValue){
-               matches.put(colName, matchValue);
-       }
-       
-       public void setParameter(String colName, Object matchValue){
-               addMatch(colName, matchValue);
-       }
-
-    public Query selectQuery(EntityManager entityManager){
-        String queryString="SELECT "+ SELECT_OBJ + " FROM " +getTableName()+" 
"+TABLE_OBJ;
-        return generateQueryWithParameters(entityManager, queryString);
-    }
-
-    public Query selectQuery(EntityManager entityManager, String orderByColumn,
-                             ResultOrderType resultOrderType){
-        String order = (resultOrderType == ResultOrderType.ASC) ? "ASC" : 
"DESC";
-        String orderByClause = " ORDER BY " + SELECT_OBJ + "." + orderByColumn 
+ " " + order;
-        String queryString="SELECT "+ SELECT_OBJ + " FROM " +getTableName()+" 
"+TABLE_OBJ;
-        return generateQueryWithParameters(entityManager, queryString, 
orderByClause);
-    }
-
-       public Query deleteQuery(EntityManager entityManager){
-               String queryString="Delete FROM "+getTableName()+" "+TABLE_OBJ;
-               return generateQueryWithParameters(entityManager, queryString);
-       }
-
-       private Query generateQueryWithParameters(EntityManager entityManager, 
String queryString) {
-               return generateQueryWithParameters(entityManager, queryString, 
"");
-       }
-
-    private Query generateQueryWithParameters(EntityManager entityManager,
-                                              String queryString, String 
orderByClause) {
-        Map<String,Object> queryParameters=new HashMap<String, Object>();
-        if (matches.size()>0){
-            String matchString = "";
-            int paramCount=0;
-            for (String colName : matches.keySet()) {
-                String paramName="param"+paramCount;
-                queryParameters.put(paramName, matches.get(colName));
-                if (!matchString.equals("")){
-                    matchString+=" AND ";
-                }
-                matchString+=TABLE_OBJ+"."+colName+" =:"+paramName;
-                paramCount++;
-            }
-            queryString+=" WHERE "+matchString;
-        }
-        queryString += orderByClause;
-        Query query = entityManager.createQuery(queryString);
-        for (String paramName : queryParameters.keySet()) {
-            query.setParameter(paramName, queryParameters.get(paramName));
-        }
-        return query;
-    }
-}

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/ThriftDataModelConversion.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/ThriftDataModelConversion.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/ThriftDataModelConversion.java
deleted file mode 100644
index 5426e8b..0000000
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/utils/ThriftDataModelConversion.java
+++ /dev/null
@@ -1,215 +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.data.catalog.utils;
-
-import org.apache.airavata.model.data.product.*;
-import org.apache.airavata.registry.core.data.catalog.model.DataProduct;
-import 
org.apache.airavata.registry.core.data.catalog.model.DataProductMetaData;
-import 
org.apache.airavata.registry.core.data.catalog.model.DataReplicaLocation;
-import 
org.apache.airavata.registry.core.data.catalog.model.DataReplicaMetaData;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-public class ThriftDataModelConversion {
-
-    private final static Logger logger = 
LoggerFactory.getLogger(ThriftDataModelConversion.class);
-
-    public static DataProductModel getDataProductModel(DataProduct 
dataProduct){
-        if (dataProduct != null) {
-            DataProductModel dataProductModel = new DataProductModel();
-            dataProductModel.setProductUri(dataProduct.getProductUri());
-            dataProductModel.setLogicalPath(dataProduct.getLogicalPath());
-            dataProductModel.setGatewayId(dataProduct.getGatewayId());
-            
dataProductModel.setParentProductUri(dataProduct.getParentProductUri());
-            dataProductModel.setProductName(dataProduct.getProductName());
-            if(dataProduct.getDataProductType() != null)
-                
dataProductModel.setDataProductType(DataProductType.valueOf(dataProduct.getDataProductType()));
-            else
-                dataProductModel.setDataProductType(DataProductType.FILE);
-            
dataProductModel.setProductDescription(dataProduct.getProductDescription());
-            dataProductModel.setOwnerName(dataProduct.getOwnerName());
-            dataProductModel.setProductSize(dataProduct.getProductSize());
-            if(dataProduct.getCreationTime() != null)
-                
dataProductModel.setCreationTime(dataProduct.getCreationTime().getTime());
-            if(dataProduct.getLastModifiedTime() != null)
-                
dataProductModel.setLastModifiedTime(dataProduct.getLastModifiedTime().getTime());
-            
dataProductModel.setProductMetadata(getResourceMetaData(dataProduct.getDataProductMetaData()));
-            if(dataProduct.getDataReplicaLocations() != null){
-                ArrayList<DataReplicaLocationModel> dataReplicaLocationModels 
= new ArrayList<>();
-                
dataProduct.getDataReplicaLocations().stream().forEach(r->dataReplicaLocationModels
-                        .add(getDataReplicaLocationModel(r)));
-                
dataProductModel.setReplicaLocations(dataReplicaLocationModels);
-            }
-            
if(dataProductModel.getDataProductType().equals(DataProductType.COLLECTION) && 
dataProduct.getChildDataProducts() != null){
-                ArrayList<DataProductModel> childDataProducts = new 
ArrayList<>();
-                
dataProduct.getChildDataProducts().stream().forEach(r->childDataProducts.add(getDataProductModel(r)));
-                dataProductModel.setChildProducts(childDataProducts);
-            }
-            return dataProductModel;
-        }
-        return null;
-    }
-
-    public static DataProduct getDataProduct(DataProductModel 
dataProductModel){
-        if(dataProductModel != null){
-            DataProduct dataProduct = new DataProduct();
-            return getUpdatedDataProduct(dataProductModel, dataProduct);
-        }
-        return null;
-    }
-
-    public static DataProduct getUpdatedDataProduct(DataProductModel 
dataProductModel, DataProduct dataProduct){
-        dataProduct.setProductUri(dataProductModel.getProductUri());
-        dataProduct.setLogicalPath(dataProductModel.getLogicalPath());
-        dataProduct.setGatewayId(dataProductModel.getGatewayId());
-        dataProduct.setProductName(dataProductModel.getProductName());
-        
dataProduct.setParentProductUri(dataProductModel.getParentProductUri());
-        if(dataProductModel.getDataProductType() != null)
-            
dataProduct.setDataProductType(dataProductModel.getDataProductType().toString());
-        else
-            dataProduct.setDataProductType(DataProductType.FILE.toString());
-        
dataProduct.setProductDescription(dataProductModel.getProductDescription());
-        dataProduct.setOwnerName(dataProductModel.getOwnerName());
-        dataProduct.setProductSize(dataProductModel.getProductSize());
-        if(dataProductModel.getCreationTime() > 0)
-            dataProduct.setCreationTime(new 
Timestamp(dataProductModel.getCreationTime()));
-        if(dataProductModel.getLastModifiedTime() > 0)
-            dataProduct.setLastModifiedTime(new 
Timestamp(dataProductModel.getLastModifiedTime()));
-        ArrayList<DataProductMetaData> dataProductMetaData = new ArrayList<>();
-        if(dataProductModel.getProductMetadata() != null) {
-            dataProductModel.getProductMetadata().keySet().stream().forEach(k 
-> {
-                String v = dataProductModel.getProductMetadata().get(k);
-                DataProductMetaData temp = new DataProductMetaData();
-                temp.setProductUri(dataProduct.getProductUri());
-                temp.setKey(k);
-                temp.setValue(v);
-                dataProductMetaData.add(temp);
-            });
-            dataProduct.setDataProductMetaData(dataProductMetaData);
-        }
-        if(dataProductModel.getReplicaLocations() != null){
-            ArrayList<DataReplicaLocation> dataReplicaLocations = new 
ArrayList<>();
-            dataProductModel.getReplicaLocations().stream().forEach(r->{
-                DataReplicaLocation dataReplicaLocationModel = 
getDataReplicaLocation(r);
-                
dataReplicaLocationModel.setProductUri(dataProductModel.getProductUri());
-                dataReplicaLocations.add(dataReplicaLocationModel);
-            });
-            dataProduct.setDataReplicaLocations(dataReplicaLocations);
-        }
-        if(dataProductModel.getDataProductType() == DataProductType.COLLECTION 
&& dataProductModel.getChildProducts() != null){
-            ArrayList<DataProduct> childDataProducts = new ArrayList<>();
-            
dataProductModel.getChildProducts().stream().forEach(r->childDataProducts.add(getDataProduct(r)));
-            dataProduct.setChildDataProducts(childDataProducts);
-        }
-        return dataProduct;
-    }
-
-    public static DataReplicaLocationModel 
getDataReplicaLocationModel(DataReplicaLocation replicaLocation){
-        if (replicaLocation != null) {
-            DataReplicaLocationModel replicaLocationModel = new 
DataReplicaLocationModel();
-            replicaLocationModel.setReplicaId(replicaLocation.getReplicaId());
-            
replicaLocationModel.setProductUri(replicaLocation.getProductUri());
-            
replicaLocationModel.setReplicaName(replicaLocation.getReplicaName());
-            
replicaLocationModel.setReplicaDescription(replicaLocation.getReplicaDescription());
-            
replicaLocationModel.setStorageResourceId(replicaLocation.getStorageResourceId());
-            if(replicaLocation.getValidUntilTime() != null)
-                
replicaLocationModel.setValidUntilTime(replicaLocation.getValidUntilTime().getTime());
-            replicaLocationModel.setFilePath(replicaLocation.getFilePath());
-            if(replicaLocation.getCreationTime() != null)
-                
replicaLocationModel.setCreationTime(replicaLocation.getCreationTime().getTime());
-            if(replicaLocation.getLastModifiedTime() != null)
-                
replicaLocationModel.setLastModifiedTime(replicaLocation.getLastModifiedTime().getTime());
-            if(replicaLocation.getReplicaLocationCategory() != null)
-                
replicaLocationModel.setReplicaLocationCategory(ReplicaLocationCategory.valueOf(replicaLocation
-                        .getReplicaLocationCategory().toString()));
-            if(replicaLocation.getReplicaPersistentType() != null)
-                
replicaLocationModel.setReplicaPersistentType(ReplicaPersistentType.valueOf(replicaLocation
-                        .getReplicaPersistentType().toString()));
-            
replicaLocationModel.setReplicaMetadata(getReplicaMetaData(replicaLocation.getDataReplicaMetaData()));
-            return replicaLocationModel;
-        }
-        return null;
-    }
-
-    public static DataReplicaLocation 
getDataReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel){
-        if(dataReplicaLocationModel != null){
-            DataReplicaLocation dataReplicaLocation = new 
DataReplicaLocation();
-            return getUpdatedDataReplicaLocation(dataReplicaLocationModel, 
dataReplicaLocation);
-        }
-        return null;
-    }
-
-    public static DataReplicaLocation 
getUpdatedDataReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel,
-                                                                    
DataReplicaLocation dataReplicaLocation){
-        
dataReplicaLocation.setReplicaId(dataReplicaLocationModel.getReplicaId());
-        
dataReplicaLocation.setProductUri(dataReplicaLocationModel.getProductUri());
-        
dataReplicaLocation.setReplicaName(dataReplicaLocationModel.getReplicaName());
-        
dataReplicaLocation.setReplicaDescription(dataReplicaLocationModel.getReplicaDescription());
-        
dataReplicaLocation.setStorageResourceId(dataReplicaLocationModel.getStorageResourceId());
-        
dataReplicaLocation.setFilePath(dataReplicaLocationModel.getFilePath());
-        if(dataReplicaLocationModel.getValidUntilTime() > 0)
-            dataReplicaLocation.setValidUntilTime(new 
Timestamp(dataReplicaLocationModel.getValidUntilTime()));
-        if(dataReplicaLocationModel.getCreationTime() > 0)
-            dataReplicaLocation.setCreationTime(new 
Timestamp(dataReplicaLocationModel.getCreationTime()));
-        if(dataReplicaLocationModel.getLastModifiedTime() > 0)
-            dataReplicaLocation.setLastModifiedTime(new 
Timestamp(dataReplicaLocationModel.getLastModifiedTime()));
-        if(dataReplicaLocationModel.getReplicaLocationCategory() != null)
-            
dataReplicaLocation.setReplicaLocationCategory(dataReplicaLocationModel.getReplicaLocationCategory().toString());
-        if(dataReplicaLocationModel.getReplicaPersistentType() != null)
-            
dataReplicaLocation.setReplicaPersistentType(dataReplicaLocationModel.getReplicaPersistentType().toString());
-        ArrayList<DataReplicaMetaData> dataReplicaMetadata = new ArrayList<>();
-        if(dataReplicaLocation.getDataReplicaMetaData() != null){
-            
dataReplicaLocationModel.getReplicaMetadata().keySet().stream().forEach(k -> {
-                String v = 
dataReplicaLocationModel.getReplicaMetadata().get(k);
-                DataReplicaMetaData temp = new DataReplicaMetaData();
-                temp.setReplicaId(dataReplicaLocationModel.getProductUri());
-                temp.setKey(k);
-                temp.setValue(v);
-                dataReplicaMetadata.add(temp);
-            });
-            dataReplicaLocation.setDataReplicaMetaData(dataReplicaMetadata);
-        }
-        return dataReplicaLocation;
-    }
-
-    public static Map<String, String> 
getResourceMetaData(Collection<DataProductMetaData> dataProductMetaData){
-        HashMap<String, String> metadata = new HashMap<>();
-        if(dataProductMetaData!=null && !dataProductMetaData.isEmpty()) {
-            dataProductMetaData.stream().forEach(m -> 
metadata.put(m.getKey(),m.getValue()));
-        }
-        return metadata;
-    }
-
-    public static Map<String, String> 
getReplicaMetaData(Collection<DataReplicaMetaData> dataReplicaMetaData){
-        HashMap<String, String> metadata = new HashMap<>();
-        if(dataReplicaMetaData!=null && !dataReplicaMetaData.isEmpty()) {
-            dataReplicaMetaData.stream().forEach(m -> 
metadata.put(m.getKey(),m.getValue()));
-        }
-        return metadata;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/RegistryFactory.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/RegistryFactory.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/RegistryFactory.java
index 41a9f13..8e4ed08 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/RegistryFactory.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/RegistryFactory.java
@@ -24,7 +24,7 @@ package 
org.apache.airavata.registry.core.experiment.catalog.impl;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.utils.ServerSettings;
 import org.apache.airavata.registry.core.app.catalog.impl.AppCatalogImpl;
-import org.apache.airavata.registry.core.data.catalog.impl.DataCatalogImpl;
+import 
org.apache.airavata.registry.core.replica.catalog.impl.ReplicaCatalogImpl;
 import org.apache.airavata.registry.core.impl.RegistryImpl;
 import org.apache.airavata.registry.cpi.*;
 import org.slf4j.Logger;
@@ -33,7 +33,7 @@ import org.slf4j.LoggerFactory;
 public class RegistryFactory {
     private static ExperimentCatalog experimentCatalog;
     private static AppCatalog appCatalog;
-    private static DataCatalog replicaCatalog;
+    private static ReplicaCatalog replicaCatalog;
     private static Registry registry;
     private static Logger logger = 
LoggerFactory.getLogger(RegistryFactory.class);
 
@@ -100,14 +100,14 @@ public class RegistryFactory {
         return appCatalog;
     }
 
-    public static DataCatalog getDataCatalog() throws DataCatalogException {
+    public static ReplicaCatalog getReplicaCatalog() throws 
ReplicaCatalogException {
         try {
             if (replicaCatalog == null) {
-                replicaCatalog = new DataCatalogImpl();
+                replicaCatalog = new ReplicaCatalogImpl();
             }
         } catch (Exception e) {
             logger.error("Unable to create data catalog instance", e);
-            throw new DataCatalogException(e);
+            throw new ReplicaCatalogException(e);
         }
         return replicaCatalog;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/impl/RegistryImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/impl/RegistryImpl.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/impl/RegistryImpl.java
index 5207fee..0e3c006 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/impl/RegistryImpl.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/impl/RegistryImpl.java
@@ -22,7 +22,7 @@
 package org.apache.airavata.registry.core.impl;
 
 import org.apache.airavata.registry.core.app.catalog.impl.AppCatalogImpl;
-import org.apache.airavata.registry.core.data.catalog.impl.DataCatalogImpl;
+import 
org.apache.airavata.registry.core.replica.catalog.impl.ReplicaCatalogImpl;
 import 
org.apache.airavata.registry.core.experiment.catalog.impl.ExperimentCatalogImpl;
 import org.apache.airavata.registry.cpi.*;
 
@@ -43,7 +43,7 @@ public class RegistryImpl implements Registry {
     }
 
     @Override
-    public DataCatalog getDataCatalog() throws RegistryException {
-        return new DataCatalogImpl();
+    public ReplicaCatalog getReplicaCatalog() throws RegistryException {
+        return new ReplicaCatalogImpl();
     }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/impl/ReplicaCatalogImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/impl/ReplicaCatalogImpl.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/impl/ReplicaCatalogImpl.java
new file mode 100644
index 0000000..2da6724
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/impl/ReplicaCatalogImpl.java
@@ -0,0 +1,356 @@
+/*
+ *
+ * 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.replica.catalog.impl;
+
+import org.apache.airavata.model.data.replica.DataProductModel;
+import org.apache.airavata.model.data.replica.DataProductType;
+import org.apache.airavata.model.data.replica.DataReplicaLocationModel;
+import org.apache.airavata.registry.core.replica.catalog.model.DataProduct;
+import 
org.apache.airavata.registry.core.replica.catalog.model.DataReplicaLocation;
+import 
org.apache.airavata.registry.core.replica.catalog.utils.ReplicaCatalogJPAUtils;
+import 
org.apache.airavata.registry.core.replica.catalog.utils.ThriftDataModelConversion;
+import org.apache.airavata.registry.cpi.ReplicaCatalog;
+import org.apache.airavata.registry.cpi.ReplicaCatalogException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+public class ReplicaCatalogImpl implements ReplicaCatalog {
+
+    private final static Logger logger = 
LoggerFactory.getLogger(ReplicaCatalogImpl.class);
+
+    @Override
+    public String registerDataProduct(DataProductModel productModel) throws 
ReplicaCatalogException {
+        if(productModel.getOwnerName() == null || productModel.getGatewayId() 
== null || productModel
+                .getLogicalPath() == null || 
!productModel.getLogicalPath().startsWith("/")){
+            throw new ReplicaCatalogException("owner name, gateway id and 
logical path should be non empty and logical path" +
+                    " should start with /");
+        }
+        if(productModel.getDataProductType().equals(DataProductType.FILE) && 
!productModel.getLogicalPath().endsWith(productModel.getProductName())){
+            if(!productModel.getLogicalPath().endsWith("/"))
+                productModel.setLogicalPath(productModel.getLogicalPath()+"/");
+            
productModel.setLogicalPath(productModel.getLogicalPath()+productModel.getProductName());
+        }
+        //Creating parent logical dir if not exist too
+        String parentUri = ReplicaCatalog.schema + "://" + 
productModel.getOwnerName() + "@" + productModel.getGatewayId() + ":/" ;
+        DataProductModel tempDp;
+        if(!isExists(parentUri)){
+            tempDp = new DataProductModel();
+            tempDp.setProductUri(parentUri);
+            tempDp.setLogicalPath("/");
+            tempDp.setOwnerName(productModel.getOwnerName());
+            tempDp.setGatewayId(productModel.getGatewayId());
+            tempDp.setDataProductType(DataProductType.DIR);
+            createDataProduct(tempDp);
+        }
+        String[] bits = productModel.getLogicalPath().split("/");
+        for(int i=0; i<bits.length-1;i++){
+            String dir = bits[i];
+            if(!isExists(parentUri + dir)){
+                tempDp = new DataProductModel();
+                try {
+                    tempDp.setLogicalPath((new URI(parentUri + 
dir)).getPath());
+                } catch (URISyntaxException e) {
+                    throw new ReplicaCatalogException(e);
+                }
+                tempDp.setProductUri(parentUri + dir);
+                tempDp.setOwnerName(productModel.getOwnerName());
+                tempDp.setGatewayId(productModel.getGatewayId());
+                tempDp.setDataProductType(DataProductType.DIR);
+                tempDp.setParentProductUri(parentUri);
+                parentUri = createDataProduct(tempDp);
+            }
+        }
+
+        productModel.setParentProductUri(parentUri);
+        String productUri = ReplicaCatalog.schema + "://" + 
productModel.getOwnerName() + "@" + productModel.getGatewayId()
+                + ":" + productModel.getLogicalPath();
+        productModel.setProductUri(productUri);
+        long currentTime = System.currentTimeMillis();
+        productModel.setCreationTime(currentTime);
+        productModel.setLastModifiedTime(currentTime);
+        if(productModel.getReplicaLocations() != null){
+            productModel.getReplicaLocations().stream().forEach(r-> {
+                r.setProductUri(productUri);
+                r.setReplicaId(UUID.randomUUID().toString());
+                r.setCreationTime(currentTime);
+                r.setLastModifiedTime(currentTime);
+            });
+        }
+        productModel.setCreationTime(System.currentTimeMillis());
+        productModel.setLastModifiedTime(System.currentTimeMillis());
+        return createDataProduct(productModel);
+    }
+
+    private String createDataProduct(DataProductModel productModel) throws 
ReplicaCatalogException {
+        DataProduct dataProduct = 
ThriftDataModelConversion.getDataProduct(productModel);
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            em.persist(dataProduct);
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return dataProduct.getProductUri();
+    }
+
+    @Override
+    public boolean removeDataProduct(String productUri) throws 
ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataProduct dataProduct = em.find(DataProduct.class, productUri);
+            if(dataProduct == null)
+                return false;
+            em.getTransaction().begin();
+            em.remove(dataProduct);
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean updateDataProduct(DataProductModel productModel) throws 
ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataProduct dataProduct = em.find(DataProduct.class, 
productModel.getProductUri());
+            if(dataProduct == null)
+                return false;
+            em.getTransaction().begin();
+            
productModel.setCreationTime(dataProduct.getCreationTime().getTime());
+            productModel.setLastModifiedTime(System.currentTimeMillis());
+            
em.merge(ThriftDataModelConversion.getUpdatedDataProduct(productModel, 
dataProduct));
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public DataProductModel getDataProduct(String productUri) throws 
ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataProduct dataProduct = em.find(DataProduct.class, productUri);
+            return ThriftDataModelConversion.getDataProductModel(dataProduct);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    @Override
+    public boolean isExists(String productUri) throws ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataProduct dataProduct = em.find(DataProduct.class, productUri);
+            return dataProduct != null;
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    @Override
+    public String registerReplicaLocation(DataReplicaLocationModel 
dataReplicaLocationModel) throws ReplicaCatalogException {
+        String replicaId = UUID.randomUUID().toString();
+        dataReplicaLocationModel.setReplicaId(replicaId);
+        long currentTime = System.currentTimeMillis();
+        dataReplicaLocationModel.setCreationTime(currentTime);
+        dataReplicaLocationModel.setLastModifiedTime(currentTime);
+        dataReplicaLocationModel.setCreationTime(System.currentTimeMillis());
+        
dataReplicaLocationModel.setLastModifiedTime(System.currentTimeMillis());
+        DataReplicaLocation replicaLocation = 
ThriftDataModelConversion.getDataReplicaLocation(dataReplicaLocationModel);
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            em.persist(replicaLocation);
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return replicaId;
+    }
+
+    @Override
+    public boolean removeReplicaLocation(String replicaId) throws 
ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataReplicaLocation replicaLocation = 
em.find(DataReplicaLocation.class, replicaId);
+            if(replicaLocation == null)
+                return false;
+            em.getTransaction().begin();
+            em.remove(replicaLocation);
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean updateReplicaLocation(DataReplicaLocationModel 
dataReplicaLocationModel) throws ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataReplicaLocation dataReplicaLocation = 
em.find(DataReplicaLocation.class, dataReplicaLocationModel.getReplicaId());
+            if(dataReplicaLocation == null)
+                return false;
+            em.getTransaction().begin();
+            
dataReplicaLocationModel.setCreationTime(dataReplicaLocation.getCreationTime().getTime());
+            
dataReplicaLocationModel.setLastModifiedTime(System.currentTimeMillis());
+            
em.merge(ThriftDataModelConversion.getUpdatedDataReplicaLocation(dataReplicaLocationModel,
 dataReplicaLocation));
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public DataReplicaLocationModel getReplicaLocation(String replicaId) 
throws ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataReplicaLocation replicaLocation = 
em.find(DataReplicaLocation.class, replicaId);
+            return 
ThriftDataModelConversion.getDataReplicaLocationModel(replicaLocation);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    @Override
+    public List<DataReplicaLocationModel> getAllReplicaLocations(String 
productUri) throws ReplicaCatalogException {
+        EntityManager em = null;
+        try {
+            em = ReplicaCatalogJPAUtils.getEntityManager();
+            DataProduct dataProduct = em.find(DataProduct.class, productUri);
+            if(dataProduct == null)
+                return null;
+            ArrayList<DataReplicaLocationModel> dataReplicaLocationModels = 
new ArrayList<>();
+            
dataProduct.getDataReplicaLocations().stream().forEach(rl->dataReplicaLocationModels
+                    
.add(ThriftDataModelConversion.getDataReplicaLocationModel(rl)));
+            return dataReplicaLocationModels;
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new ReplicaCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/Configuration.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/Configuration.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/Configuration.java
new file mode 100644
index 0000000..881d043
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/Configuration.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.registry.core.replica.catalog.model;
+
+import org.apache.airavata.registry.core.app.catalog.model.Configuration_PK;
+
+import javax.persistence.*;
+import java.io.Serializable;
+
+@Entity
+@Table(name ="CONFIGURATION")
+@IdClass(Configuration_PK.class)
+public class Configuration implements Serializable {
+    @Id
+    @Column(name = "CONFIG_KEY")
+    private String config_key;
+
+    @Id
+    @Column(name = "CONFIG_VAL")
+    private String config_val;
+
+    public String getConfig_key() {
+        return config_key;
+    }
+
+    public String getConfig_val() {
+        return config_val;
+    }
+
+    public void setConfig_key(String config_key) {
+        this.config_key = config_key;
+    }
+
+    public void setConfig_val(String config_val) {
+        this.config_val = config_val;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProduct.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProduct.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProduct.java
new file mode 100644
index 0000000..7a48f87
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProduct.java
@@ -0,0 +1,187 @@
+/*
+ *
+ * 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.replica.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+import java.util.Collection;
+
+@Entity
+@Table(name = "DATA_PRODUCT")
+public class DataProduct {
+    private final static Logger logger = 
LoggerFactory.getLogger(DataProduct.class);
+    private String productUri;
+    private String gatewayId;
+    private String productName;
+    private String logicalPath;
+    private String productDescription;
+    private String dataProductType;
+    private String ownerName;
+    private String parentProductUri;
+    private int productSize;
+    private Timestamp creationTime;
+    private Timestamp lastModifiedTime;
+
+    private DataProduct parentDataProduct;
+    private Collection<DataReplicaLocation> dataReplicaLocations;
+    private Collection<DataProductMetaData> dataProductMetaData;
+    private Collection<DataProduct> childDataProducts;
+
+    @Id
+    @Column(name = "PRODUCT_URI")
+    public String getProductUri() {
+        return productUri;
+    }
+
+    public void setProductUri(String productUri) {
+        this.productUri = productUri;
+    }
+
+    @Column(name = "GATEWAY_ID")
+    public String getGatewayId() {
+        return gatewayId;
+    }
+
+    public void setGatewayId(String gatewayId) {
+        this.gatewayId = gatewayId;
+    }
+
+    @Column(name = "PRODUCT_NAME")
+    public String getProductName() {
+        return productName;
+    }
+
+    public void setProductName(String productName) {
+        this.productName = productName;
+    }
+
+    @Column(name = "PRODUCT_DESCRIPTION")
+    public String getProductDescription() {
+        return productDescription;
+    }
+
+    public void setProductDescription(String productDescription) {
+        this.productDescription = productDescription;
+    }
+
+    @Column(name = "LOGICAL_PATH")
+    public String getLogicalPath() {
+        return logicalPath;
+    }
+
+    public void setLogicalPath(String logicalPath) {
+        this.logicalPath = logicalPath;
+    }
+
+    @Column(name = "OWNER_NAME")
+    public String getOwnerName() {
+        return ownerName;
+    }
+
+    public void setOwnerName(String ownerName) {
+        this.ownerName = ownerName;
+    }
+
+    @Column(name = "PARENT_PRODUCT_URI")
+    public String getParentProductUri() {
+        return parentProductUri;
+    }
+
+    public void setParentProductUri(String parentProductUri) {
+        this.parentProductUri = parentProductUri;
+    }
+
+    @Column(name = "PRODUCT_TYPE")
+    public String getDataProductType() {
+        return dataProductType;
+    }
+
+    public void setDataProductType(String dataProductType) {
+        this.dataProductType = dataProductType;
+    }
+
+    @Column(name = "PRODUCT_SIZE")
+    public int getProductSize() {
+        return productSize;
+    }
+
+    public void setProductSize(int productSize) {
+        this.productSize = productSize;
+    }
+
+    @Column(name = "CREATION_TIME")
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Column(name = "LAST_MODIFIED_TIME")
+    public Timestamp getLastModifiedTime() {
+        return lastModifiedTime;
+    }
+
+    public void setLastModifiedTime(Timestamp lastModifiedTime) {
+        this.lastModifiedTime = lastModifiedTime;
+    }
+
+    @OneToMany(mappedBy = "dataProduct", cascade = {CascadeType.ALL})
+    public Collection<DataReplicaLocation> getDataReplicaLocations() {
+        return dataReplicaLocations;
+    }
+
+    public void setDataReplicaLocations(Collection<DataReplicaLocation> 
dataReplicaLocations) {
+        this.dataReplicaLocations = dataReplicaLocations;
+    }
+
+    @OneToMany(mappedBy = "dataProduct", cascade = {CascadeType.ALL})
+    public Collection<DataProductMetaData> getDataProductMetaData() {
+        return dataProductMetaData;
+    }
+
+    public void setDataProductMetaData(Collection<DataProductMetaData> 
dataProductMetaData) {
+        this.dataProductMetaData = dataProductMetaData;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PARENT_PRODUCT_URI", referencedColumnName = 
"PRODUCT_URI")
+    public DataProduct getParentDataProduct() {
+        return parentDataProduct;
+    }
+
+    public void setParentDataProduct(DataProduct parentDataProduct) {
+        this.parentDataProduct = parentDataProduct;
+    }
+
+    @OneToMany(mappedBy = "parentDataProduct", cascade = {CascadeType.ALL})
+    public Collection<DataProduct> getChildDataProducts() {
+        return childDataProducts;
+    }
+
+    public void setChildDataProducts(Collection<DataProduct> 
childDataProducts) {
+        this.childDataProducts = childDataProducts;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData.java
new file mode 100644
index 0000000..8604c69
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData.java
@@ -0,0 +1,77 @@
+/*
+ *
+ * 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.replica.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "DATA_PRODUCT_METADATA")
+@IdClass(DataProductMetaData_PK.class)
+public class DataProductMetaData {
+    private final static Logger logger = 
LoggerFactory.getLogger(DataProductMetaData.class);
+    private String productUri;
+    private String key;
+    private String value;
+
+    private DataProduct dataProduct;
+
+    @Id
+    @Column(name = "PRODUCT_URI")
+    public String getProductUri() {
+        return productUri;
+    }
+
+    public void setProductUri(String productUri) {
+        this.productUri = productUri;
+    }
+
+    @Id
+    @Column(name = "METADATA_KEY")
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    @Column(name = "METADATA_VALUE")
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PRODUCT_URI", referencedColumnName = "PRODUCT_URI")
+    public DataProduct getDataProduct() {
+        return dataProduct;
+    }
+
+    public void setDataProduct(DataProduct dataProduct) {
+        this.dataProduct = dataProduct;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData_PK.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData_PK.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData_PK.java
new file mode 100644
index 0000000..891b2fa
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataProductMetaData_PK.java
@@ -0,0 +1,59 @@
+/*
+ *
+ * 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.replica.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Serializable;
+
+public class DataProductMetaData_PK implements Serializable {
+    private final static Logger logger = 
LoggerFactory.getLogger(DataProductMetaData_PK.class);
+
+    private String productUri;
+    private String key;
+
+    public String getProductUri() {
+        return productUri;
+    }
+
+    public void setProductUri(String productUri) {
+        this.productUri = productUri;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return 1;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaLocation.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaLocation.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaLocation.java
new file mode 100644
index 0000000..44ce4fc
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaLocation.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.replica.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+import java.util.Collection;
+
+@Entity
+@Table(name = "DATA_REPLICA_LOCATION")
+public class DataReplicaLocation {
+    private final static Logger logger = 
LoggerFactory.getLogger(DataReplicaLocation.class);
+    private String replicaId;
+    private String productUri;
+    private String replicaName;
+    private String replicaDescription;
+    private String storageResourceId;
+    private String filePath;
+    private String replicaLocationCategory;
+    private String replicaPersistentType;
+    private Timestamp creationTime;
+    private Timestamp lastModifiedTime;
+    private Timestamp validUntilTime;
+
+    private DataProduct dataProduct;
+    private Collection<DataReplicaMetaData> dataReplicaMetaData;
+
+    @Id
+    @Column(name = "REPLICA_ID")
+    public String getReplicaId() {
+        return replicaId;
+    }
+
+    public void setReplicaId(String replicaId) {
+        this.replicaId = replicaId;
+    }
+
+    @Column(name = "PRODUCT_URI")
+    public String getProductUri() {
+        return productUri;
+    }
+
+    public void setProductUri(String productUri) {
+        this.productUri = productUri;
+    }
+
+
+    @Column(name = "REPLICA_NAME")
+    public String getReplicaName() {
+        return replicaName;
+    }
+
+    public void setReplicaName(String replicaName) {
+        this.replicaName = replicaName;
+    }
+
+    @Column(name = "REPLICA_DESCRIPTION")
+    public String getReplicaDescription() {
+        return replicaDescription;
+    }
+
+    public void setReplicaDescription(String replicaDescription) {
+        this.replicaDescription = replicaDescription;
+    }
+
+    @Column(name = "STORAGE_RESOURCE_ID")
+    public String getStorageResourceId() {
+        return storageResourceId;
+    }
+
+    public void setStorageResourceId(String storageResourceId) {
+        this.storageResourceId = storageResourceId;
+    }
+
+    @Column(name = "FILE_PATH")
+    public String getFilePath() {
+        return filePath;
+    }
+
+    public void setFilePath(String filePath) {
+        this.filePath = filePath;
+    }
+
+    @Column(name = "CREATION_TIME")
+    public Timestamp getCreationTime() {
+        return creationTime;
+    }
+
+    public void setCreationTime(Timestamp creationTime) {
+        this.creationTime = creationTime;
+    }
+
+    @Column(name = "LAST_MODIFIED_TIME")
+    public Timestamp getLastModifiedTime() {
+        return lastModifiedTime;
+    }
+
+    public void setLastModifiedTime(Timestamp lastModifiedTime) {
+        this.lastModifiedTime = lastModifiedTime;
+    }
+
+    @Column(name = "VALID_UNTIL_TIME")
+    public Timestamp getValidUntilTime() {
+        return validUntilTime;
+    }
+
+    public void setValidUntilTime(Timestamp validUntilTime) {
+        this.validUntilTime = validUntilTime;
+    }
+
+
+    @Column(name = "REPLICA_LOCATION_CATEGORY")
+    public String getReplicaLocationCategory() {
+        return replicaLocationCategory;
+    }
+
+    public void setReplicaLocationCategory(String replicaLocationCategory) {
+        this.replicaLocationCategory = replicaLocationCategory;
+    }
+
+    @Column(name = "REPLICA_PERSISTENT_TYPE")
+    public String getReplicaPersistentType() {
+        return replicaPersistentType;
+    }
+
+    public void setReplicaPersistentType(String replicaPersistentType) {
+        this.replicaPersistentType = replicaPersistentType;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "PRODUCT_URI", referencedColumnName = "PRODUCT_URI")
+    public DataProduct getDataProduct() {
+        return dataProduct;
+    }
+
+    public void setDataProduct(DataProduct dataProduct) {
+        this.dataProduct = dataProduct;
+    }
+
+    @OneToMany(mappedBy = "dataReplicaLocation", cascade = {CascadeType.ALL})
+    public Collection<DataReplicaMetaData> getDataReplicaMetaData() {
+        return dataReplicaMetaData;
+    }
+
+    public void setDataReplicaMetaData(Collection<DataReplicaMetaData> 
dataReplicaMetaData) {
+        this.dataReplicaMetaData = dataReplicaMetaData;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData.java
new file mode 100644
index 0000000..2f00321
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData.java
@@ -0,0 +1,77 @@
+/*
+ *
+ * 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.replica.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "DATA_REPLICA_METADATA")
+@IdClass(DataReplicaMetaData_PK.class)
+public class DataReplicaMetaData {
+    private final static Logger logger = 
LoggerFactory.getLogger(DataReplicaMetaData.class);
+    private String replicaId;
+    private String key;
+    private String value;
+
+    private DataReplicaLocation dataReplicaLocation;
+
+    @Id
+    @Column(name = "REPLICA_ID")
+    public String getReplicaId() {
+        return replicaId;
+    }
+
+    public void setReplicaId(String replicaId) {
+        this.replicaId = replicaId;
+    }
+
+    @Id
+    @Column(name = "METADATA_KEY")
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    @Column(name = "METADATA_VALUE")
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @ManyToOne
+    @JoinColumn(name = "REPLICA_ID", referencedColumnName = "REPLICA_ID")
+    public DataReplicaLocation getDataReplicaLocation() {
+        return dataReplicaLocation;
+    }
+
+    public void setDataReplicaLocation(DataReplicaLocation 
dataReplicaLocation) {
+        this.dataReplicaLocation = dataReplicaLocation;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData_PK.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData_PK.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData_PK.java
new file mode 100644
index 0000000..86133c2
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/model/DataReplicaMetaData_PK.java
@@ -0,0 +1,59 @@
+/*
+ *
+ * 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.replica.catalog.model;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Serializable;
+
+public class DataReplicaMetaData_PK implements Serializable {
+    private final static Logger logger = 
LoggerFactory.getLogger(DataReplicaMetaData_PK.class);
+
+    private String replicaId;
+    private String key;
+
+    public String getReplicaId() {
+        return replicaId;
+    }
+
+    public void setReplicaId(String replicaId) {
+        this.replicaId = replicaId;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        return 1;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogConstants.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogConstants.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogConstants.java
new file mode 100644
index 0000000..5d9d4ec
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogConstants.java
@@ -0,0 +1,49 @@
+/*
+ *
+ * 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.replica.catalog.utils;
+
+public class ReplicaCatalogConstants {
+       // table names
+       public static final String DATA_RESOURCE = "DataProduct";
+       public static final String DATA_REPLICA_LOCATION = 
"DataReplicaLocation";
+       public static final String CONFIGURATION = "Configuration";
+
+       // DataProduct Table
+       public final class DataResourceConstants {
+               public static final String RESOURCE_ID = "resourceId";
+               public static final String RESOURCE_NAME = "resourceName";
+               public static final String RESOURCE_DESCRIPTION = 
"resourceDescription";
+               public static final String RESOURCE_SIZE = "resourceSize";
+        public static final String CREATION_TIME = "creationTime";
+        public static final String LAST_MODIFIED_TIME = "lastModifiedTime";
+       }
+
+       // Users table
+       public final class DataReplicaLocationConstants {
+        public static final String REPLICA_ID = "replicaId";
+        public static final String RESOURCE_ID = "resourceId";
+        public static final String DATA_LOCATIONS = "dataLocations";
+        public static final String REPLICA_NAME = "replicaName";
+        public static final String REPLICA_DESCRIPTION = "replicaDescription";
+        public static final String CREATION_TIME = "creationTime";
+        public static final String LAST_MODIFIED_TIME = "lastModifiedTime";
+       }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogJPAUtils.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogJPAUtils.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogJPAUtils.java
new file mode 100644
index 0000000..21b3e17
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogJPAUtils.java
@@ -0,0 +1,82 @@
+/*
+ *
+ * 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.replica.catalog.utils;
+
+import org.apache.airavata.common.exception.ApplicationSettingsException;
+import org.apache.airavata.common.utils.ServerSettings;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.*;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ReplicaCatalogJPAUtils {
+    private final static Logger logger = 
LoggerFactory.getLogger(ReplicaCatalogJPAUtils.class);
+
+    private static final String PERSISTENCE_UNIT_NAME = "datacatalog_data";
+    private static final String DATACATALOG_JDBC_DRIVER = 
"datacatalog.jdbc.driver";
+    private static final String DATACATALOG_JDBC_URL = "datacatalog.jdbc.url";
+    private static final String DATACATALOG_JDBC_USER = 
"datacatalog.jdbc.user";
+    private static final String DATACATALOG_JDBC_PWD = 
"datacatalog.jdbc.password";
+    private static final String DATACATALOG_VALIDATION_QUERY = 
"datacatalog.validationQuery";
+
+    @PersistenceUnit(unitName="datacatalog_data")
+    protected static EntityManagerFactory factory;
+
+    @PersistenceContext(unitName="datacatalog_data")
+    private static EntityManager dataCatEntityManager;
+
+    public static EntityManager getEntityManager() throws 
ApplicationSettingsException {
+        if (factory == null) {
+            String connectionProperties = "DriverClassName=" + 
readServerProperties(DATACATALOG_JDBC_DRIVER) + "," +
+                    "Url=" + readServerProperties(DATACATALOG_JDBC_URL) + 
"?autoReconnect=true," +
+                    "Username=" + readServerProperties(DATACATALOG_JDBC_USER) 
+ "," +
+                    "Password=" + readServerProperties(DATACATALOG_JDBC_PWD) +
+                    ",validationQuery=" + 
readServerProperties(DATACATALOG_VALIDATION_QUERY);
+            System.out.println(connectionProperties);
+            Map<String, String> properties = new HashMap<String, String>();
+            properties.put("openjpa.ConnectionDriverName", 
"org.apache.commons.dbcp.BasicDataSource");
+            properties.put("openjpa.ConnectionProperties", 
connectionProperties);
+            properties.put("openjpa.DynamicEnhancementAgent", "true");
+            properties.put("openjpa.RuntimeUnenhancedClasses", "unsupported");
+            properties.put("openjpa.RemoteCommitProvider","sjvm");
+            properties.put("openjpa.Log","DefaultLevel=INFO, Runtime=INFO, 
Tool=INFO, SQL=INFO");
+            properties.put("openjpa.jdbc.SynchronizeMappings", 
"buildSchema(ForeignKeys=true)");
+            properties.put("openjpa.jdbc.QuerySQLCache", "false");
+            properties.put("openjpa.ConnectionFactoryProperties", 
"PrettyPrint=true, PrettyPrintLineLength=72," +
+                    " PrintParameters=true, MaxActive=10, MaxIdle=5, 
MinIdle=2, MaxWait=31536000,  autoReconnect=true");
+            factory = 
Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME, properties);
+        }
+        dataCatEntityManager = factory.createEntityManager();
+        return dataCatEntityManager;
+    }
+
+    private static String readServerProperties (String propertyName) throws 
ApplicationSettingsException {
+        try {
+            return ServerSettings.getSetting(propertyName);
+        } catch (ApplicationSettingsException e) {
+            logger.error("Unable to read airavata-server.properties...", e);
+            throw new ApplicationSettingsException("Unable to read 
airavata-server.properties...");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/04f6f593/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogQueryGenerator.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogQueryGenerator.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogQueryGenerator.java
new file mode 100644
index 0000000..da102a9
--- /dev/null
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/replica/catalog/utils/ReplicaCatalogQueryGenerator.java
@@ -0,0 +1,111 @@
+/*
+ *
+ * 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.replica.catalog.utils;
+
+import org.apache.airavata.registry.cpi.ResultOrderType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ReplicaCatalogQueryGenerator {
+
+    private final static Logger logger = 
LoggerFactory.getLogger(ReplicaCatalogQueryGenerator.class);
+       private String tableName;
+       private Map<String,Object> matches=new HashMap<String, Object>();
+       private static final String SELECT_OBJ="p";
+       private static final String DELETE_OBJ="p";
+       private static final String TABLE_OBJ="p";
+
+       public ReplicaCatalogQueryGenerator(String tableName, Object[]... 
params) {
+               setTableName(tableName);
+               for (Object[] param : params) {
+                       addMatch(param[0].toString(), param[1]);
+               }
+       }
+       
+       public String getTableName() {
+               return tableName;
+       }
+
+    public void setTableName(String tableName) {
+               this.tableName = tableName;
+       }
+
+    public void addMatch(String colName, Object matchValue){
+               matches.put(colName, matchValue);
+       }
+       
+       public void setParameter(String colName, Object matchValue){
+               addMatch(colName, matchValue);
+       }
+
+    public Query selectQuery(EntityManager entityManager){
+        String queryString="SELECT "+ SELECT_OBJ + " FROM " +getTableName()+" 
"+TABLE_OBJ;
+        return generateQueryWithParameters(entityManager, queryString);
+    }
+
+    public Query selectQuery(EntityManager entityManager, String orderByColumn,
+                             ResultOrderType resultOrderType){
+        String order = (resultOrderType == ResultOrderType.ASC) ? "ASC" : 
"DESC";
+        String orderByClause = " ORDER BY " + SELECT_OBJ + "." + orderByColumn 
+ " " + order;
+        String queryString="SELECT "+ SELECT_OBJ + " FROM " +getTableName()+" 
"+TABLE_OBJ;
+        return generateQueryWithParameters(entityManager, queryString, 
orderByClause);
+    }
+
+       public Query deleteQuery(EntityManager entityManager){
+               String queryString="Delete FROM "+getTableName()+" "+TABLE_OBJ;
+               return generateQueryWithParameters(entityManager, queryString);
+       }
+
+       private Query generateQueryWithParameters(EntityManager entityManager, 
String queryString) {
+               return generateQueryWithParameters(entityManager, queryString, 
"");
+       }
+
+    private Query generateQueryWithParameters(EntityManager entityManager,
+                                              String queryString, String 
orderByClause) {
+        Map<String,Object> queryParameters=new HashMap<String, Object>();
+        if (matches.size()>0){
+            String matchString = "";
+            int paramCount=0;
+            for (String colName : matches.keySet()) {
+                String paramName="param"+paramCount;
+                queryParameters.put(paramName, matches.get(colName));
+                if (!matchString.equals("")){
+                    matchString+=" AND ";
+                }
+                matchString+=TABLE_OBJ+"."+colName+" =:"+paramName;
+                paramCount++;
+            }
+            queryString+=" WHERE "+matchString;
+        }
+        queryString += orderByClause;
+        Query query = entityManager.createQuery(queryString);
+        for (String paramName : queryParameters.keySet()) {
+            query.setParameter(paramName, queryParameters.get(paramName));
+        }
+        return query;
+    }
+}

Reply via email to