From 379486b830c4b9c426853b994f1c127e3ed65667 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Wed, 12 May 2021 16:51:24 +0200 Subject: [PATCH] bugfixing --- .../thredds/engine/impl/SynchEngineImpl.java | 8 ++++++-- .../engine/impl/WorkspaceFolderManager.java | 10 ++++++++-- .../thredds/engine/impl/WorkspaceUtils.java | 2 +- .../thredds/model/SyncFolderDescriptor.java | 7 ++++--- .../model/SynchronizedElementInfo.java | 8 ++++++++ .../usecases/ws/thredds/TestCommons.java | 20 ++++++------------- 6 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/SynchEngineImpl.java b/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/SynchEngineImpl.java index 0b46e05..6e8e899 100644 --- a/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/SynchEngineImpl.java +++ b/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/SynchEngineImpl.java @@ -182,14 +182,18 @@ public class SynchEngineImpl implements SyncEngine{ @Override public void setSynchronizedFolder(SynchFolderConfiguration config,String folderId) throws WorkspaceInteractionException, InternalException { - // Check config if(config==null) throw new InternalException("Passed config is null : "+config); String remotePath=config.getRemotePath(); if(remotePath==null||remotePath.isEmpty()||remotePath.startsWith("/")) throw new InternalException("Invalid remote path "+remotePath+"."); - + User operator=Security.getCurrent(); + if(!operator.getContext().equals(config.getTargetContext())) + throw new SecurityException("Invalid operation. Configuration pointed to "+config.getTargetContext()+" while operator is in "+operator.getContext()); + + new WorkspaceFolderManager(folderId).configure(config); + } @Override diff --git a/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceFolderManager.java b/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceFolderManager.java index 04c137c..9342a18 100644 --- a/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceFolderManager.java +++ b/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceFolderManager.java @@ -15,7 +15,6 @@ import org.gcube.common.storagehub.model.exceptions.StorageHubException; import org.gcube.data.transfer.model.RemoteFileDescriptor; import org.gcube.data.transfer.model.plugins.thredds.ThreddsCatalog; import org.gcube.usecases.ws.thredds.Constants; -import org.gcube.usecases.ws.thredds.engine.impl.security.Security; import org.gcube.usecases.ws.thredds.engine.impl.threads.ProcessIdProvider; import org.gcube.usecases.ws.thredds.faults.InternalException; import org.gcube.usecases.ws.thredds.faults.LockNotOwnedException; @@ -122,7 +121,14 @@ public class WorkspaceFolderManager { SynchFolderConfiguration config=getSynchConfiguration(); try{ checkFolder(theFolder,recursively,config,null,theFolder.getId(),WorkspaceUtils.safelyGetLastUpdate(theFolder.get())); - return new SyncFolderDescriptor(this.folderId,this.theFolder.get().getPath(),config); + SynchronizationStatus resultingStatus=SynchronizationStatus.valueOf(theFolder.get().getMetadata().getMap().get(Constants.WorkspaceProperties.LAST_UPDATE_STATUS)+""); + + log.info("Resulting status for {} IS {} ",folderId,resultingStatus); + + return new SyncFolderDescriptor( + this.folderId, + this.theFolder.get().getPath(), + config,new SynchronizedElementInfo(resultingStatus)); }catch(StorageHubException e) { throw new WorkspaceInteractionException(e); } diff --git a/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceUtils.java b/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceUtils.java index aaa2ff5..900ae39 100644 --- a/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceUtils.java +++ b/src/main/java/org/gcube/usecases/ws/thredds/engine/impl/WorkspaceUtils.java @@ -391,7 +391,7 @@ public class WorkspaceUtils { } } - + config.setTargetContext(ctx+""); config.setToCreateCatalogName(""+map.get(Constants.WorkspaceProperties.RELATED_CATALOG)); config.setValidateMetadata(Boolean.parseBoolean(""+map.get(Constants.WorkspaceProperties.VALIDATE_METADATA))); diff --git a/src/main/java/org/gcube/usecases/ws/thredds/model/SyncFolderDescriptor.java b/src/main/java/org/gcube/usecases/ws/thredds/model/SyncFolderDescriptor.java index ce51730..89bbd4d 100644 --- a/src/main/java/org/gcube/usecases/ws/thredds/model/SyncFolderDescriptor.java +++ b/src/main/java/org/gcube/usecases/ws/thredds/model/SyncFolderDescriptor.java @@ -16,12 +16,13 @@ public class SyncFolderDescriptor { private String folderPath; @NonNull private SynchFolderConfiguration configuration; + @NonNull - private boolean isLocked=false; + private Boolean isLocked=false; private ProcessDescriptor localProcessDescriptor=null; - - private SynchronizedElementInfo info=null; + @NonNull + private SynchronizedElementInfo info; } diff --git a/src/main/java/org/gcube/usecases/ws/thredds/model/SynchronizedElementInfo.java b/src/main/java/org/gcube/usecases/ws/thredds/model/SynchronizedElementInfo.java index 6e5440d..e4e19ac 100644 --- a/src/main/java/org/gcube/usecases/ws/thredds/model/SynchronizedElementInfo.java +++ b/src/main/java/org/gcube/usecases/ws/thredds/model/SynchronizedElementInfo.java @@ -1,10 +1,18 @@ package org.gcube.usecases.ws.thredds.model; +import lombok.Data; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Data public class SynchronizedElementInfo { public static enum SynchronizationStatus{ UP_TO_DATE,OUTDATED_WS,OUTDATED_REMOTE } + @NonNull + private SynchronizationStatus status; } diff --git a/src/test/java/org/gcube/usecases/ws/thredds/TestCommons.java b/src/test/java/org/gcube/usecases/ws/thredds/TestCommons.java index 4be9170..8d1df08 100644 --- a/src/test/java/org/gcube/usecases/ws/thredds/TestCommons.java +++ b/src/test/java/org/gcube/usecases/ws/thredds/TestCommons.java @@ -8,7 +8,7 @@ import org.gcube.common.storagehub.client.dsl.ItemContainer; import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.usecases.ws.thredds.engine.impl.ThreddsController; import org.gcube.usecases.ws.thredds.engine.impl.WorkspaceUtils; -import org.gcube.usecases.ws.thredds.faults.InternalException; +import org.gcube.usecases.ws.thredds.engine.impl.security.Security; import org.gcube.usecases.ws.thredds.model.SynchFolderConfiguration; import lombok.AllArgsConstructor; @@ -37,24 +37,16 @@ public class TestCommons { private static Map configs=new HashMap<>(); - private static String toUseConfig="simple"; + private static String toUseConfig="root"; static { -// configs.put("GP", new TestSet("GPTests","/d4science.research-infrastructures.eu","a8cd78d3-69e8-4d02-ac90-681b2d16d84d","","","")); - -// folderName="WS-Tests"; configs.put("simple", new TestSet("Simple label ","/gcube/devsec/devVRE", "Test1","public/netcdf/simpleFolder","3aa85bbf-d5f3-4df4-ad03-4f8f788eba3d-98187548","simple")); -// configs.put("cmems", new TestSet("CMEMS","/gcube", "CMEMS","public/netcdf/CMEMS","***REMOVED***","cmems")); -// -// configs.put("default", new TestSet("Default Tests","/gcube","Thredds Catalog","public/netcdf","***REMOVED***","main")); -// -// configs.put("default", new TestSet("Default Tests","/gcube","WS-Tests","simpleCatalog","***REMOVED***","main")); -// -// -// configs.put("pre", new TestSet("Default Tests","/pred4s/preprod/preVRE","Thredds Synch","Fabio WS","91a8433b-9491-42c1-95e2-420245ef1943-980114272","SynchTestCatalog")); + + configs.put("root", new TestSet("Simple label ","/gcube", "Test2","public/netcdf/wrong","3aa85bbf-d5f3-4df4-ad03-4f8f788eba3d-98187548","Wrong")); + } @@ -120,6 +112,6 @@ public class TestCommons { public static SynchFolderConfiguration getSynchConfig() throws Exception { TestSet set=configs.get(toUseConfig); - return new SynchFolderConfiguration(set.getRemotePath(), "*.nc,*.ncml,*.asc", set.getTargetToken(),set.getToCreateCatalogName(),set.getFolderId()); + return new SynchFolderConfiguration(set.getRemotePath(), "*.nc,*.ncml,*.asc", Security.getCurrent().getContext(),set.getToCreateCatalogName(),set.getFolderId()); } }