From f2dc0cce19ed189a9a4b3a1d1de292e55a80aaf2 Mon Sep 17 00:00:00 2001 From: "francesco.mangiacrapa" Date: Mon, 10 May 2021 18:08:39 +0200 Subject: [PATCH] in progess --- .../wsthreddssync/server/BeanConverter.java | 3 - .../server/SyncronizeWithThredds.java | 251 +++++++++--------- .../ThreddsWorkspaceSyncServiceImpl.java | 109 ++++---- .../WsThreddsSynchFolderDescriptor.java | 10 +- 4 files changed, 196 insertions(+), 177 deletions(-) diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/BeanConverter.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/BeanConverter.java index 3593a6f..e57055b 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/BeanConverter.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/BeanConverter.java @@ -1,8 +1,5 @@ package org.gcube.portlets.widgets.wsthreddssync.server; -import static org.gcube.common.authorization.client.Constants.authorizationService; - -import org.gcube.common.authorization.library.AuthorizationEntry; import org.gcube.portal.wssynclibrary.shared.thredds.Sync_Status; import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncFolderDescriptor; import org.gcube.portal.wssynclibrary.shared.thredds.ThSynchFolderConfiguration; diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/SyncronizeWithThredds.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/SyncronizeWithThredds.java index 5ca8e2c..c41c12e 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/SyncronizeWithThredds.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/SyncronizeWithThredds.java @@ -21,6 +21,7 @@ import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncFolderDescriptor; import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncStatus; import org.gcube.portal.wssynclibrary.shared.thredds.ThSynchFolderConfiguration; import org.gcube.portal.wssynclibrary.thredds.WorkspaceThreddsSynchronize; +import org.gcube.usecases.ws.thredds.faults.WorkspaceNotSynchedException; import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,55 +45,54 @@ public class SyncronizeWithThredds { /** The Constant sdf. */ //private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); - /** * Instantiates a new publish on thredds. * * @param wsScopeUserToken the ws scope user token - * @param username the username - * @param httpSession the http session + * @param username the username + * @param httpSession the http session */ public SyncronizeWithThredds() { this.workspaceThreddsSynchronize = WorkspaceThreddsSynchronize.getInstance(); } - /** * Sets the context parameters. * - * @param scope the scope + * @param scope the scope * @param userToken the user token */ private void setContextParameters(String scope, String userToken) { - logger.debug("Setting context parameters with scope: "+scope +", user token: "+userToken.substring(0,10)+"-MASKED-TOKEN"); + logger.debug("Setting context parameters with scope: " + scope + ", user token: " + userToken.substring(0, 10) + + "-MASKED-TOKEN"); ScopeProvider.instance.set(scope); SecurityTokenProvider.instance.set(userToken); } - /** * Change context for UMA. * * @param httpRequest the http request - * @param user the user + * @param user the user * @param targetScope the target scope - * @return the string representing the previous UMA Token read from {@link UmaJWTProvider#get()} + * @return the string representing the previous UMA Token read from + * {@link UmaJWTProvider#get()} */ private String changeContextForUMA(HttpServletRequest httpRequest, GCubeUser user, String targetScope) { - logger.debug("Setting UMA context with target scope: "+targetScope +", user: "+user.getUsername()); + logger.debug("Setting UMA context with target scope: " + targetScope + ", user: " + user.getUsername()); String previousUMAToken = null; try { - previousUMAToken=UmaJWTProvider.instance.get(); + previousUMAToken = UmaJWTProvider.instance.get(); JWTToken umaToken = OIDCUmaUtil.getUMAToken(httpRequest, user.getUsername(), targetScope); setContextForUMA(umaToken.getRaw()); - }catch (Exception e) { - logger.warn("Error on set context for UMA: ",e); - if(previousUMAToken!=null) { - logger.info("Setting previous UMA Token: "+previousUMAToken.substring(0,10)+"-MASKED-TOKEN"); + } catch (Exception e) { + logger.warn("Error on set context for UMA: ", e); + if (previousUMAToken != null) { + logger.info("Setting previous UMA Token: " + previousUMAToken.substring(0, 10) + "-MASKED-TOKEN"); setContextForUMA(previousUMAToken); } } - + return previousUMAToken; } @@ -104,18 +104,103 @@ public class SyncronizeWithThredds { */ private void setContextForUMA(String umaToken) { logger.info("called set context for UMA"); - - if(umaToken==null || umaToken.isEmpty()) { + + if (umaToken == null || umaToken.isEmpty()) { logger.info("Uma Token is null or empty, skipping operation"); return; } - - logger.info("Going to set UMA Token: "+umaToken.substring(0,10)+"-MASKED-TOKEN"); + + logger.info("Going to set UMA Token: " + umaToken.substring(0, 10) + "-MASKED-TOKEN"); UmaJWTProvider.instance.set(umaToken); - logger.debug("UmaJWTProvider instance set performed to : "+umaToken.substring(0,10)+"-MASKED-TOKEN"); - + logger.debug("UmaJWTProvider instance set performed to : " + umaToken.substring(0, 10) + "-MASKED-TOKEN"); + } + + /** + * Checks if is item synched. + * + * @param folderId the folder id + * @return the th sync folder descriptor + * @throws ItemNotSynched the item not synched + * @throws Exception the exception + */ + public ThSyncFolderDescriptor isItemSynched(String folderId) throws ItemNotSynched, Exception { + ThSyncFolderDescriptor config = null; + try { + config = workspaceThreddsSynchronize.getConfiguration(folderId); + } catch (WorkspaceNotSynchedException e) { + logger.debug("WorkspaceNotSynchedException catched, the item id: " + folderId + " is not synched"); + throw new ItemNotSynched("the item id: " + folderId + " is not synched"); + } catch (Exception e) { + logger.debug("Error on getting configuration for the item id: " + folderId + ", returning null (means not synched)"); + return null; + } + + return config; + } + + /** + * Gets the available catalogues. + * + * @param httpRequest the http request + * @param user the user + * @param targetScope the target scope + * @return the available catalogues + * @throws Exception the exception + */ + public List getAvailableCatalogues(HttpServletRequest httpRequest, GCubeUser user, + String targetScope) throws Exception { + String originalScope = null; + String originalToken = null; + String previousUmaToken = null; + List listCatalogues = null; + try { + // context switch for Uma token + previousUmaToken = changeContextForUMA(httpRequest, user, targetScope); + + // context switch for gcube-token and scope + PortalContext pConfig = PortalContext.getConfiguration(); + String wsScope = pConfig.getCurrentScope(httpRequest); + String wsUserToken = pConfig.getCurrentUserToken(wsScope, user.getUsername()); + // Thread Local contexts + originalScope = wsScope; + originalToken = wsUserToken; + // getting token into target scope + String targetScopeUserToken = PortalContext.getConfiguration().getCurrentUserToken(targetScope, + user.getUsername()); + setContextParameters(targetScope, targetScopeUserToken); + + // calling the engine + listCatalogues = workspaceThreddsSynchronize.getAvailableCatalogues(); + } catch (Exception e) { + logger.error("Error on getting available Catalogues in the scope: " + targetScope, e); + } finally { + + // resetting UMA token in the WS scope + setContextForUMA(previousUmaToken); + + if (originalScope != null && originalScope.compareTo(targetScope) != 0) { + logger.info("Resetting the scope: " + originalScope + " which was original WS context"); + ScopeProvider.instance.set(originalScope); + if (originalToken != null) { + logger.info("Resetting the user token: " + originalToken.substring(0, 10) + + "-MASKED-TOKEN which was original WS context"); + SecurityTokenProvider.instance.set(originalToken); + } + } + } + return listCatalogues; + } + + + + + + //NOT UPDATED + + + /** @@ -167,52 +252,33 @@ public class SyncronizeWithThredds { - /** - * Gets the synched status from item property. - * - * @param folderId the folder id - * @param scope the scope - * @param username the username - * @return the synched status from item property - * @throws Exception the exception - */ - public Sync_Status getSynchedStatusFromItemProperty(String folderId, String scope, String username) throws Exception{ - - try { - try { - ScopeProvider.instance.set(scope); - return workspaceThreddsSynchronize.getSynchedStatusFromItemProperty(folderId, username); - }catch (ItemNotSynched e) { - logger.info("The folder id: "+folderId +" is not synched returning null as "+Sync_Status.class.getSimpleName()); - return null; - } - - }catch (Exception e) { - logger.error("Error on getSynchedStatusFromItemProperty for id: "+folderId, e); - throw new Exception("Sorry, an error occurred during read sync status from HL properties, try again later"); - } - } +// /** +// * Gets the synched status from item property. +// * +// * @param folderId the folder id +// * @param scope the scope +// * @param username the username +// * @return the synched status from item property +// * @throws Exception the exception +// */ +// public Sync_Status getSynchedStatusFromItemProperty(String folderId, String scope, String username) throws Exception{ +// +// try { +// try { +// ScopeProvider.instance.set(scope); +// return workspaceThreddsSynchronize.getSynchedStatusFromItemProperty(folderId, username); +// }catch (ItemNotSynched e) { +// logger.info("The folder id: "+folderId +" is not synched returning null as "+Sync_Status.class.getSimpleName()); +// return null; +// } +// +// }catch (Exception e) { +// logger.error("Error on getSynchedStatusFromItemProperty for id: "+folderId, e); +// throw new Exception("Sorry, an error occurred during read sync status from HL properties, try again later"); +// } +// } - /** - * Checks if is item synched. - * - * @param folderId the folder id - * @param scope the scope - * @param username the username - * @return true, if is item synched - * @throws ItemNotSynched the item not synched - * @throws Exception the exception - */ - public boolean isItemSynched(String folderId, String scope, String username) throws ItemNotSynched, Exception{ - - Sync_Status value = getSynchedStatusFromItemProperty(folderId, scope, username); - - if(value!=null) - return true; - - return false; - } /** @@ -281,57 +347,4 @@ public class SyncronizeWithThredds { } - /** - * Gets the available catalogues. - * - * @param httpRequest the http request - * @param user the user - * @param targetScope the target scope - * @return the available catalogues - * @throws Exception the exception - */ - public List getAvailableCatalogues(HttpServletRequest httpRequest, GCubeUser user, - String targetScope) throws Exception { - String originalScope = null; - String originalToken = null; - String previousUmaToken = null; - List listCatalogues = null; - try { - // context switch for Uma token - previousUmaToken = changeContextForUMA(httpRequest, user, targetScope); - - // context switch for gcube-token and scope - PortalContext pConfig = PortalContext.getConfiguration(); - String wsScope = pConfig.getCurrentScope(httpRequest); - String wsUserToken = pConfig.getCurrentUserToken(wsScope, user.getUsername()); - // Thread Local contexts - originalScope = wsScope; - originalToken = wsUserToken; - // getting token into target scope - String targetScopeUserToken = PortalContext.getConfiguration().getCurrentUserToken(targetScope, - user.getUsername()); - setContextParameters(targetScope, targetScopeUserToken); - - // calling the engine - listCatalogues = workspaceThreddsSynchronize.getAvailableCatalogues(); - } catch (Exception e) { - logger.error("Error on getting available Catalogues in the scope: " + targetScope, e); - } finally { - - // resetting UMA token in the WS scope - setContextForUMA(previousUmaToken); - - if (originalScope != null && originalScope.compareTo(targetScope) != 0) { - logger.info("Resetting the scope: " + originalScope + " which was original WS context"); - ScopeProvider.instance.set(originalScope); - if (originalToken != null) { - logger.info("Resetting the user token: " + originalToken.substring(0, 10) - + "-MASKED-TOKEN which was original WS context"); - SecurityTokenProvider.instance.set(originalToken); - } - } - } - return listCatalogues; - } - } diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/ThreddsWorkspaceSyncServiceImpl.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/ThreddsWorkspaceSyncServiceImpl.java index 9125512..fa62f65 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/ThreddsWorkspaceSyncServiceImpl.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/server/ThreddsWorkspaceSyncServiceImpl.java @@ -7,9 +7,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.gcube.common.authorization.library.provider.SecurityTokenProvider; import org.gcube.common.portal.PortalContext; -import org.gcube.common.scope.api.ScopeProvider; import org.gcube.portal.wssynclibrary.shared.ItemNotSynched; import org.gcube.portal.wssynclibrary.shared.WorkspaceFolderLocked; import org.gcube.portal.wssynclibrary.shared.thredds.Sync_Status; @@ -83,8 +81,7 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem } } - //MOVED - + /** * Gets the available THREDDS catalogues for target scope. * @@ -92,6 +89,7 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem * @return the available catalogues for scope * @throws Exception the exception */ + //UPDATED @Override public List getAvailableCataloguesForScope(String targetFullScope) throws Exception { @@ -100,6 +98,7 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem List listCtlgs = null; try { + GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); listCtlgs = getSyncService().getAvailableCatalogues(this.getThreadLocalRequest(), user, targetFullScope); @@ -116,6 +115,59 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem return listCtlgs; } + + /** + * Checks if is item synched. + * + * @param folderId the folder id + * @return the ws thredds synch folder descriptor + * @throws WorkspaceFolderLocked the workspace folder locked + * @throws Exception the exception + */ + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsthreddssync.client.rpc.ThreddsWorkspaceSyncService#isItemSynched(java.lang.String) + */ + //UPDATED + @Override + public WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws WorkspaceFolderLocked, Exception{ + + logger.debug("Performing isItemSynched for foldeId: "+folderId); + + try { + + ThSyncFolderDescriptor theConfig = getSyncService().isItemSynched(folderId); + + if(theConfig!=null) { + logger.info("Folder id: "+folderId+" is synched"); + + //String wsUserToken = PortalContext.getConfiguration().getCurrentUserToken(wsScope, user.getUsername()); + //ThSyncFolderDescriptor serverFolderSync = getSyncService().checkItemSynched(folderId,wsScope,wsUserToken); + + //the status is not set here (into isItemSynched implementation). + Sync_Status theStatus = null; + WsThreddsSynchFolderDescriptor toWsThreddFolder = BeanConverter.toWsThreddsFolderConfig(theConfig, theStatus); + logger.debug("IsItemSynched for id: "+folderId +" returning: "+toWsThreddFolder); + return toWsThreddFolder; + } + + logger.info("Folder id: "+folderId+" is not synched, returning null descriptor"); + return null; + + } catch (ItemNotSynched e) { + logger.info("The folderId: "+folderId +" is not synched, returning null FolderDescriptor"); + return null; + + } catch (WorkspaceFolderLocked e) { + logger.warn(e.getMessage() +", sending exception to client..."); + throw new WorkspaceFolderLocked(e.getFolderId(), e.getMessage()); + + }catch (Exception e) { + logger.info("Error on isItemSynched for folderId: "+folderId, e); + throw new Exception(e); + } + } + + @@ -317,55 +369,6 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem return null; } - - /** - * Checks if is item synched. - * - * @param folderId the folder id - * @return the ws thredds synch folder descriptor - * @throws WorkspaceFolderLocked the workspace folder locked - * @throws Exception the exception - */ - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.wsthreddssync.client.rpc.ThreddsWorkspaceSyncService#isItemSynched(java.lang.String) - */ - @Override - public WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws WorkspaceFolderLocked, Exception{ - - logger.debug("Performing isItemSynched for foldeId: "+folderId); - - try { - - GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); - String wsScope = PortalContext.getConfiguration().getCurrentScope(this.getThreadLocalRequest()); - Sync_Status theStatus = getSyncService().getSynchedStatusFromItemProperty(folderId, wsScope, user.getUsername()); - - if(theStatus!=null) { - logger.info("Folder id: "+folderId+" is synched"); - String wsUserToken = PortalContext.getConfiguration().getCurrentUserToken(wsScope, user.getUsername()); - ThSyncFolderDescriptor serverFolderSync = getSyncService().checkItemSynched(folderId,wsScope,wsUserToken); - WsThreddsSynchFolderDescriptor toWsThreddFolder = BeanConverter.toWsThreddsFolderConfig(serverFolderSync, theStatus); - logger.debug("IsItemSynched for id: "+folderId +" returning: "+toWsThreddFolder); - return toWsThreddFolder; - } - - logger.info("Folder id: "+folderId+" is not synched, returning null descriptor"); - return null; - - } catch (ItemNotSynched e) { - logger.info("The folderId: "+folderId +" is not synched, returning null FolderDescriptor"); - return null; - - } catch (WorkspaceFolderLocked e) { - logger.warn(e.getMessage() +", sending exception to client..."); - throw new WorkspaceFolderLocked(e.getFolderId(), e.getMessage()); - - }catch (Exception e) { - logger.info("Error on isItemSynched for folderId: "+folderId, e); - throw new Exception(e); - } - } - /** * Register callback for id. diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/shared/WsThreddsSynchFolderDescriptor.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/shared/WsThreddsSynchFolderDescriptor.java index 906401a..5d9a446 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/shared/WsThreddsSynchFolderDescriptor.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/shared/WsThreddsSynchFolderDescriptor.java @@ -10,8 +10,9 @@ import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncFolderDescriptor; /** * The Class WsThreddsSynchFolderDescriptor. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Feb 20, 2018 + * @author Francesco Mangiacrapa at ISTI-CNR francesco.mangiacrapa@isti.cnr.it + * + * May 10, 2021 */ public class WsThreddsSynchFolderDescriptor implements Serializable { @@ -109,6 +110,11 @@ public class WsThreddsSynchFolderDescriptor implements Serializable { this.serverFolderDescriptor = serverFolderDescriptor; } + /** + * To string. + * + * @return the string + */ /* (non-Javadoc) * @see java.lang.Object#toString() */