handling URI_COLLECTION type when creating process input model
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/d20f77e4 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/d20f77e4 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/d20f77e4 Branch: refs/heads/master Commit: d20f77e4b5d3545fe01facbb9b2a3b0f9f6ce16c Parents: c382ae2 Author: scnakandala <[email protected]> Authored: Tue Jul 5 18:50:29 2016 -0400 Committer: scnakandala <[email protected]> Committed: Tue Jul 5 18:50:29 2016 -0400 ---------------------------------------------------------------------- .../server/OrchestratorServerHandler.java | 40 +++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/d20f77e4/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java ---------------------------------------------------------------------- diff --git a/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java b/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java index 1367e44..60cb7a0 100644 --- a/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java +++ b/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java @@ -38,6 +38,7 @@ import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePrefer import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile; import org.apache.airavata.model.application.io.DataType; import org.apache.airavata.model.data.replica.DataProductModel; +import org.apache.airavata.model.data.replica.DataReplicaLocationModel; import org.apache.airavata.model.data.replica.ReplicaLocationCategory; import org.apache.airavata.model.error.LaunchValidationException; import org.apache.airavata.model.experiment.ExperimentModel; @@ -59,6 +60,7 @@ import org.apache.airavata.registry.core.app.catalog.resources.AppCatAbstractRes import org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory; import org.apache.airavata.registry.core.experiment.catalog.resources.AbstractExpCatResource; import org.apache.airavata.registry.cpi.*; +import org.apache.commons.lang.StringUtils; import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; @@ -168,11 +170,39 @@ public class OrchestratorServerHandler implements OrchestratorService.Iface { if (pi.getType().equals(DataType.URI) && pi.getValue().startsWith("airavata-dp://")) { try { DataProductModel dataProductModel = replicaCatalog.getDataProduct(pi.getValue()); - dataProductModel.getReplicaLocations().stream().filter(rpModel -> rpModel.getReplicaLocationCategory() - .equals(ReplicaLocationCategory.GATEWAY_DATA_STORE)).forEach(rpModel -> { - pi.setValue(rpModel.getFilePath()); - pi.setStorageResourceId(rpModel.getStorageResourceId()); - }); + Optional<DataReplicaLocationModel> rpLocation = dataProductModel.getReplicaLocations() + .stream().filter(rpModel -> rpModel.getReplicaLocationCategory(). + equals(ReplicaLocationCategory.GATEWAY_DATA_STORE)).findFirst(); + if (rpLocation.isPresent()) { + pi.setValue(rpLocation.get().getFilePath()); + pi.setStorageResourceId(rpLocation.get().getStorageResourceId()); + } else { + log.error("Could not find a replica for the URI " + pi.getValue()); + } + } catch (ReplicaCatalogException e) { + log.error(e.getMessage(), e); + } + } else if (pi.getType().equals(DataType.URI_COLLECTION) && pi.getValue().contains("airavata-dp://")) { + try { + String[] uriList = pi.getValue().split(","); + final ArrayList<String> filePathList = new ArrayList<>(); + for (String uri : uriList) { + if (uri.startsWith("airavata-dp://")) { + DataProductModel dataProductModel = replicaCatalog.getDataProduct(uri); + Optional<DataReplicaLocationModel> rpLocation = dataProductModel.getReplicaLocations() + .stream().filter(rpModel -> rpModel.getReplicaLocationCategory(). + equals(ReplicaLocationCategory.GATEWAY_DATA_STORE)).findFirst(); + if (rpLocation.isPresent()) { + filePathList.add(rpLocation.get().getFilePath()); + } else { + log.error("Could not find a replica for the URI " + pi.getValue()); + } + } else { + // uri is in file path format + filePathList.add(uri); + } + } + pi.setValue(StringUtils.join(filePathList, ',')); } catch (ReplicaCatalogException e) { log.error(e.getMessage(), e); }
