You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sc...@apache.org on 2016/03/23 20:56:11 UTC
airavata git commit: creating parent logical dir when creating
replicas
Repository: airavata
Updated Branches:
refs/heads/develop a23cc639e -> 5e9bf914c
creating parent logical dir when creating replicas
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/5e9bf914
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/5e9bf914
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/5e9bf914
Branch: refs/heads/develop
Commit: 5e9bf914c251ac5cd36f8718417bbe4d7ba4f1fe
Parents: a23cc63
Author: scnakandala <su...@gmail.com>
Authored: Wed Mar 23 15:56:05 2016 -0400
Committer: scnakandala <su...@gmail.com>
Committed: Wed Mar 23 15:56:05 2016 -0400
----------------------------------------------------------------------
.../core/data/catalog/impl/DataCatalogImpl.java | 59 +++++++++++++++++++-
.../airavata/data/catalog/DataCatalogTest.java | 6 +-
.../airavata/registry/cpi/DataCatalog.java | 2 +
3 files changed, 62 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/5e9bf914/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 308abfc..27e6976 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
@@ -34,6 +34,8 @@ 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;
@@ -54,6 +56,37 @@ public class DataCatalogImpl implements DataCatalog {
productModel.setLogicalPath(productModel.getLogicalPath()+"/");
productModel.setLogicalPath(productModel.getLogicalPath()+productModel.getProductName());
}
+ //Creating parent logical dir if not exist too
+ String parentUri = DataCatalog.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 DataCatalogException(e);
+ }
+ tempDp.setProductUri(parentUri + dir);
+ tempDp.setOwnerName(productModel.getOwnerName());
+ tempDp.setGatewayId(productModel.getGatewayId());
+ tempDp.setDataProductType(DataProductType.DIR);
+ tempDp.setParentProductUri(parentUri);
+ parentUri = createDataProduct(tempDp);
+ }
+ }
+
String productUri = DataCatalog.schema + "://" + productModel.getOwnerName() + "@" + productModel.getGatewayId()
+ productModel.getLogicalPath();
productModel.setProductUri(productUri);
@@ -70,6 +103,10 @@ public class DataCatalogImpl implements DataCatalog {
}
productModel.setCreationTime(System.currentTimeMillis());
productModel.setLastModifiedTime(System.currentTimeMillis());
+ return createDataProduct(productModel);
+ }
+
+ private String createDataProduct(DataProductModel productModel) throws DataCatalogException {
DataProduct dataProduct = ThriftDataModelConversion.getDataProduct(productModel);
EntityManager em = null;
try {
@@ -89,7 +126,7 @@ public class DataCatalogImpl implements DataCatalog {
em.close();
}
}
- return productUri;
+ return dataProduct.getProductUri();
}
@Override
@@ -167,6 +204,26 @@ public class DataCatalogImpl implements DataCatalog {
}
@Override
+ public boolean isExists(String productUri) throws DataCatalogException {
+ EntityManager em = null;
+ try {
+ em = DataCatalogJPAUtils.getEntityManager();
+ DataProduct dataProduct = em.find(DataProduct.class, productUri);
+ return dataProduct != null;
+ } 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 String registerReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel) throws DataCatalogException {
String replicaId = UUID.randomUUID().toString();
dataReplicaLocationModel.setReplicaId(replicaId);
http://git-wip-us.apache.org/repos/asf/airavata/blob/5e9bf914/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 287a400..627a6e6 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
@@ -21,10 +21,7 @@
package org.apache.airavata.data.catalog;
import org.apache.airavata.data.catalog.util.Initialize;
-import org.apache.airavata.model.data.product.DataProductModel;
-import org.apache.airavata.model.data.product.DataReplicaLocationModel;
-import org.apache.airavata.model.data.product.ReplicaLocationCategory;
-import org.apache.airavata.model.data.product.ReplicaPersistentType;
+import org.apache.airavata.model.data.product.*;
import org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory;
import org.apache.airavata.registry.cpi.DataCatalog;
import org.apache.airavata.registry.cpi.DataCatalogException;
@@ -56,6 +53,7 @@ public class DataCatalogTest {
dataProductModel.setOwnerName("scnakandala");
dataProductModel.setGatewayId("default");
dataProductModel.setLogicalPath("/test/test/test");
+ dataProductModel.setDataProductType(DataProductType.FILE);
HashMap<String, String> resMetadata = new HashMap<>();
resMetadata.put("name", "name");
dataProductModel.setProductMetadata(resMetadata);
http://git-wip-us.apache.org/repos/asf/airavata/blob/5e9bf914/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 2ddda7c..42eff2a 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
@@ -36,6 +36,8 @@ public interface DataCatalog {
DataProductModel getDataProduct(String productUri) throws DataCatalogException;
+ boolean isExists(String productUri) throws DataCatalogException;
+
String registerReplicaLocation(DataReplicaLocationModel dataReplicaLocationModel) throws DataCatalogException;
boolean removeReplicaLocation(String replicaId) throws DataCatalogException;