From bfd4b3596e623f504cf08321b041931e99550a7c Mon Sep 17 00:00:00 2001 From: lucio Date: Thu, 5 Mar 2020 15:02:46 +0100 Subject: [PATCH] support for upload of file starting with dot modified the path serach according to the new storageHub client --- pom.xml | 2 -- .../data/access/storagehub/fs/PathUtils.java | 33 +++++++------------ .../access/storagehub/fs/StorageHubFS.java | 5 +-- .../data/access/storagehub/fuse/FuseTest.java | 4 +-- 4 files changed, 17 insertions(+), 27 deletions(-) diff --git a/pom.xml b/pom.xml index 581cc4e..997cec7 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,6 @@ ch.qos.logback logback-classic - 1.0.13 @@ -111,7 +110,6 @@ maven-compiler-plugin - 2.3.2 1.8 1.8 diff --git a/src/main/java/org/gcube/data/access/storagehub/fs/PathUtils.java b/src/main/java/org/gcube/data/access/storagehub/fs/PathUtils.java index 773baaf..2882614 100644 --- a/src/main/java/org/gcube/data/access/storagehub/fs/PathUtils.java +++ b/src/main/java/org/gcube/data/access/storagehub/fs/PathUtils.java @@ -1,5 +1,6 @@ package org.gcube.data.access.storagehub.fs; +import java.awt.Container; import java.nio.file.Paths; import java.util.List; @@ -54,23 +55,21 @@ public class PathUtils { } else logger.trace("path "+path+" not in cache"); synchronized (this) { - ItemContainer retrievedItem = getPathRecursive(path, rootDirectory); - if (retrievedItem!=null)cache.put(path, (ItemContainer) retrievedItem); + ItemContainer retrievedItem = getByPath(path, rootDirectory); + if (retrievedItem!=null) { + cache.put(path, (ItemContainer) retrievedItem); + logger.trace("retrieved container is of type {}",retrievedItem.getType()); + } + return retrievedItem; } } - public ItemContainer getPathRecursive(String path, FolderContainer parentContainer) { + public ItemContainer getByPath(String path, FolderContainer parentContainer) { try { - while (path.startsWith("/")) { + if (path.startsWith("/")) { path = path.substring(1); } - if (!path.contains("/")) { - logger.trace("seaching path "+path+" in "+parentContainer.get().getTitle()); - List> items = parentContainer.findByName(path).withContent().getContainers(); - logger.trace("found? "+(items.size()>0)); - return items.size()>0? items.get(0): null; - } if (path.startsWith(StorageHubFS.VREFOLDERS_NAME)) { List> vreFolders = client.getVREFolders().getContainers(); String vreName = path.split("/")[1]; @@ -79,21 +78,13 @@ public class PathUtils { if (veFolder.getDisplayName().equals(vreName)) { String nextPath = path.replace(StorageHubFS.VREFOLDERS_NAME+"/"+veFolder.getDisplayName(), ""); if(nextPath.isEmpty()) return vreContainer; - else return getPathRecursive(nextPath, (FolderContainer)vreContainer); + else return ((FolderContainer)vreContainer).openByRelativePath(nextPath).resolve(); } } - } + } else return parentContainer.openByRelativePath(path).resolve(); + - String nextName = path.substring(0, path.indexOf("/")); - String rest = path.substring(path.indexOf("/")); - - for (ItemContainer container : parentContainer.findByName(nextName).withContent().getContainers()) { - if (container instanceof FolderContainer) { - logger.trace("seaching path "+rest+" in "+container.get().getTitle()); - return getPathRecursive(rest, (FolderContainer)container); - } - } }catch(Exception e) { logger.error("error in gpath recursive",e); } diff --git a/src/main/java/org/gcube/data/access/storagehub/fs/StorageHubFS.java b/src/main/java/org/gcube/data/access/storagehub/fs/StorageHubFS.java index d80170b..9ed0f07 100644 --- a/src/main/java/org/gcube/data/access/storagehub/fs/StorageHubFS.java +++ b/src/main/java/org/gcube/data/access/storagehub/fs/StorageHubFS.java @@ -160,6 +160,7 @@ public class StorageHubFS extends FuseStubFS { @Override public synchronized int getattr(String path, FileStat stat) { + ScopeProvider.instance.set(scope); SecurityTokenProvider.instance.set(token); @@ -167,10 +168,10 @@ public class StorageHubFS extends FuseStubFS { if (Objects.equals(path, "/") || path.contains("Trash") || path.equals("/"+VREFOLDERS_NAME)) { stat.st_mode.set(FileStat.S_IFDIR | 0755); stat.st_nlink.set(2); - } else if(pathUtils.getLastComponent(path).startsWith(".")) { + }/* else if(pathUtils.getLastComponent(path).startsWith(".")) { logger.trace("start with /."); return super.getattr(path, stat); - } else if (tempFiles.containsKey(path)){ + } */else if (tempFiles.containsKey(path)){ return tempFiles.get(path).getAttr(stat); }else { logger.trace("trying items"); diff --git a/src/test/java/org/gcube/data/access/storagehub/fuse/FuseTest.java b/src/test/java/org/gcube/data/access/storagehub/fuse/FuseTest.java index 2949804..a9a6136 100644 --- a/src/test/java/org/gcube/data/access/storagehub/fuse/FuseTest.java +++ b/src/test/java/org/gcube/data/access/storagehub/fuse/FuseTest.java @@ -11,7 +11,7 @@ public class FuseTest { @Test public void mount() { - StorageHubFS memfs = new StorageHubFS("7c26a682-f47b-4e6e-90e0-6d101a4314cd-980114272","/pred4s/preprod/preVRE"); + StorageHubFS memfs = new StorageHubFS("b7c80297-e4ed-42ab-ab42-fdc0b8b0eabf-98187548","/gcube"); try { String path; switch (Platform.getNativePlatform().getOS()) { @@ -19,7 +19,7 @@ public class FuseTest { path = "J:\\"; break; default: - path = "/home/lucio/javaMount/mnt"; + path = "/home/lucio/java/mnt"; } memfs.mount(Paths.get(path), true, true); } finally {