diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6f4f5f1..a2a7243 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,10 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [v1.5.0-SNAPSHOT] - 2021-05-07
+
+[#21374] Moved to ws-thredds 1.x
+
## [v1.4.0] - 2021-03-10
diff --git a/pom.xml b/pom.xml
index 05e09b9..e67bed0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
org.gcube.portal
ws-synchronized-module-library
- 1.4.0
+ 1.5.0-SNAPSHOT
jar
ws-synchronized-module-library
@@ -37,7 +37,7 @@
org.gcube.distribution
maven-portal-bom
- 3.6.0
+ 3.6.1
pom
import
@@ -49,49 +49,20 @@
org.gcube.spatial.data
ws-thredds
- [0.1.0, 1.0.0-SNAPSHOT)
- compile
-
-
-
- commons-lang
- commons-lang
- provided
-
-
-
- org.gcube.core
- common-encryption
- provided
-
-
-
- org.gcube.resources.discovery
- ic-client
- provided
-
-
- org.gcube.core
- common-scope-maps
- compile
-
-
-
-
- org.gcube.common
- storagehub-client-library
- [1.0.0-SNAPSHOT,2.0.0-SNAPSHOT)
+ [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT)
compile
org.slf4j
- slf4j-log4j12
+ slf4j-api
+ provided
org.slf4j
- slf4j-api
+ slf4j-log4j12
+ provided
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/DoCheckSyncItem.java b/src/main/java/org/gcube/portal/wssynclibrary/DoCheckSyncItem.java
index 6b4ee83..430cd49 100644
--- a/src/main/java/org/gcube/portal/wssynclibrary/DoCheckSyncItem.java
+++ b/src/main/java/org/gcube/portal/wssynclibrary/DoCheckSyncItem.java
@@ -4,26 +4,35 @@
package org.gcube.portal.wssynclibrary;
import org.gcube.portal.wssynclibrary.shared.ItemNotSynched;
+import org.gcube.usecases.ws.thredds.faults.WorkspaceInteractionException;
+import org.gcube.usecases.ws.thredds.faults.WorkspaceNotSynchedException;
-// TODO: Auto-generated Javadoc
/**
* The Interface DoCheckSyncItem.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Feb 8, 2018
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 8, 2018
* @param the generic type
*/
public interface DoCheckSyncItem {
-
/**
* Check item synched.
*
* @param itemId the item id
* @return the t
* @throws ItemNotSynched the item not synched
- * @throws Exception the exception
+ * @throws Exception the exception
*/
T checkItemSynched(String itemId) throws ItemNotSynched, Exception;
+ /**
+ * Gets the configuration.
+ *
+ * @param itemId the item id
+ * @return the configuration
+ * @throws WorkspaceInteractionException the workspace interaction exception
+ * @throws WorkspaceNotSynchedException the workspace not synched exception
+ * @throws Exception the exception
+ */
+ T getConfiguration(String itemId) throws WorkspaceInteractionException, WorkspaceNotSynchedException, Exception;
}
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/DoConnectRepository.java b/src/main/java/org/gcube/portal/wssynclibrary/DoConnectRepository.java
index 741c168..b3744ec 100644
--- a/src/main/java/org/gcube/portal/wssynclibrary/DoConnectRepository.java
+++ b/src/main/java/org/gcube/portal/wssynclibrary/DoConnectRepository.java
@@ -1,21 +1,19 @@
package org.gcube.portal.wssynclibrary;
-
-// TODO: Auto-generated Javadoc
/**
* The Interface DoConnectRepository.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Feb 14, 2018
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 14, 2018
*/
public interface DoConnectRepository {
-
+
/**
* Inits the repository.
*
* @return true, if successful
+ * @throws Exception
*/
- Boolean initRepository();
+ Boolean initRepository() throws Exception;
/**
* Shutdown repository.
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThStepReport.java b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThStepReport.java
new file mode 100644
index 0000000..be7ff2c
--- /dev/null
+++ b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThStepReport.java
@@ -0,0 +1,68 @@
+package org.gcube.portal.wssynclibrary.shared.thredds;
+
+import java.io.Serializable;
+
+/**
+ * The Class ThStepReport.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * May 18, 2021
+ */
+public class ThStepReport implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -1678408521458644765L;
+ private String stepReportStatus;
+
+ /**
+ * Instantiates a new th step report.
+ */
+ public ThStepReport() {
+
+ }
+
+ /**
+ * Instantiates a new th step report.
+ *
+ * @param stepReportStatus the step report status
+ */
+ public ThStepReport(String stepReportStatus) {
+ this.stepReportStatus = stepReportStatus;
+ }
+
+ /**
+ * Gets the step report status.
+ *
+ * @return the step report status
+ */
+ public String getStepReportStatus() {
+ return stepReportStatus;
+ }
+
+ /**
+ * Sets the step report status.
+ *
+ * @param stepReportStatus the new step report status
+ */
+ public void setStepReportStatus(String stepReportStatus) {
+ this.stepReportStatus = stepReportStatus;
+ }
+
+ /**
+ * To string.
+ *
+ * @return the string
+ */
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("ThStepReport [stepReportStatus=");
+ builder.append(stepReportStatus);
+ builder.append("]");
+ return builder.toString();
+ }
+
+}
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSyncElementInfo.java b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSyncElementInfo.java
new file mode 100644
index 0000000..d1b1947
--- /dev/null
+++ b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSyncElementInfo.java
@@ -0,0 +1,89 @@
+package org.gcube.portal.wssynclibrary.shared.thredds;
+
+import java.io.Serializable;
+
+/**
+ * The Class ThSyncElementInfo.
+ *
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * May 13, 2021
+ */
+public class ThSyncElementInfo implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6248465200945019743L;
+
+ private Sync_Status syncStatus;
+
+ private ThStepReport stepReport;
+
+ private String lastupdateTime;
+
+ /**
+ * Instantiates a new th sync element info.
+ */
+ public ThSyncElementInfo() {
+
+ }
+
+ /**
+ * Instantiates a new th sync element info.
+ *
+ * @param syncStatus the sync status
+ */
+ public ThSyncElementInfo(Sync_Status syncStatus) {
+ super();
+ this.syncStatus = syncStatus;
+ }
+
+ /**
+ * Gets the sync status.
+ *
+ * @return the sync status
+ */
+ public Sync_Status getSyncStatus() {
+ return syncStatus;
+ }
+
+ /**
+ * Sets the sync status.
+ *
+ * @param syncStatus the new sync status
+ */
+ public void setSyncStatus(Sync_Status syncStatus) {
+ this.syncStatus = syncStatus;
+ }
+
+ public ThStepReport getStepReport() {
+ return stepReport;
+ }
+
+ public void setStepReport(ThStepReport stepReport) {
+ this.stepReport = stepReport;
+ }
+
+ public String getLastupdateTime() {
+ return lastupdateTime;
+ }
+
+ public void setLastupdateTime(String lastupdateTime) {
+ this.lastupdateTime = lastupdateTime;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("ThSyncElementInfo [syncStatus=");
+ builder.append(syncStatus);
+ builder.append(", stepReport=");
+ builder.append(stepReport);
+ builder.append(", lastupdateTime=");
+ builder.append(lastupdateTime);
+ builder.append("]");
+ return builder.toString();
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSyncFolderDescriptor.java b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSyncFolderDescriptor.java
index 883c6c7..e36f365 100644
--- a/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSyncFolderDescriptor.java
+++ b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSyncFolderDescriptor.java
@@ -2,61 +2,54 @@ package org.gcube.portal.wssynclibrary.shared.thredds;
import java.io.Serializable;
-
-
-// TODO: Auto-generated Javadoc
-
/**
* The Class ThSyncFolderDescriptor.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Feb 8, 2018
+ * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it
+ *
+ * May 13, 2021
*/
-public class ThSyncFolderDescriptor implements Serializable{
+public class ThSyncFolderDescriptor implements Serializable {
-
- /** The Constant serialVersionUID. */
private static final long serialVersionUID = 4134777763175272691L;
- /** The folder id. */
private String folderId;
- /** The folder path. */
private String folderPath;
- /** The configuration. */
private ThSynchFolderConfiguration configuration;
- /** The is locked. */
- private boolean isLocked=false;
-
-
- /** The local process descriptor. */
- private ThProcessDescriptor localProcessDescriptor=null;
-
+ private boolean isLocked = false;
+
+ private ThSyncElementInfo elementInfo;
+
+ private ThProcessDescriptor localProcessDescriptor = null;
+
/**
* Instantiates a new s sync folder descriptor.
*/
public ThSyncFolderDescriptor() {
- // TODO Auto-generated constructor stub
+
}
/**
- * Instantiates a new s sync folder descriptor.
+ * Instantiates a new th sync folder descriptor.
*
- * @param folderId the folder id
- * @param folderPath the folder path
- * @param configuration the configuration
- * @param isLocked the is locked
+ * @param folderId the folder id
+ * @param folderPath the folder path
+ * @param configuration the configuration
+ * @param isLocked the is locked
+ * @param elementInfo the element info
* @param localProcessDescriptor the local process descriptor
*/
public ThSyncFolderDescriptor(String folderId, String folderPath, ThSynchFolderConfiguration configuration,
- boolean isLocked, ThProcessDescriptor localProcessDescriptor) {
+ boolean isLocked, ThSyncElementInfo elementInfo, ThProcessDescriptor localProcessDescriptor) {
super();
this.folderId = folderId;
this.folderPath = folderPath;
this.configuration = configuration;
this.isLocked = isLocked;
+ this.elementInfo = elementInfo;
this.localProcessDescriptor = localProcessDescriptor;
}
@@ -150,8 +143,28 @@ public class ThSyncFolderDescriptor implements Serializable{
this.localProcessDescriptor = localProcessDescriptor;
}
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
+ /**
+ * Gets the element info.
+ *
+ * @return the element info
+ */
+ public ThSyncElementInfo getElementInfo() {
+ return elementInfo;
+ }
+
+ /**
+ * Sets the element info.
+ *
+ * @param elementInfo the new element info
+ */
+ public void setElementInfo(ThSyncElementInfo elementInfo) {
+ this.elementInfo = elementInfo;
+ }
+
+ /**
+ * To string.
+ *
+ * @return the string
*/
@Override
public String toString() {
@@ -164,13 +177,12 @@ public class ThSyncFolderDescriptor implements Serializable{
builder.append(configuration);
builder.append(", isLocked=");
builder.append(isLocked);
+ builder.append(", elementInfo=");
+ builder.append(elementInfo);
builder.append(", localProcessDescriptor=");
builder.append(localProcessDescriptor);
builder.append("]");
return builder.toString();
}
-
-
-
-
+
}
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSynchFolderConfiguration.java b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSynchFolderConfiguration.java
index c7563ec..71b18a6 100644
--- a/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSynchFolderConfiguration.java
+++ b/src/main/java/org/gcube/portal/wssynclibrary/shared/thredds/ThSynchFolderConfiguration.java
@@ -2,15 +2,12 @@ package org.gcube.portal.wssynclibrary.shared.thredds;
import java.io.Serializable;
-
-// TODO: Auto-generated Javadoc
/**
* The Class ThSynchFolderConfiguration.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Feb 8, 2018
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 8, 2018
*/
-public class ThSynchFolderConfiguration implements Serializable{
+public class ThSynchFolderConfiguration implements Serializable {
/** The Constant serialVersionUID. */
private static final long serialVersionUID = -5807533629170443212L;
@@ -21,36 +18,47 @@ public class ThSynchFolderConfiguration implements Serializable{
/** The filter. */
private String filter;
- /** The target token. */
- private String targetToken;
+ private String targetContext;
/** The to create catalog name. */
private String toCreateCatalogName;
/** The remote persistence. */
- private String remotePersistence="thredds";
+ private String remotePersistence = "thredds";
private String rootFolderId;
-
+ /**
+ * Instantiates a new th synch folder configuration.
+ */
public ThSynchFolderConfiguration() {
- // TODO Auto-generated constructor stub
+
}
- public ThSynchFolderConfiguration(String remotePath, String filter, String targetToken, String toCreateCatalogName,
- String remotePersistence, String rootFolderId) {
+ /**
+ * Instantiates a new th synch folder configuration.
+ *
+ * @param remotePath the remote path
+ * @param filter the filter
+ * @param targetContext the target context
+ * @param toCreateCatalogName the to create catalog name
+ * @param remotePersistence the remote persistence
+ * @param rootFolderId the root folder id
+ */
+ public ThSynchFolderConfiguration(String remotePath, String filter, String targetContext,
+ String toCreateCatalogName, String remotePersistence, String rootFolderId) {
super();
this.remotePath = remotePath;
this.filter = filter;
- this.targetToken = targetToken;
+ this.targetContext = targetContext;
this.toCreateCatalogName = toCreateCatalogName;
this.remotePersistence = remotePersistence;
this.rootFolderId = rootFolderId;
}
-
-
/**
+ * Gets the root folder id.
+ *
* @return the rootFolderId
*/
public String getRootFolderId() {
@@ -58,8 +66,9 @@ public class ThSynchFolderConfiguration implements Serializable{
return rootFolderId;
}
-
/**
+ * Sets the root folder id.
+ *
* @param rootFolderId the rootFolderId to set
*/
public void setRootFolderId(String rootFolderId) {
@@ -67,87 +76,105 @@ public class ThSynchFolderConfiguration implements Serializable{
this.rootFolderId = rootFolderId;
}
-
+ /**
+ * Gets the remote path.
+ *
+ * @return the remote path
+ */
public String getRemotePath() {
return remotePath;
}
-
-
-
+ /**
+ * Sets the remote path.
+ *
+ * @param remotePath the new remote path
+ */
public void setRemotePath(String remotePath) {
this.remotePath = remotePath;
}
-
-
-
+ /**
+ * Gets the filter.
+ *
+ * @return the filter
+ */
public String getFilter() {
return filter;
}
-
-
-
+ /**
+ * Sets the filter.
+ *
+ * @param filter the new filter
+ */
public void setFilter(String filter) {
this.filter = filter;
}
-
-
-
- public String getTargetToken() {
- return targetToken;
+ /**
+ * Gets the target context.
+ *
+ * @return the target context
+ */
+ public String getTargetContext() {
+ return targetContext;
}
-
-
-
- public void setTargetToken(String targetToken) {
- this.targetToken = targetToken;
+ /**
+ * Sets the target context.
+ *
+ * @param targetContext the new target context
+ */
+ public void setTargetContext(String targetContext) {
+ this.targetContext = targetContext;
}
-
-
-
+ /**
+ * Gets the to create catalog name.
+ *
+ * @return the to create catalog name
+ */
public String getToCreateCatalogName() {
return toCreateCatalogName;
}
-
-
-
+ /**
+ * Sets the to create catalog name.
+ *
+ * @param toCreateCatalogName the new to create catalog name
+ */
public void setToCreateCatalogName(String toCreateCatalogName) {
this.toCreateCatalogName = toCreateCatalogName;
}
-
-
-
+ /**
+ * Gets the remote persistence.
+ *
+ * @return the remote persistence
+ */
public String getRemotePersistence() {
return remotePersistence;
}
-
-
-
+ /**
+ * Sets the remote persistence.
+ *
+ * @param remotePersistence the new remote persistence
+ */
public void setRemotePersistence(String remotePersistence) {
this.remotePersistence = remotePersistence;
}
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
@Override
public String toString() {
-
StringBuilder builder = new StringBuilder();
builder.append("ThSynchFolderConfiguration [remotePath=");
builder.append(remotePath);
builder.append(", filter=");
builder.append(filter);
- builder.append(", targetToken=");
- builder.append(targetToken);
+ builder.append(", targetContext=");
+ builder.append(targetContext);
builder.append(", toCreateCatalogName=");
builder.append(toCreateCatalogName);
builder.append(", remotePersistence=");
@@ -158,5 +185,4 @@ public class ThSynchFolderConfiguration implements Serializable{
return builder.toString();
}
-
}
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/thredds/ThreddsConverter.java b/src/main/java/org/gcube/portal/wssynclibrary/thredds/ThreddsConverter.java
index 0d7e47c..fbdf465 100644
--- a/src/main/java/org/gcube/portal/wssynclibrary/thredds/ThreddsConverter.java
+++ b/src/main/java/org/gcube/portal/wssynclibrary/thredds/ThreddsConverter.java
@@ -3,28 +3,29 @@ package org.gcube.portal.wssynclibrary.thredds;
import java.util.function.Function;
import org.gcube.portal.wssynclibrary.shared.thredds.Status;
+import org.gcube.portal.wssynclibrary.shared.thredds.Sync_Status;
import org.gcube.portal.wssynclibrary.shared.thredds.ThCatalogueBean;
import org.gcube.portal.wssynclibrary.shared.thredds.ThProcessDescriptor;
import org.gcube.portal.wssynclibrary.shared.thredds.ThProcessStatus;
+import org.gcube.portal.wssynclibrary.shared.thredds.ThStepReport;
+import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncElementInfo;
import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncFolderDescriptor;
import org.gcube.portal.wssynclibrary.shared.thredds.ThSynchFolderConfiguration;
import org.gcube.usecases.ws.thredds.engine.impl.ProcessDescriptor;
import org.gcube.usecases.ws.thredds.engine.impl.ProcessStatus;
import org.gcube.usecases.ws.thredds.model.SyncFolderDescriptor;
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 org.gcube.usecases.ws.thredds.model.gui.CatalogBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
-
-
-// TODO: Auto-generated Javadoc
/**
* The Class ThreddsConverter.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Feb 14, 2018
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 14, 2018
+ * updated May 13, 2021
*/
public class ThreddsConverter {
@@ -35,135 +36,142 @@ public class ThreddsConverter {
/** The to S sync folder descriptor. */
public static Function toThSyncFolderDescriptor = new Function() {
- public ThSyncFolderDescriptor apply(SyncFolderDescriptor t) {
- ThSyncFolderDescriptor mySync = new ThSyncFolderDescriptor();
- if(t==null) {
- logger.info("Input "+SyncFolderDescriptor.class.getSimpleName()+" is null, returning empty "+ThSyncFolderDescriptor.class.getSimpleName());
- return mySync;
- }
+ public ThSyncFolderDescriptor apply(SyncFolderDescriptor t) {
+ ThSyncFolderDescriptor mySync = new ThSyncFolderDescriptor();
+ if (t == null) {
+ logger.info("Input " + SyncFolderDescriptor.class.getSimpleName() + " is null, returning empty "
+ + ThSyncFolderDescriptor.class.getSimpleName());
+ return mySync;
+ }
- mySync.setFolderId(t.getFolderId());
- mySync.setFolderPath(t.getFolderPath());
- mySync.setLocked(t.isLocked());
- ThProcessDescriptor localProcessDescriptor = toThProcessDescriptor.apply(t.getLocalProcessDescriptor());
+ mySync.setFolderId(t.getFolderId());
+ mySync.setFolderPath(t.getFolderPath());
+ mySync.setLocked(t.getIsLocked());
+ Sync_Status theSyncStatus = toSyncStatus.apply(t.getStatus());
+ mySync.setElementInfo(new ThSyncElementInfo(theSyncStatus));
+ ThProcessDescriptor localProcessDescriptor = toThProcessDescriptor.apply(t.getLocalProcessDescriptor());
mySync.setLocalProcessDescriptor(localProcessDescriptor);
ThSynchFolderConfiguration configuration = toThSynchFolderConfiguration.apply(t.getConfiguration());
mySync.setConfiguration(configuration);
- return mySync;
- }
+ return mySync;
+ }
};
/** The to S sync folder descriptor. */
public static Function toSyncFolderDescriptor = new Function() {
- public SyncFolderDescriptor apply(ThSyncFolderDescriptor t) {
+ public SyncFolderDescriptor apply(ThSyncFolderDescriptor t) {
- if(t==null) {
- logger.warn("Input "+ThSyncFolderDescriptor.class.getSimpleName()+" is null, returning null");
- return null;
- }
+ if (t == null) {
+ logger.warn("Input " + ThSyncFolderDescriptor.class.getSimpleName() + " is null, returning null");
+ return null;
+ }
- SynchFolderConfiguration configuration = toSynchFolderConfiguration.apply(t.getConfiguration());
- return new SyncFolderDescriptor(t.getFolderId(), t.getFolderPath(), configuration);
- }
+ SynchFolderConfiguration configuration = toSynchFolderConfiguration.apply(t.getConfiguration());
+ SynchronizedElementInfo sei = toSynchronizedElementInfo.apply(t.getElementInfo());
+ return new SyncFolderDescriptor(sei.getStatus(), t.getFolderId(), t.getFolderPath(), configuration,
+ t.isLocked());
+ }
};
/** The to synch folder configuration. */
public static Function toSynchFolderConfiguration = new Function() {
- public SynchFolderConfiguration apply(ThSynchFolderConfiguration t) {
+ public SynchFolderConfiguration apply(ThSynchFolderConfiguration t) {
- if(t==null) {
- logger.warn("Input "+ThSynchFolderConfiguration.class.getSimpleName()+" is null, returning null");
- return null;
- }
+ if (t == null) {
+ logger.warn("Input " + ThSynchFolderConfiguration.class.getSimpleName() + " is null, returning null");
+ return null;
+ }
- String filter = t.getFilter()!=null && !t.getFilter().isEmpty()?t.getFilter():THREDDS_FILTER_NC_NCML_ASC;
- return new SynchFolderConfiguration(t.getRemotePath(), filter, t.getTargetToken(), t.getToCreateCatalogName(), t.getRootFolderId());
- }
+ String filter = t.getFilter() != null && !t.getFilter().isEmpty() ? t.getFilter()
+ : THREDDS_FILTER_NC_NCML_ASC;
+ return new SynchFolderConfiguration(t.getRemotePath(), filter, t.getTargetContext(),
+ t.getToCreateCatalogName(), t.getRootFolderId());
+ }
};
-
/** The to S synch folder configuration. */
public static Function toThSynchFolderConfiguration = new Function() {
- public ThSynchFolderConfiguration apply(SynchFolderConfiguration t) {
- ThSynchFolderConfiguration mySync = new ThSynchFolderConfiguration();
- if(t==null) {
- logger.info("Input "+SynchFolderConfiguration.class.getSimpleName()+" is null, returning empty "+ThSynchFolderConfiguration.class.getSimpleName());
- return mySync;
- }
- mySync.setFilter(t.getFilter());
- mySync.setRemotePath(t.getRemotePath());
- mySync.setRemotePersistence(t.getRemotePersistence());
- mySync.setTargetToken(t.getTargetToken());
- mySync.setToCreateCatalogName(t.getToCreateCatalogName());
- mySync.setRootFolderId(t.getRootFolderId());
- return mySync;
- }
- };
+ public ThSynchFolderConfiguration apply(SynchFolderConfiguration t) {
+ ThSynchFolderConfiguration mySync = new ThSynchFolderConfiguration();
+ if (t == null) {
+ logger.info("Input " + SynchFolderConfiguration.class.getSimpleName() + " is null, returning empty "
+ + ThSynchFolderConfiguration.class.getSimpleName());
+ return mySync;
+ }
+ mySync.setFilter(t.getFilter());
+ mySync.setRemotePath(t.getRemotePath());
+ mySync.setRemotePersistence(t.getRemotePersistence());
+ mySync.setTargetContext(t.getTargetContext());
+ mySync.setToCreateCatalogName(t.getToCreateCatalogName());
+ mySync.setRootFolderId(t.getRootFolderId());
+ return mySync;
+ }
+ };
/** The to S sync folder descriptor. */
public static Function toThProcessDescriptor = new Function() {
- public ThProcessDescriptor apply(ProcessDescriptor t) {
- ThProcessDescriptor mySync = new ThProcessDescriptor();
- if(t==null) {
- logger.info("Input "+ProcessDescriptor.class.getSimpleName()+" is null, returning empty "+ThProcessDescriptor.class.getSimpleName());
- return mySync;
- }
+ public ThProcessDescriptor apply(ProcessDescriptor t) {
+ ThProcessDescriptor mySync = new ThProcessDescriptor();
+ if (t == null) {
+ logger.info("Input " + ProcessDescriptor.class.getSimpleName() + " is null, returning empty "
+ + ThProcessDescriptor.class.getSimpleName());
+ return mySync;
+ }
- mySync.setFolderId(t.getFolderId());
- mySync.setFolderPath(t.getFolderPath());
- mySync.setProcessId(t.getProcessId());
- ThSynchFolderConfiguration fc = toThSynchFolderConfiguration.apply(t.getSynchConfiguration());
- mySync.setSynchConfiguration(fc);
- return mySync;
- }
+ mySync.setFolderId(t.getFolderId());
+ mySync.setFolderPath(t.getFolderPath());
+ mySync.setProcessId(t.getProcessId());
+ ThSynchFolderConfiguration fc = toThSynchFolderConfiguration.apply(t.getSynchConfiguration());
+ mySync.setSynchConfiguration(fc);
+ return mySync;
+ }
};
-
/** The to th catalogue bean. */
public static Function toThCatalogueBean = new Function() {
@Override
public ThCatalogueBean apply(CatalogBean t) {
- if(t==null)
+ if (t == null)
return null;
return new ThCatalogueBean(t.getName(), t.getPath(), t.getIsDefault());
}
};
-
/** The to th process status. */
public static Function toThProcessStatus = new Function() {
- public ThProcessStatus apply(ProcessStatus t) {
- ThProcessStatus mySync = new ThProcessStatus();
- if(t==null) {
- logger.info("Input "+ProcessStatus.class.getSimpleName()+" is null, returning empty "+ThProcessStatus.class.getSimpleName());
- return mySync;
- }
+ public ThProcessStatus apply(ProcessStatus t) {
+ ThProcessStatus mySync = new ThProcessStatus();
+ if (t == null) {
+ logger.info("Input " + ProcessStatus.class.getSimpleName() + " is null, returning empty "
+ + ThProcessStatus.class.getSimpleName());
+ return mySync;
+ }
- mySync.setCurrentMessage(t.getCurrentMessage());
- mySync.setPercentCompleted(t.getPercent());
+ mySync.setCurrentMessage(t.getCurrentMessage());
+ mySync.setPercentCompleted(t.getPercent());
- if(t.getErrorCount()!=null)
- mySync.setErrorCount(t.getErrorCount().get());
- if(t.getLogBuilder()!=null)
- mySync.setLogBuilder(t.getLogBuilder().toString());
- if(t.getQueuedTransfers()!=null)
- mySync.setQueuedTransfers(t.getQueuedTransfers().get());
- if(t.getServedTransfers()!=null)
- mySync.setServedTransfers(t.getServedTransfers().get());
+ if (t.getErrorCount() != null)
+ mySync.setErrorCount(t.getErrorCount().get());
+ if (t.getLogBuilder() != null)
+ mySync.setLogBuilder(t.getLogBuilder().toString());
+ if (t.getQueuedTransfers() != null)
+ mySync.setQueuedTransfers(t.getQueuedTransfers().get());
+ if (t.getServedTransfers() != null)
+ mySync.setServedTransfers(t.getServedTransfers().get());
- if(t.getStatus()!=null) {
+ if (t.getStatus() != null) {
- switch (t.getStatus()) {
+ switch (t.getStatus()) {
case COMPLETED:
mySync.setStatus(Status.COMPLETED);
break;
@@ -183,12 +191,87 @@ public class ThreddsConverter {
default:
break;
}
- }
- //mySync.setStatus(t.getStatus());
- return mySync;
- }
+ }
+ return mySync;
+ }
};
+ public static Function toThSyncElementInfo = new Function() {
+ public ThSyncElementInfo apply(SynchronizedElementInfo sei) {
+ if (sei == null) {
+ logger.info("Input " + SynchronizedElementInfo.class.getSimpleName() + " is null, returning null "
+ + ThSyncElementInfo.class.getSimpleName());
+ return null;
+ }
+
+ ThSyncElementInfo toReturn = new ThSyncElementInfo();
+ Sync_Status theSyncStatus = toSyncStatus.apply(sei.getStatus());
+ toReturn.setSyncStatus(theSyncStatus);
+ toReturn.setLastupdateTime(sei.getLastupdateTime());
+ String lastSyncStatus = sei.getLastSynchronizationStatus() != null
+ ? sei.getLastSynchronizationStatus().name()
+ : null;
+ toReturn.setStepReport(new ThStepReport(lastSyncStatus));
+ return toReturn;
+ }
+ };
+
+ public static Function toSyncStatus = new Function() {
+
+ public Sync_Status apply(SynchronizationStatus synchronizationStatus) {
+
+ if (synchronizationStatus == null) {
+ logger.info("Input " + SynchronizationStatus.class.getSimpleName() + " is null, returning null "
+ + Sync_Status.class.getSimpleName());
+ return null;
+ }
+
+ if (synchronizationStatus != null) {
+ switch (synchronizationStatus) {
+ case UP_TO_DATE:
+ return Sync_Status.UP_TO_DATE;
+ case OUTDATED_WS:
+ return Sync_Status.OUTDATED_WS;
+ case OUTDATED_REMOTE:
+ return Sync_Status.OUTDATED_REMOTE;
+ default:
+ break;
+ }
+ }
+ return null;
+ }
+ };
+
+ public static Function toSynchronizedElementInfo = new Function() {
+
+ public SynchronizedElementInfo apply(ThSyncElementInfo sei) {
+
+ if (sei == null) {
+ logger.info("Input " + ThSyncElementInfo.class.getSimpleName() + " is null, returning null "
+ + SynchronizedElementInfo.class.getSimpleName());
+ return null;
+ }
+
+ Sync_Status status = sei.getSyncStatus();
+ SynchronizationStatus theStatus = null;
+ if (status != null) {
+
+ switch (status) {
+ case UP_TO_DATE:
+ theStatus = SynchronizedElementInfo.SynchronizationStatus.UP_TO_DATE;
+ break;
+ case OUTDATED_WS:
+ theStatus = SynchronizedElementInfo.SynchronizationStatus.OUTDATED_WS;
+ break;
+ case OUTDATED_REMOTE:
+ theStatus = SynchronizedElementInfo.SynchronizationStatus.OUTDATED_REMOTE;
+ default:
+ break;
+ }
+ }
+ return new SynchronizedElementInfo(theStatus);
+ }
+ };
}
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronize.java b/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronize.java
index ac44864..aafd53a 100644
--- a/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronize.java
+++ b/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronize.java
@@ -7,15 +7,13 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import org.gcube.common.scope.api.ScopeProvider;
-import org.gcube.common.storagehub.client.dsl.StorageHubClient;
import org.gcube.portal.wssynclibrary.shared.ItemNotSynched;
import org.gcube.portal.wssynclibrary.shared.WorkspaceFolderLocked;
import org.gcube.portal.wssynclibrary.shared.thredds.Status;
-import org.gcube.portal.wssynclibrary.shared.thredds.Sync_Status;
import org.gcube.portal.wssynclibrary.shared.thredds.ThCatalogueBean;
import org.gcube.portal.wssynclibrary.shared.thredds.ThProcessDescriptor;
import org.gcube.portal.wssynclibrary.shared.thredds.ThProcessStatus;
+import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncElementInfo;
import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncFolderDescriptor;
import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncStatus;
import org.gcube.portal.wssynclibrary.shared.thredds.ThSynchFolderConfiguration;
@@ -27,36 +25,33 @@ import org.gcube.usecases.ws.thredds.faults.ProcessNotFoundException;
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.ContainerType;
import org.gcube.usecases.ws.thredds.model.SyncFolderDescriptor;
import org.gcube.usecases.ws.thredds.model.SyncOperationCallBack;
import org.gcube.usecases.ws.thredds.model.SynchFolderConfiguration;
+import org.gcube.usecases.ws.thredds.model.SynchronizedElementInfo;
import org.gcube.usecases.ws.thredds.model.gui.CatalogBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
// TODO: Auto-generated Javadoc
/**
* The Class WorkspaceThreddsSynchronize.
*
- * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it
- * Feb 14, 2018
+ * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 14, 2018
*/
-public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronizedRepository{
+public class WorkspaceThreddsSynchronize
+ implements WorkspaceThreddsSynchronizedRepository {
/** The logger. */
private static Logger logger = LoggerFactory.getLogger(WorkspaceThreddsSynchronize.class);
/** The engine. */
- private SyncEngine engine=null;
+ private SyncEngine engine = null;
/** The instance. */
private static WorkspaceThreddsSynchronize instance = null;
- private static StorageHubClient storageHubInstance;
-
- public static final String WS_SYNCH_SYNCH_STATUS = "WS-SYNCH.SYNCH-STATUS";
-
/** The map call back. */
// Fully synchronized HashMap
private Map mapCallBack = Collections.synchronizedMap(new HashMap<>());
@@ -69,7 +64,6 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
engine = SyncEngine.get();
}
-
/**
* Gets the single instance of WorkspaceThreddsSynchronize.
*
@@ -78,109 +72,86 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
public static WorkspaceThreddsSynchronize getInstance() {
if (instance == null) {
instance = new WorkspaceThreddsSynchronize();
- storageHubInstance = new StorageHubClient();
}
return instance;
}
- /**
- * Gets the storage hub instance.
- *
- * @return the storage hub instance
- */
- public static StorageHubClient getStorageHubInstance() {
-
- if(storageHubInstance==null)
- storageHubInstance = new StorageHubClient();
-
- return storageHubInstance;
-
- }
-
-
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#isItemSynchronized(java.lang.String)
- */
/**
* Check item synched.
*
* @param itemId the item id
* @return the th sync folder descriptor
- * @throws ItemNotSynched the item not synched
+ * @throws ItemNotSynched the item not synched
* @throws WorkspaceFolderLocked the workspace folder locked
- * @throws Exception the exception
+ * @throws Exception the exception
*/
@Override
- public ThSyncFolderDescriptor checkItemSynched(String itemId) throws ItemNotSynched, WorkspaceFolderLocked, Exception {
- logger.debug("Perfoming checkItemSynched for id: "+itemId);
+ public ThSyncFolderDescriptor checkItemSynched(String itemId)
+ throws ItemNotSynched, WorkspaceFolderLocked, Exception {
+ logger.debug("Perfoming checkItemSynched for id: " + itemId);
try {
// WHEN OPENING A FOLDER, INVOKE CHECK TO UPDATE SYNCH STATUS
SyncFolderDescriptor desc = engine.check(itemId, false);
- logger.debug("The item id: "+itemId +" is synched");
+ logger.debug("The item id: " + itemId + " is synched");
ThSyncFolderDescriptor descr = ThreddsConverter.toThSyncFolderDescriptor.apply(desc);
- logger.trace("CheckItemSynched for id: "+itemId+" returning descriptor: "+descr);
+ logger.trace("CheckItemSynched for id: " + itemId + " returning descriptor: " + descr);
return descr;
- }catch(WorkspaceNotSynchedException e) {
- String err = "The item id: "+itemId +" is not synched";
+ } catch (WorkspaceNotSynchedException e) {
+ String err = "The item id: " + itemId + " is not synched";
logger.trace(err);
- throw new ItemNotSynched("The item id: "+itemId +" is not synched");
+ throw new ItemNotSynched("The item id: " + itemId + " is not synched");
// System.out.println("Folder not synched, configurin it..");
- //engine.setSynchronizedFolder(config, folder.getId());
- }catch(WorkspaceLockedException e) {
- //logger.warn("Workspace locked, going to force unlock..");
- throw new WorkspaceFolderLocked(itemId, "The folder id: "+itemId +" is currently locked. Another sync process is in progress");
- //engine.forceUnlock(itemId);
+ // engine.setSynchronizedFolder(config, folder.getId());
+ } catch (WorkspaceLockedException e) {
+ // logger.warn("Workspace locked, going to force unlock..");
+ throw new WorkspaceFolderLocked(itemId,
+ "The folder id: " + itemId + " is currently locked. Another sync process is in progress");
+ // engine.forceUnlock(itemId);
} catch (WorkspaceInteractionException | InternalException e) {
- logger.error("Error: ",e);
- if(e instanceof WorkspaceInteractionException)
- throw new Exception("Sorry, an error occurred during check syncronization due to WS interection for the itemId: "+itemId);
- else if(e instanceof InternalException)
- throw new Exception("Sorry, an Internal Exception occurred during check syncronization for the itemId: "+itemId);
+ logger.error("Error: ", e);
+ if (e instanceof WorkspaceInteractionException)
+ throw new Exception(
+ "Sorry, a WorkspaceInteraction error occurred during check syncronization for the itemId: "
+ + itemId+". Try again or contact the support");
+ else if (e instanceof InternalException)
+ throw new Exception(
+ "Sorry, an Internal error occurred during check syncronization for the itemId: " + itemId+". Try again or contact the support");
- throw new Exception("Sorry, an error occurred server side during chck syncronization for the itemId: "+itemId);
+ throw new Exception(
+ "Sorry, an error occurred server side during chck syncronization for the itemId: " + itemId+". Try again or contact the support");
}
}
-
-
/**
* Sets the synchronized folder.
*
* @param thConfig the th config
- * @param itemId the item id
+ * @param itemId the item id
* @return the th sync folder descriptor
* @throws Exception the exception
*/
- public ThSyncFolderDescriptor setSynchronizedFolder(ThSynchFolderConfiguration thConfig, String itemId) throws Exception {
+ public ThSyncFolderDescriptor setSynchronizedFolder(ThSynchFolderConfiguration thConfig, String itemId)
+ throws Exception {
SynchFolderConfiguration config = ThreddsConverter.toSynchFolderConfiguration.apply(thConfig);
- if(thConfig.getRemotePath()==null || thConfig.getRemotePath().isEmpty())
+ if (thConfig.getRemotePath() == null || thConfig.getRemotePath().isEmpty())
throw new Exception("A valid remote path must be provided");
- if(thConfig.getToCreateCatalogName()==null || thConfig.getToCreateCatalogName().isEmpty())
+ if (thConfig.getToCreateCatalogName() == null || thConfig.getToCreateCatalogName().isEmpty())
throw new Exception("A valid Catalogue Name must be provided");
- if(thConfig.getTargetToken()==null || thConfig.getTargetToken().isEmpty())
- throw new Exception("A valid Target Token must be provided");
-
try {
engine.setSynchronizedFolder(config, itemId);
} catch (WorkspaceInteractionException | InternalException e) {
- logger.error("Error on setSynchronizedFolder for config: "+thConfig);
- logger.error("Using itemId: "+itemId,e);
+ logger.error("Error on setSynchronizedFolder for config: " + thConfig);
+ logger.error("Using itemId: " + itemId, e);
throw new Exception("Error on setSynchronizedFolder");
}
return null;
}
-
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#doSynchronization(java.lang.String)
- */
/**
* Do sync.
*
@@ -196,7 +167,7 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
ProcessDescriptor descriptor = engine.doSync(itemId);
ThSyncStatus synStatus = mapCallBack.get(itemId);
- if(synStatus==null) {
+ if (synStatus == null) {
registerCallbackForId(itemId);
descriptor = engine.getProcessDescriptorByFolderId(itemId);
@@ -204,33 +175,23 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
updateMapCallback(itemId, status, descriptor);
}
- logger.debug("DoSync returning status: "+synStatus);
+ logger.debug("DoSync returning status: " + synStatus);
return synStatus;
} catch (WorkspaceInteractionException | InternalException | ProcessNotFoundException e) {
- logger.error("Error: ",e);
-
- if(e instanceof WorkspaceInteractionException)
- throw new Exception("Sorry, an error occurred during syncronization due to WS interection for the itemId: "+itemId);
- else if(e instanceof InternalException)
- throw new Exception("Sorry, an Internal Exception occurred during syncronization for the itemId: "+itemId);
-
- throw new Exception("Sorry, an error occurred server side during syncronization for the itemId: "+itemId);
+ logger.error("DoSync Error: ", e);
+ throw e;
}
}
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.DoSyncItem#getSyncStatus(java.lang.String)
- */
/**
* Monitor sync status.
*
* @param itemId the item id
* @return the th sync status
* @throws ItemNotSynched the item not synched
- * @throws Exception the exception
+ * @throws Exception the exception
*/
@Override
public ThSyncStatus monitorSyncStatus(String itemId) throws ItemNotSynched, Exception {
@@ -238,8 +199,8 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
try {
ThSyncStatus synStatus = mapCallBack.get(itemId);
- if(synStatus==null) {
- try{
+ if (synStatus == null) {
+ try {
registerCallbackForId(itemId);
ProcessDescriptor descriptor = engine.getProcessDescriptorByFolderId(itemId);
@@ -247,84 +208,272 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
updateMapCallback(itemId, status, descriptor);
ThSyncStatus thSyncStatus = mapCallBack.get(itemId);
- if(thSyncStatus==null)
- throw new Exception("No sync status found for item id: "+itemId);
+ if (thSyncStatus == null)
+ throw new Exception("No sync status found for item id: " + itemId);
return thSyncStatus;
- }catch(ProcessNotFoundException e){
- throw new Exception("Monitor is not available here. The sync process is in progress on another machine");
+ } catch (ProcessNotFoundException e) {
+ throw new Exception(
+ "Monitor is not available here. The sync process is in progress on another machine");
}
}
- if(synStatus.getProcessStatus()!=null) {
- if(synStatus.getProcessStatus().getStatus()!=null) {
- if(synStatus.getProcessStatus().getStatus().equals(Status.COMPLETED)) {
- //TODO NOW?
+ if (synStatus.getProcessStatus() != null) {
+ if (synStatus.getProcessStatus().getStatus() != null) {
+ if (synStatus.getProcessStatus().getStatus().equals(Status.COMPLETED)) {
+ // TODO NOW?
mapCallBack.put(itemId, null);
}
}
}
- logger.trace("MonitorSyncStatus for item: "+itemId+" returning: "+synStatus);
+ logger.trace("MonitorSyncStatus for item: " + itemId + " returning: " + synStatus);
return synStatus;
} catch (Exception e) {
- throw new Exception("Sorry, an error occurred during getting sync status for itemId: "+itemId, e);
+ throw new Exception("Sorry, an error occurred during getting sync status for itemId: " + itemId, e);
}
}
+ /**
+ * Register callback for id.
+ *
+ * @param itemId the item id
+ * @throws ProcessNotFoundException the process not found exception
+ * @throws Exception the exception
+ */
+ @Override
+ public void registerCallbackForId(String itemId) throws ProcessNotFoundException, Exception {
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#removeSync(java.lang.String)
+ try {
+
+ SyncOperationCallBack callback = new SyncOperationCallBack() {
+
+ @Override
+ public void onStep(ProcessStatus status, ProcessDescriptor descriptor) {
+ logger.debug("ON STEP : " + status + " " + descriptor);
+ logger.debug("LOG : \n" + status.getLogBuilder().toString());
+ if (status.getStatus().equals(ProcessStatus.Status.COMPLETED)) {
+ // mapCallBack.remove(itemId);
+ }
+ updateMapCallback(itemId, status, descriptor);
+ }
+ };
+
+ // REGISTER CALLBACK TO MONITOR PROGRESS
+ logger.debug("Registering callback for itemId: " + itemId);
+ engine.registerCallBack(itemId, callback);
+ } catch (ProcessNotFoundException e) {
+ logger.error("Register callback for id: " + itemId + " threw ProcessNotFoundException: ", e);
+ throw e;
+ } catch (Exception e) {
+ logger.error("Register callback exception: ", e);
+ throw new Exception("An error occurred on registering callback for: " + itemId, e);
+ }
+ }
+
+ /**
+ * Update map callback.
+ *
+ * @param itemId the item id
+ * @param status the status
+ * @param descriptor the descriptor
+ */
+ private void updateMapCallback(String itemId, ProcessStatus status, ProcessDescriptor descriptor) {
+ ThProcessDescriptor thDesc = ThreddsConverter.toThProcessDescriptor.apply(descriptor);
+ ThProcessStatus thStatus = ThreddsConverter.toThProcessStatus.apply(status);
+ mapCallBack.put(itemId, new ThSyncStatus(thDesc, thStatus));
+ logger.debug("Update map for " + itemId + " with new " + thStatus);
+ }
+
+ /**
+ * Gets the available catalogues. you need to set the context caller.
+ *
+ * @return the available catalogues
+ * @throws Exception the exception
+ */
+ public List getAvailableCatalogues() throws Exception {
+ logger.debug("called Get Available Catalogues");
+ Set ctlgs = engine.getAvailableCatalogs();
+
+ if (ctlgs == null || ctlgs.size() == 0) {
+ logger.info("No Catalogue available in the current context, returning empty list");
+ return new ArrayList(1);
+ }
+
+ List listCtlgs = new ArrayList(ctlgs.size());
+ for (CatalogBean bean : ctlgs) {
+ logger.debug(bean.getName() + " in " + bean.getPath() + " Default : " + bean.getIsDefault());
+ ThCatalogueBean toBean = ThreddsConverter.toThCatalogueBean.apply(bean);
+ if (toBean != null)
+ listCtlgs.add(toBean);
+ }
+
+ Collections.sort(listCtlgs);
+ logger.info("Returning sorted Catalogue list with: " + listCtlgs.size() + " item/s");
+ return listCtlgs;
+ }
+
+ /**
+ * Do un sync.
+ *
+ * @param itemId the item id
+ * @param deleteRemoteContent the delete remote content
+ * @return the boolean
+ * @throws Exception the exception
+ */
+ @Override
+ public Boolean doUnSync(String itemId, boolean deleteRemoteContent) throws Exception {
+
+ if (itemId == null)
+ throw new Exception("Invalid parameter: itemId is null");
+
+ try {
+ engine.unsetSynchronizedFolder(itemId, deleteRemoteContent);
+ return true;
+ } catch (Exception e) {
+ logger.error("Unset Syncronized folder exception: ", e);
+ throw new Exception("An error occurred on deleting configuration to the item id: " + itemId, e);
+ }
+ }
+
+ /**
+ * Gets the configuration.
+ *
+ * @param itemId the item id
+ * @return the configuration
+ * @throws WorkspaceInteractionException the workspace interaction exception
+ * @throws WorkspaceNotSynchedException the workspace not synched exception
+ * @throws Exception the exception
+ *
+ * NB. it is time consuming due to it
+ * calls the SHUB
+ */
+ @Override
+ public ThSyncFolderDescriptor getConfiguration(String itemId)
+ throws WorkspaceInteractionException, WorkspaceNotSynchedException, Exception {
+
+ if (itemId == null)
+ throw new Exception("Invalid parameter: itemId is null");
+
+ SynchFolderConfiguration syncFolderConfig = engine.getConfig(itemId);
+ ThSynchFolderConfiguration toFolderConfig = ThreddsConverter.toThSynchFolderConfiguration
+ .apply(syncFolderConfig);
+
+ return new ThSyncFolderDescriptor(itemId, null, toFolderConfig, false, null, null);
+
+ }
+
+ /**
+ * Gets the element info.
+ *
+ * @param itemProperties the item properties read from SHUB by accessing to
+ * Metadata.Map() of a item
+ * @param itemType the item type
+ * @return the element info
+ * @throws WorkspaceNotSynchedException the workspace not synched exception
+ */
+ public ThSyncElementInfo getElementInfo(Map itemProperties, ContainerType itemType)
+ throws WorkspaceNotSynchedException {
+
+ if (itemProperties == null || itemProperties.isEmpty())
+ return null;
+
+ SynchronizedElementInfo theSEI = SyncEngine.parseInfo(itemProperties, itemType);
+ logger.debug("the SynchronizedElementInfo returned is: "+theSEI);
+ return ThreddsConverter.toThSyncElementInfo.apply(theSEI);
+
+ }
+
+ /**
+ * Checks if is item synched. This calls the {@link SyncEngine#parseInfo(Map, ContainerType)}
+ *
+ * @param itemId the item id
+ * @param itemProperties the item properties
+ * @param itemType the item type
+ * @return true, if is item synched
+ */
+ public boolean isItemSynched(String itemId, Map itemProperties, ContainerType itemType) {
+
+ ThSyncElementInfo sinInfo = null;
+ try {
+ sinInfo = getElementInfo(itemProperties, itemType);
+ } catch (WorkspaceNotSynchedException e) {
+ logger.debug("WorkspaceNotSynchedException catched, the item id: " + itemId + " is not synched");
+ } catch (Exception e) {
+ logger.debug("Error on getting SyncElementInfo for the item id: " + itemId
+ + ", returning null (means not synched)", e);
+ }
+
+ if (sinInfo != null)
+ return true;
+
+ return false;
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#removeSync(
+ * java.lang.String)
*/
/**
* Removes the sync.
*
* @param itemId the item id
* @return the boolean
+ * @throws Exception the exception
*/
@Override
- public Boolean removeSync(String itemId) {
- return null;
- // TODO Auto-generated method stub
-
+ public Boolean removeSync(String itemId) throws Exception {
+ throw new Exception("removeSync not implemented");
}
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#stopSync(java.lang.String)
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#stopSync(java.
+ * lang.String)
*/
/**
* Stop sync.
*
* @param itemId the item id
* @return the boolean
+ * @throws Exception the exception
*/
@Override
- public Boolean stopSync(String itemId) {
- return false;
-
+ public Boolean stopSync(String itemId) throws Exception {
+ throw new Exception("stopSync not implemented");
}
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#initRepository()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#initRepository
+ * ()
*/
/**
* Inits the repository.
*
* @return the boolean
+ * @throws Exception the exception
*/
@Override
- public Boolean initRepository() {
- return false;
-
+ public Boolean initRepository() throws Exception {
+ throw new Exception("initRepository not implemented");
}
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#shutDownRepository()
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.gcube.portal.wssynclibrary.WorkspaceSynchronizedRepository#
+ * shutDownRepository()
*/
/**
* Shut down repository.
@@ -336,15 +485,18 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
try {
engine.shutDown();
return true;
- }catch (Exception e) {
+ } catch (Exception e) {
return null;
}
}
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.thredds.WorkspaceThreddsSynchronizedRepository#decribeSyncRepository()
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.gcube.portal.wssynclibrary.thredds.WorkspaceThreddsSynchronizedRepository
+ * #decribeSyncRepository()
*/
/**
* Decribe sync repository.
@@ -356,154 +508,4 @@ public class WorkspaceThreddsSynchronize implements WorkspaceThreddsSynchronized
return "Sync repository for Thredds";
}
-
- /**
- * Gets the synched status from item property.
- *
- * @param itemId the item id
- * @param username the username
- * @return the synched status from item property
- * @throws ItemNotSynched the item not synched
- * @throws Exception the exception
- */
- public Sync_Status getSynchedStatusFromItemProperty(String itemId, String username) throws ItemNotSynched, Exception{
-
- if(itemId==null)
- throw new Exception("Invalid parameter itemId is null");
-
- String scope = ScopeProvider.instance.get();
- if(scope == null || scope.isEmpty())
- throw new Exception("You must set a valid scope into ScopeProvider instance");
-
- String wsSyncStatus = null;
- try{
-
- Map map = storageHubInstance.open(itemId).asItem().get().getMetadata().getMap();
- wsSyncStatus = (String) map.get(WS_SYNCH_SYNCH_STATUS);
- logger.debug("Item id: "+itemId+" read from Shub has current: "+WS_SYNCH_SYNCH_STATUS +" value at: "+wsSyncStatus);
- if(wsSyncStatus==null)
- return null;
-
- return Sync_Status.valueOf(wsSyncStatus);
- }catch (Exception e) {
- logger.warn(wsSyncStatus + " is not value of "+Sync_Status.values()+", returning null");
- return null;
- }
- }
-
-
- /**
- * Register callback for id.
- *
- * @param itemId the item id
- * @throws ProcessNotFoundException the process not found exception
- * @throws Exception the exception
- */
- @Override
- public void registerCallbackForId(String itemId) throws ProcessNotFoundException, Exception{
-
- try {
-
- SyncOperationCallBack callback = new SyncOperationCallBack() {
-
- @Override
- public void onStep(ProcessStatus status, ProcessDescriptor descriptor) {
- logger.debug("ON STEP : "+status+" "+descriptor);
- logger.debug("LOG : \n"+ status.getLogBuilder().toString());
- if(status.getStatus().equals(ProcessStatus.Status.COMPLETED)) {
- //mapCallBack.remove(itemId);
- }
- updateMapCallback(itemId, status, descriptor);
- }
- };
-
- // REGISTER CALLBACK TO MONITOR PROGRESS
- logger.debug("Registering callback on itemId: "+itemId);
- engine.registerCallBack(itemId, callback);
- }catch (ProcessNotFoundException e) {
- logger.error("Register callback for id: "+itemId+" threw ProcessNotFoundException: ", e);
- throw e;
- }catch (Exception e) {
- logger.error("Register callback exception: ",e);
- throw new Exception("An error occurred on registering callback for: "+itemId, e);
- }
- }
-
-
- /**
- * Update map callback.
- *
- * @param itemId the item id
- * @param status the status
- * @param descriptor the descriptor
- */
- private void updateMapCallback(String itemId, ProcessStatus status, ProcessDescriptor descriptor) {
- ThProcessDescriptor thDesc = ThreddsConverter.toThProcessDescriptor.apply(descriptor);
- ThProcessStatus thStatus = ThreddsConverter.toThProcessStatus.apply(status);
- mapCallBack.put(itemId, new ThSyncStatus(thDesc, thStatus));
- logger.debug("Update map for "+itemId +" with new "+thStatus);
- }
-
-
-
- /**
- * Gets the available catalogues by token.
- *
- * @param token the token
- * @return the available catalogues by token
- * @throws Exception the exception
- */
- public List getAvailableCataloguesByToken(String token) throws Exception{
-
- if(token==null || token.isEmpty())
- throw new Exception("Invalid parameter token null or empty");
-
- String printToken = token.substring(0, token.length()-5)+"XXXXX";
- logger.debug("Get Available Catalogues by token: "+printToken);
- Set ctlgs = engine.getAvailableCatalogsByToken(token);
-
- if(ctlgs==null || ctlgs.size()==0){
- logger.debug("No Catalogue available for token: "+printToken +" returning empty list");
- return new ArrayList(1);
- }
-
- List listCtlgs = new ArrayList(ctlgs.size());
- for(CatalogBean bean: ctlgs){
- System.out.println(bean.getName()+" in "+bean.getPath()+" Default : "+bean.getIsDefault());
- ThCatalogueBean toBean = ThreddsConverter.toThCatalogueBean.apply(bean);
- if(toBean!=null)
- listCtlgs.add(toBean);
- }
-
- Collections.sort(listCtlgs);
- logger.debug("Returning sorted Catalogue list with: "+listCtlgs.size() +" item/s");
- return listCtlgs;
- }
-
-
- /* (non-Javadoc)
- * @see org.gcube.portal.wssynclibrary.DoSyncItem#doUnSync(java.lang.String)
- */
- /**
- * Do un sync.
- *
- * @param itemId the item id
- * @param deleteRemoteContent the delete remote content
- * @return the boolean
- * @throws Exception the exception
- */
- @Override
- public Boolean doUnSync(String itemId, boolean deleteRemoteContent) throws Exception {
-
- if(itemId==null)
- throw new Exception("Invalid parameter: itemId is null");
-
- try{
- engine.unsetSynchronizedFolder(itemId, deleteRemoteContent);
- return true;
- }catch(Exception e){
- logger.error("Unset Syncronized folder exception: ",e);
- throw new Exception("An error occurred on deleting configuration to the item id: "+itemId, e);
- }
- }
}
diff --git a/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronizedRepository.java b/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronizedRepository.java
index e18371d..25a9c3b 100644
--- a/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronizedRepository.java
+++ b/src/main/java/org/gcube/portal/wssynclibrary/thredds/WorkspaceThreddsSynchronizedRepository.java
@@ -4,8 +4,6 @@ import org.gcube.portal.wssynclibrary.DoCheckSyncItem;
import org.gcube.portal.wssynclibrary.DoConnectRepository;
import org.gcube.portal.wssynclibrary.DoSyncItem;
-
-// TODO: Auto-generated Javadoc
/**
* The Interface WorkspaceThreddsSynchronizedRepository.
*
diff --git a/target/.gitignore b/target/.gitignore
deleted file mode 100644
index 840e7d3..0000000
--- a/target/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/classes/