From ad9e913202bea784c46202106160a5b386582c01 Mon Sep 17 00:00:00 2001 From: Fabio Sinibaldi Date: Fri, 14 May 2021 11:30:17 +0200 Subject: [PATCH] Static item properties parser --- .../gcube/usecases/ws/thredds/SyncEngine.java | 14 +++++++++ .../thredds/engine/impl/SynchEngineImpl.java | 5 ++++ .../engine/impl/WorkspaceFolderManager.java | 4 +-- .../thredds/engine/impl/WorkspaceUtils.java | 23 +++++++++++++++ .../ws/thredds/model/ContainerType.java | 10 +++++++ .../thredds/model/SyncFolderDescriptor.java | 29 ++++++++++++++----- 6 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/gcube/usecases/ws/thredds/model/ContainerType.java diff --git a/src/main/java/org/gcube/usecases/ws/thredds/SyncEngine.java b/src/main/java/org/gcube/usecases/ws/thredds/SyncEngine.java index 9b33697..9b3d4e4 100644 --- a/src/main/java/org/gcube/usecases/ws/thredds/SyncEngine.java +++ b/src/main/java/org/gcube/usecases/ws/thredds/SyncEngine.java @@ -1,15 +1,18 @@ package org.gcube.usecases.ws.thredds; import java.io.File; +import java.util.Map; import java.util.Set; import org.gcube.usecases.ws.thredds.engine.impl.ProcessDescriptor; import org.gcube.usecases.ws.thredds.engine.impl.ProcessStatus; import org.gcube.usecases.ws.thredds.engine.impl.SynchEngineImpl; +import org.gcube.usecases.ws.thredds.engine.impl.WorkspaceUtils; import org.gcube.usecases.ws.thredds.faults.InternalException; import org.gcube.usecases.ws.thredds.faults.ProcessNotFoundException; import org.gcube.usecases.ws.thredds.faults.WorkspaceInteractionException; import org.gcube.usecases.ws.thredds.faults.WorkspaceNotSynchedException; +import org.gcube.usecases.ws.thredds.model.ContainerType; import org.gcube.usecases.ws.thredds.model.SyncEngineStatusDescriptor; import org.gcube.usecases.ws.thredds.model.SyncFolderDescriptor; import org.gcube.usecases.ws.thredds.model.SyncOperationCallBack; @@ -50,6 +53,12 @@ public interface SyncEngine { */ public void unsetSynchronizedFolder(String folderId,boolean deleteRemoteContent) throws WorkspaceInteractionException, InternalException; + /** + * NB Method To Be Implemented + * + * @param elementId + * @return + */ public SynchronizedElementInfo getInfo(String elementId); @@ -92,4 +101,9 @@ public interface SyncEngine { public SynchFolderConfiguration getConfig(String fodlerId) throws WorkspaceInteractionException, WorkspaceNotSynchedException; + + + public static SynchronizedElementInfo parseInfo(Map itemProperties,ContainerType itemType)throws WorkspaceNotSynchedException{ + return WorkspaceUtils.getInfo(itemProperties, org.gcube.common.storagehub.client.dsl.ContainerType.valueOf(itemType.toString())); + } } 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 6e8e899..32da3aa 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 @@ -2,6 +2,7 @@ package org.gcube.usecases.ws.thredds.engine.impl; import java.io.File; import java.util.HashSet; +import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.UUID; @@ -28,6 +29,7 @@ import org.gcube.usecases.ws.thredds.faults.WorkspaceInteractionException; import org.gcube.usecases.ws.thredds.faults.WorkspaceLockedException; import org.gcube.usecases.ws.thredds.faults.WorkspaceNotSynchedException; import org.gcube.usecases.ws.thredds.model.CompletionCallback; +import org.gcube.usecases.ws.thredds.model.ContainerType; import org.gcube.usecases.ws.thredds.model.SyncEngineStatusDescriptor; import org.gcube.usecases.ws.thredds.model.SyncFolderDescriptor; import org.gcube.usecases.ws.thredds.model.SyncOperationCallBack; @@ -333,4 +335,7 @@ public class SynchEngineImpl implements SyncEngine{ public SynchFolderConfiguration getConfig(String folderId) throws WorkspaceInteractionException, WorkspaceNotSynchedException { return new WorkspaceFolderManager(folderId).getSynchConfiguration(); } + + + } 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 9342a18..a46fbc1 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 @@ -125,10 +125,10 @@ public class WorkspaceFolderManager { log.info("Resulting status for {} IS {} ",folderId,resultingStatus); - return new SyncFolderDescriptor( + return new SyncFolderDescriptor(resultingStatus, this.folderId, this.theFolder.get().getPath(), - config,new SynchronizedElementInfo(resultingStatus)); + config,false); }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 900ae39..14927ca 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 @@ -28,8 +28,10 @@ import org.gcube.usecases.ws.thredds.faults.InternalException; import org.gcube.usecases.ws.thredds.faults.ItemNotFoundException; import org.gcube.usecases.ws.thredds.faults.RemoteFileNotFoundException; import org.gcube.usecases.ws.thredds.faults.WorkspaceInteractionException; +import org.gcube.usecases.ws.thredds.faults.WorkspaceNotSynchedException; import org.gcube.usecases.ws.thredds.model.StepReport; import org.gcube.usecases.ws.thredds.model.SynchFolderConfiguration; +import org.gcube.usecases.ws.thredds.model.SynchronizedElementInfo; import org.gcube.usecases.ws.thredds.model.SynchronizedElementInfo.SynchronizationStatus; import lombok.extern.slf4j.Slf4j; @@ -361,6 +363,12 @@ public class WorkspaceUtils { } + + + + + + public static SynchFolderConfiguration loadConfiguration(ItemContainer item) throws StorageHubException, WorkspaceInteractionException { if(item.getType().equals(ContainerType.FOLDER)) { Metadata meta=item.get().getMetadata(); @@ -448,5 +456,20 @@ public class WorkspaceUtils { throw new ItemNotFoundException("Unable to find "+path); } + //************** parsing properties + + public static SynchronizedElementInfo getInfo(Map map,ContainerType type) throws WorkspaceNotSynchedException { + if(!(map.containsKey(Constants.WorkspaceProperties.TBS)&&Boolean.parseBoolean(map.get(Constants.WorkspaceProperties.TBS)+""))) + throw new WorkspaceNotSynchedException("Item is not to be synchronized"); + + SynchronizationStatus status = SynchronizationStatus.valueOf(map.get(Constants.WorkspaceProperties.LAST_UPDATE_STATUS)+""); + SynchronizedElementInfo toReturn=new SynchronizedElementInfo(status); + + //TODO PARSE ALL PROPERTIES + + return toReturn; + } + + } diff --git a/src/main/java/org/gcube/usecases/ws/thredds/model/ContainerType.java b/src/main/java/org/gcube/usecases/ws/thredds/model/ContainerType.java new file mode 100644 index 0000000..5d7bf1b --- /dev/null +++ b/src/main/java/org/gcube/usecases/ws/thredds/model/ContainerType.java @@ -0,0 +1,10 @@ +package org.gcube.usecases.ws.thredds.model; + +public enum ContainerType { + + FOLDER, + FILE, + GENERIC_ITEM, + URL + +} 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 89bbd4d..41e8958 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 @@ -2,13 +2,13 @@ package org.gcube.usecases.ws.thredds.model; import org.gcube.usecases.ws.thredds.engine.impl.ProcessDescriptor; -import lombok.Data; +import lombok.Getter; import lombok.NonNull; -import lombok.RequiredArgsConstructor; +import lombok.Setter; -@Data -@RequiredArgsConstructor -public class SyncFolderDescriptor { +@Getter +@Setter +public class SyncFolderDescriptor extends SynchronizedElementInfo{ @NonNull private String folderId; @@ -21,8 +21,23 @@ public class SyncFolderDescriptor { private Boolean isLocked=false; + + + + public SyncFolderDescriptor(SynchronizationStatus status, String folderId, String folderPath, + SynchFolderConfiguration configuration, Boolean isLocked) { + super(status); + this.folderId = folderId; + this.folderPath = folderPath; + this.configuration = configuration; + this.isLocked = isLocked; + } + + + + + private ProcessDescriptor localProcessDescriptor=null; - @NonNull - private SynchronizedElementInfo info; + }