Repository: airavata
Updated Branches:
  refs/heads/develop 0d9a61264 -> 5870ed4ff


http://git-wip-us.apache.org/repos/asf/airavata/blob/6242acac/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/impl/DataCatalogImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/impl/DataCatalogImpl.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/impl/DataCatalogImpl.java
index 98dc8c3..2fddfc6 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/impl/DataCatalogImpl.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/impl/DataCatalogImpl.java
@@ -23,6 +23,7 @@ package org.apache.airavata.registry.core.data.catalog.impl;
 
 import org.apache.airavata.model.data.resource.DataReplicaLocationModel;
 import org.apache.airavata.model.data.resource.DataResourceModel;
+import 
org.apache.airavata.registry.core.data.catalog.model.DataReplicaLocation;
 import org.apache.airavata.registry.core.data.catalog.model.DataResource;
 import 
org.apache.airavata.registry.core.data.catalog.utils.DataCatalogJPAUtils;
 import 
org.apache.airavata.registry.core.data.catalog.utils.ThriftDataModelConversion;
@@ -32,6 +33,9 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import javax.persistence.EntityManager;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.UUID;
 
 public class DataCatalogImpl implements DataCatalog {
@@ -42,10 +46,6 @@ public class DataCatalogImpl implements DataCatalog {
     public String publishResource(DataResourceModel resourceModel) throws 
DataCatalogException {
         String resourceId = UUID.randomUUID().toString();
         resourceModel.setResourceId(resourceId);
-        for(DataReplicaLocationModel replicaLocationModel : 
resourceModel.getReplicaLocations()){
-            replicaLocationModel.setReplicaId(UUID.randomUUID().toString());
-            replicaLocationModel.setResourceId(resourceId);
-        }
         DataResource dataResource = 
ThriftDataModelConversion.getDataResource(resourceModel);
         EntityManager em = null;
         try {
@@ -102,15 +102,8 @@ public class DataCatalogImpl implements DataCatalog {
             DataResource dataResource = em.find(DataResource.class, 
resourceModel.getResourceId());
             if(dataResource == null)
                 return false;
-            //FIXME - Every time we delete and create
             em.getTransaction().begin();
-            em.remove(dataResource);
-            em.flush();
-            resourceModel.getReplicaLocations().stream().forEach(rl->{
-                rl.setReplicaId(UUID.randomUUID().toString());
-                rl.setResourceId(resourceModel.getResourceId());
-            });
-            
em.persist(ThriftDataModelConversion.getDataResource(resourceModel));
+            
em.merge(ThriftDataModelConversion.getUpdatedDataResource(resourceModel, 
dataResource));
             em.getTransaction().commit();
             em.close();
         } catch (Exception e) {
@@ -146,4 +139,127 @@ public class DataCatalogImpl implements DataCatalog {
             }
         }
     }
+
+    @Override
+    public String publishReplicaLocation(DataReplicaLocationModel 
dataReplicaLocationModel) throws DataCatalogException {
+        String replicaId = UUID.randomUUID().toString();
+        dataReplicaLocationModel.setReplicaId(replicaId);
+        DataReplicaLocation replicaLocation = 
ThriftDataModelConversion.getDataReplicaLocation(dataReplicaLocationModel);
+        EntityManager em = null;
+        try {
+            em = DataCatalogJPAUtils.getEntityManager();
+            em.getTransaction().begin();
+            em.persist(replicaLocation);
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new DataCatalogException(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 
DataCatalogException {
+        EntityManager em = null;
+        try {
+            em = DataCatalogJPAUtils.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 DataCatalogException(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 DataCatalogException {
+        EntityManager em = null;
+        try {
+            em = DataCatalogJPAUtils.getEntityManager();
+            DataReplicaLocation dataReplicaLocation = 
em.find(DataReplicaLocation.class, dataReplicaLocationModel.getReplicaId());
+            if(dataReplicaLocation == null)
+                return false;
+            em.getTransaction().begin();
+            
em.merge(ThriftDataModelConversion.getUpdatedDataReplicaLocation(dataReplicaLocationModel,
 dataReplicaLocation));
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new DataCatalogException(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 DataCatalogException {
+        EntityManager em = null;
+        try {
+            em = DataCatalogJPAUtils.getEntityManager();
+            DataReplicaLocation replicaLocation = 
em.find(DataReplicaLocation.class, replicaId);
+            return 
ThriftDataModelConversion.getDataReplicaLocationModel(replicaLocation);
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new DataCatalogException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+    }
+
+    @Override
+    public List<DataReplicaLocationModel> getAllReplicaLocations(String 
resourceId) throws DataCatalogException {
+        EntityManager em = null;
+        try {
+            em = DataCatalogJPAUtils.getEntityManager();
+            DataResource dataResource = em.find(DataResource.class, 
resourceId);
+            if(dataResource == null)
+                return null;
+            ArrayList<DataReplicaLocationModel> dataReplicaLocationModels = 
new ArrayList<>();
+            
dataResource.getDataReplicaLocations().stream().forEach(rl->dataReplicaLocationModels
+                    
.add(ThriftDataModelConversion.getDataReplicaLocationModel(rl)));
+            return dataReplicaLocationModels;
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new DataCatalogException(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/6242acac/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/model/DataReplicaLocation.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/model/DataReplicaLocation.java
 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/model/DataReplicaLocation.java
index 16db298..7add6b5 100644
--- 
a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/model/DataReplicaLocation.java
+++ 
b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/data/catalog/model/DataReplicaLocation.java
@@ -30,6 +30,7 @@ import java.sql.Timestamp;
 @Table(name = "DATA_REPLICA_LOCATION")
 public class DataReplicaLocation {
     private final static Logger logger = 
LoggerFactory.getLogger(DataReplicaLocation.class);
+    private String replicaId;
     private String resourceId;
     private String replicaName;
     private String replicaDescription;
@@ -39,6 +40,16 @@ public class DataReplicaLocation {
 
     private DataResource dataResource;
 
+    @Id
+    @Column(name = "REPLICA_ID")
+    public String getReplicaId() {
+        return replicaId;
+    }
+
+    public void setReplicaId(String replicaId) {
+        this.replicaId = replicaId;
+    }
+
     @Column(name = "RESOURCE_ID")
     public String getResourceId() {
         return resourceId;

http://git-wip-us.apache.org/repos/asf/airavata/blob/6242acac/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
index 2ec041e..6be55c3 100644
--- 
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
@@ -30,8 +30,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.sql.Timestamp;
-import java.util.List;
-import java.util.stream.Collectors;
 
 public class ThriftDataModelConversion {
 
@@ -46,8 +44,6 @@ public class ThriftDataModelConversion {
             dataResourceModel.setResourceSize(dataResource.getResourceSize());
             
dataResourceModel.setCreationTime(dataResource.getCreationTime().getTime());
             
dataResourceModel.setLastModifiedTime(dataResource.getLastModifiedTime().getTime());
-            
dataResource.getDataReplicaLocations().stream().forEach(rl->dataResourceModel
-                    .addToReplicaLocations(getDataReplicaLocationModel(rl)));
             return dataResourceModel;
         }
         return null;
@@ -56,23 +52,25 @@ public class ThriftDataModelConversion {
     public static DataResource getDataResource(DataResourceModel 
dataResourceModel){
         if(dataResourceModel != null){
             DataResource dataResource = new DataResource();
-            dataResource.setResourceId(dataResourceModel.getResourceId());
-            dataResource.setResourceName(dataResourceModel.getResourceName());
-            
dataResource.setResourceDescription(dataResourceModel.getResourceDescription());
-            dataResource.setResourceSize(dataResourceModel.getResourceSize());
-            dataResource.setCreationTime(new 
Timestamp(dataResourceModel.getCreationTime()));
-            dataResource.setLastModifiedTime(new 
Timestamp(dataResourceModel.getLastModifiedTime()));
-            List<DataReplicaLocation> replicaLocationList = 
dataResourceModel.getReplicaLocations()
-                    
.stream().map(ThriftDataModelConversion::getDataReplicaLocation).collect(Collectors.toList());
-            dataResource.setDataReplicaLocations(replicaLocationList);
-            return dataResource;
+            return getUpdatedDataResource(dataResourceModel, dataResource);
         }
         return null;
     }
 
+    public static DataResource getUpdatedDataResource(DataResourceModel 
dataResourceModel, DataResource dataResource){
+        dataResource.setResourceId(dataResourceModel.getResourceId());
+        dataResource.setResourceName(dataResourceModel.getResourceName());
+        
dataResource.setResourceDescription(dataResourceModel.getResourceDescription());
+        dataResource.setResourceSize(dataResourceModel.getResourceSize());
+        dataResource.setCreationTime(new 
Timestamp(dataResourceModel.getCreationTime()));
+        dataResource.setLastModifiedTime(new 
Timestamp(dataResourceModel.getLastModifiedTime()));
+        return dataResource;
+    }
+
     public static DataReplicaLocationModel 
getDataReplicaLocationModel(DataReplicaLocation replicaLocation){
         if (replicaLocation != null) {
             DataReplicaLocationModel replicaLocationModel = new 
DataReplicaLocationModel();
+            replicaLocationModel.setReplicaId(replicaLocation.getReplicaId());
             
replicaLocationModel.setResourceId(replicaLocation.getResourceId());
             
replicaLocationModel.setReplicaName(replicaLocation.getReplicaName());
             
replicaLocationModel.setReplicaDescription(replicaLocation.getReplicaDescription());
@@ -92,14 +90,20 @@ public class ThriftDataModelConversion {
     public static DataReplicaLocation 
getDataReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel){
         if(dataReplicaLocationModel != null){
             DataReplicaLocation dataReplicaLocation = new 
DataReplicaLocation();
-            
dataReplicaLocation.setResourceId(dataReplicaLocationModel.getResourceId());
-            
dataReplicaLocation.setReplicaName(dataReplicaLocationModel.getReplicaName());
-            
dataReplicaLocation.setReplicaDescription(dataReplicaLocationModel.getReplicaDescription());
-            
dataReplicaLocation.setDataLocations(StringUtils.join(dataReplicaLocationModel.getDataLocations(),
 ','));
-            dataReplicaLocation.setCreationTime(new 
Timestamp(dataReplicaLocationModel.getCreationTime()));
-            dataReplicaLocation.setLastModifiedTime(new 
Timestamp(dataReplicaLocationModel.getLastModifiedTime()));
-            return dataReplicaLocation;
+            return getUpdatedDataReplicaLocation(dataReplicaLocationModel, 
dataReplicaLocation);
         }
         return null;
     }
+
+    public static DataReplicaLocation 
getUpdatedDataReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel,
+                                                                    
DataReplicaLocation dataReplicaLocation){
+        
dataReplicaLocation.setReplicaId(dataReplicaLocationModel.getReplicaId());
+        
dataReplicaLocation.setResourceId(dataReplicaLocationModel.getResourceId());
+        
dataReplicaLocation.setReplicaName(dataReplicaLocationModel.getReplicaName());
+        
dataReplicaLocation.setReplicaDescription(dataReplicaLocationModel.getReplicaDescription());
+        
dataReplicaLocation.setDataLocations(StringUtils.join(dataReplicaLocationModel.getDataLocations(),
 ','));
+        dataReplicaLocation.setCreationTime(new 
Timestamp(dataReplicaLocationModel.getCreationTime()));
+        dataReplicaLocation.setLastModifiedTime(new 
Timestamp(dataReplicaLocationModel.getLastModifiedTime()));
+        return dataReplicaLocation;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/6242acac/modules/registry/registry-core/src/main/resources/datacatalog-derby.sql
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/main/resources/datacatalog-derby.sql 
b/modules/registry/registry-core/src/main/resources/datacatalog-derby.sql
index 3091447..ef4a777 100644
--- a/modules/registry/registry-core/src/main/resources/datacatalog-derby.sql
+++ b/modules/registry/registry-core/src/main/resources/datacatalog-derby.sql
@@ -26,22 +26,23 @@ CREATE TABLE DATA_RESOURCE
         RESOURCE_DESCRIPTION VARCHAR (1024),
         RESOURCE_SIZE INTEGER ,
         CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-        LAST_MODIFIED_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+        LAST_MODIFIED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
         PRIMARY KEY (RESOURCE_ID)
 );
 
 CREATE TABLE DATA_REPLICA_LOCATION
 (
-        RESOURCE_ID VARCHAR (255),
+        REPLICA_ID VARCHAR (255),
+        RESOURCE_ID VARCHAR (255) NOT NULL,
         REPLICA_NAME VARCHAR (255),
         REPLICA_DESCRIPTION VARCHAR (1024),
         DATA_LOCATIONS VARCHAR (4096),
         CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-        LAST_MODIFIED_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+        LAST_MODIFIED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
+        PRIMARY KEY (REPLICA_ID),
         FOREIGN KEY (RESOURCE_ID) REFERENCES DATA_RESOURCE(RESOURCE_ID) ON 
DELETE CASCADE
 );
 
-
 CREATE TABLE CONFIGURATION
 (
         CONFIG_KEY VARCHAR(255),

http://git-wip-us.apache.org/repos/asf/airavata/blob/6242acac/modules/registry/registry-core/src/test/java/org/apache/airavata/data/catalog/DataCatalogTest.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/test/java/org/apache/airavata/data/catalog/DataCatalogTest.java
 
b/modules/registry/registry-core/src/test/java/org/apache/airavata/data/catalog/DataCatalogTest.java
index 1eb1a25..089e03e 100644
--- 
a/modules/registry/registry-core/src/test/java/org/apache/airavata/data/catalog/DataCatalogTest.java
+++ 
b/modules/registry/registry-core/src/test/java/org/apache/airavata/data/catalog/DataCatalogTest.java
@@ -23,6 +23,7 @@ package org.apache.airavata.data.catalog;
 import org.apache.airavata.data.catalog.util.Initialize;
 import org.apache.airavata.model.data.resource.DataReplicaLocationModel;
 import org.apache.airavata.model.data.resource.DataResourceModel;
+import 
org.apache.airavata.registry.core.data.catalog.model.DataReplicaLocation;
 import 
org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory;
 import org.apache.airavata.registry.cpi.DataCatalog;
 import org.apache.airavata.registry.cpi.DataCatalogException;
@@ -39,6 +40,7 @@ public class DataCatalogTest {
     private static Initialize initialize;
     private static DataCatalog datacatalog;
     private static DataResourceModel dataResourceModel;
+    private static DataReplicaLocationModel replicaLocationModel;
 
     @BeforeClass
     public static void setUp() {
@@ -49,14 +51,12 @@ public class DataCatalogTest {
             datacatalog = RegistryFactory.getDataCatalog();
             dataResourceModel = new DataResourceModel();
             dataResourceModel.setResourceName("test-file.txt");
-            List<DataReplicaLocationModel> replicaLocationModelList = new 
ArrayList<>();
-            DataReplicaLocationModel dataReplicaLocationModel = new 
DataReplicaLocationModel();
-            dataReplicaLocationModel.setReplicaName("1-st-replica");
+
+            replicaLocationModel = new DataReplicaLocationModel();
+            replicaLocationModel.setReplicaName("1-st-replica");
             ArrayList<String> dataLocations = new ArrayList<>();
             
dataLocations.add("scp://g75.iu.xsede.org:/var/www/portal/experimentData/test-file.txt");
-            dataReplicaLocationModel.setDataLocations(dataLocations);
-            replicaLocationModelList.add(dataReplicaLocationModel);
-            dataResourceModel.setReplicaLocations(replicaLocationModelList);
+            replicaLocationModel.setDataLocations(dataLocations);
         } catch (DataCatalogException e) {
             logger.error(e.getMessage(), e);
         }
@@ -75,6 +75,7 @@ public class DataCatalogTest {
             org.junit.Assert.assertNotNull(resourceId);
         } catch (DataCatalogException e) {
             e.printStackTrace();
+            Assert.fail();
         }
     }
 
@@ -91,6 +92,7 @@ public class DataCatalogTest {
             Assert.assertFalse(result);
         } catch (DataCatalogException e) {
             e.printStackTrace();
+            Assert.fail();
         }
     }
 
@@ -101,9 +103,9 @@ public class DataCatalogTest {
             Assert.assertNotNull(resourceId);
             DataResourceModel persistedCopy = 
datacatalog.getResource(resourceId);
             Assert.assertNotNull(persistedCopy);
-            Assert.assertTrue(persistedCopy.getReplicaLocations().size()==1);
         } catch (DataCatalogException e) {
             e.printStackTrace();
+            Assert.fail();
         }
     }
 
@@ -114,20 +116,87 @@ public class DataCatalogTest {
             boolean result = datacatalog.updateResource(dataResourceModel);
             Assert.assertFalse(result);
             datacatalog.publishResource(dataResourceModel);
-            DataReplicaLocationModel dataReplicaLocationModel = new 
DataReplicaLocationModel();
-            dataReplicaLocationModel.setReplicaName("2-nd-replica");
-            ArrayList<String> dataLocations = new ArrayList<>();
-            
dataLocations.add("scp://g175.iu.xsede.org:/var/www/portal/experimentData/test-file.txt");
-            
dataResourceModel.getReplicaLocations().add(dataReplicaLocationModel);
-            datacatalog.updateResource(dataResourceModel);
-            dataResourceModel = 
datacatalog.getResource(dataResourceModel.getResourceId());
-            
Assert.assertTrue(dataResourceModel.getReplicaLocations().size()==2);
-            dataResourceModel.getReplicaLocations().remove(1);
+            dataResourceModel.setResourceName("updated-name");
             datacatalog.updateResource(dataResourceModel);
             dataResourceModel = 
datacatalog.getResource(dataResourceModel.getResourceId());
-            
Assert.assertTrue(dataResourceModel.getReplicaLocations().size()==1);
+            
Assert.assertTrue(dataResourceModel.getResourceName().equals("updated-name"));
+        } catch (DataCatalogException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testPublishReplicaLocation(){
+        try {
+            String resourceId = datacatalog.publishResource(dataResourceModel);
+            replicaLocationModel.setResourceId(resourceId);
+            String replicaId = 
datacatalog.publishReplicaLocation(replicaLocationModel);
+            org.junit.Assert.assertNotNull(replicaId);
+        } catch (DataCatalogException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testRemoveReplicaLocation(){
+        try {
+            String resourceId = datacatalog.publishResource(dataResourceModel);
+            replicaLocationModel.setResourceId(resourceId);
+            String replicaId = 
datacatalog.publishReplicaLocation(replicaLocationModel);
+            boolean result = datacatalog.removeReplicaLocation(replicaId);
+            Assert.assertTrue(result);
+            result = 
datacatalog.removeReplicaLocation(replicaLocationModel.getReplicaId());
+            Assert.assertFalse(result);
+        } catch (DataCatalogException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testGetReplicaLocation(){
+        try {
+            String resourceId = datacatalog.publishResource(dataResourceModel);
+            replicaLocationModel.setResourceId(resourceId);
+            String replicaId = 
datacatalog.publishReplicaLocation(replicaLocationModel);
+            DataReplicaLocationModel persistedCopy = 
datacatalog.getReplicaLocation(replicaId);
+            Assert.assertNotNull(persistedCopy);
+        } catch (DataCatalogException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testUpdateReplicaLocation(){
+        try {
+            String resourceId = datacatalog.publishResource(dataResourceModel);
+            replicaLocationModel.setResourceId(resourceId);
+            String replicaId = 
datacatalog.publishReplicaLocation(replicaLocationModel);
+            DataReplicaLocationModel persistedCopy = 
datacatalog.getReplicaLocation(replicaId);
+            persistedCopy.setReplicaDescription("updated-description");
+            datacatalog.updateReplicaLocation(persistedCopy);
+            persistedCopy = datacatalog.getReplicaLocation(replicaId);
+            
Assert.assertTrue(persistedCopy.getReplicaDescription().equals("updated-description"));
+        } catch (DataCatalogException e) {
+            e.printStackTrace();
+            Assert.fail();
+        }
+    }
+
+    @Test
+    public void testGetAllReplicaLocations(){
+        try {
+            String resourceId = datacatalog.publishResource(dataResourceModel);
+            replicaLocationModel.setResourceId(resourceId);
+            String replicaId = 
datacatalog.publishReplicaLocation(replicaLocationModel);
+            List<DataReplicaLocationModel> replicaLocationModelList = 
datacatalog.getAllReplicaLocations(resourceId);
+            
Assert.assertTrue(replicaLocationModelList.get(0).getReplicaId().equals(replicaId));
         } catch (DataCatalogException e) {
             e.printStackTrace();
+            Assert.fail();
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/6242acac/modules/registry/registry-core/src/test/resources/datacatalog-derby.sql
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-core/src/test/resources/datacatalog-derby.sql 
b/modules/registry/registry-core/src/test/resources/datacatalog-derby.sql
index 3091447..ef4a777 100644
--- a/modules/registry/registry-core/src/test/resources/datacatalog-derby.sql
+++ b/modules/registry/registry-core/src/test/resources/datacatalog-derby.sql
@@ -26,22 +26,23 @@ CREATE TABLE DATA_RESOURCE
         RESOURCE_DESCRIPTION VARCHAR (1024),
         RESOURCE_SIZE INTEGER ,
         CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-        LAST_MODIFIED_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+        LAST_MODIFIED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
         PRIMARY KEY (RESOURCE_ID)
 );
 
 CREATE TABLE DATA_REPLICA_LOCATION
 (
-        RESOURCE_ID VARCHAR (255),
+        REPLICA_ID VARCHAR (255),
+        RESOURCE_ID VARCHAR (255) NOT NULL,
         REPLICA_NAME VARCHAR (255),
         REPLICA_DESCRIPTION VARCHAR (1024),
         DATA_LOCATIONS VARCHAR (4096),
         CREATION_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-        LAST_MODIFIED_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+        LAST_MODIFIED_TIME TIMESTAMP DEFAULT '0000-00-00 00:00:00',
+        PRIMARY KEY (REPLICA_ID),
         FOREIGN KEY (RESOURCE_ID) REFERENCES DATA_RESOURCE(RESOURCE_ID) ON 
DELETE CASCADE
 );
 
-
 CREATE TABLE CONFIGURATION
 (
         CONFIG_KEY VARCHAR(255),

http://git-wip-us.apache.org/repos/asf/airavata/blob/6242acac/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/DataCatalog.java
----------------------------------------------------------------------
diff --git 
a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/DataCatalog.java
 
b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/DataCatalog.java
index c2d3756..bc468d6 100644
--- 
a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/DataCatalog.java
+++ 
b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/DataCatalog.java
@@ -21,6 +21,8 @@ package org.apache.airavata.registry.cpi;
 
 import org.apache.airavata.model.data.resource.*;
 
+import java.util.List;
+
 public interface DataCatalog {
 
     String publishResource(DataResourceModel resource) throws 
DataCatalogException;
@@ -30,4 +32,14 @@ public interface DataCatalog {
     boolean updateResource(DataResourceModel resource) throws 
DataCatalogException;
 
     DataResourceModel getResource(String resourceId) throws 
DataCatalogException;
+
+    String publishReplicaLocation(DataReplicaLocationModel 
dataReplicaLocationModel) throws DataCatalogException;
+
+    boolean removeReplicaLocation(String replicaId) throws 
DataCatalogException;
+
+    boolean updateReplicaLocation(DataReplicaLocationModel 
dataReplicaLocationModel) throws DataCatalogException;
+
+    DataReplicaLocationModel getReplicaLocation(String replicaId) throws 
DataCatalogException;
+
+    List<DataReplicaLocationModel> getAllReplicaLocations(String resourceId) 
throws DataCatalogException;
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/6242acac/thrift-interface-descriptions/airavata-api/data_resource_models.thrift
----------------------------------------------------------------------
diff --git 
a/thrift-interface-descriptions/airavata-api/data_resource_models.thrift 
b/thrift-interface-descriptions/airavata-api/data_resource_models.thrift
index 0ead838..96b6757 100644
--- a/thrift-interface-descriptions/airavata-api/data_resource_models.thrift
+++ b/thrift-interface-descriptions/airavata-api/data_resource_models.thrift
@@ -29,8 +29,7 @@ struct DataResourceModel {
     3: optional string resourceDescription,
     4: optional i32 resourceSize,
     5: optional i64 creationTime,
-    6: optional i64 lastModifiedTime,
-    7: list<DataReplicaLocationModel> replicaLocations
+    6: optional i64 lastModifiedTime
 }
 
 struct DataReplicaLocationModel {

Reply via email to