diff --git a/pom.xml b/pom.xml index e46acdc..200e159 100644 --- a/pom.xml +++ b/pom.xml @@ -95,13 +95,6 @@ compile - - - - - - - org.gcube.common authorization-client @@ -118,11 +111,13 @@ org.slf4j - slf4j-log4j12 + slf4j-api + provided org.slf4j - slf4j-api + slf4j-log4j12 + provided 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 10ef3e7..536a997 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 @@ -14,6 +14,7 @@ import org.gcube.common.scope.api.ScopeProvider; import org.gcube.oidc.rest.JWTToken; import org.gcube.portal.oidc.lr62.OIDCUmaUtil; import org.gcube.portal.wssynclibrary.shared.ItemNotSynched; +import org.gcube.portal.wssynclibrary.shared.thredds.Sync_Status; import org.gcube.portal.wssynclibrary.shared.thredds.ThCatalogueBean; import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncFolderDescriptor; import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncStatus; @@ -24,7 +25,6 @@ import org.gcube.vomanagement.usermanagement.model.GCubeUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -// TODO: Auto-generated Javadoc /** * The Class SyncronizeWithThredds. * @@ -348,8 +348,6 @@ public class SyncronizeWithThredds { } } - // NOT UPDATED - /** * Gets the sync status. * @@ -375,9 +373,22 @@ public class SyncronizeWithThredds { * @param userToken the user token * @throws Exception the exception */ - public void registerCallbackForId(String folderId, String scope, String userToken) throws Exception { + protected void registerCallbackForId(String folderId, String scope, String userToken) throws Exception { setContextParameters(scope, userToken); workspaceThreddsSynchronize.registerCallbackForId(folderId); } + /** + * Gets the sync status info. + * + * @param itemId the item id + * @return the sync status info + * @throws Exception the exception + */ + public Sync_Status getSyncStatusInfo(String itemId, String scope, String userToken) throws Exception { + setContextParameters(scope, userToken); + return workspaceThreddsSynchronize.getInfo(itemId); + + } + } 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 0d62ea6..1784d2d 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 @@ -35,12 +35,11 @@ import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; import com.liferay.portal.service.UserLocalServiceUtil; - +// TODO: Auto-generated Javadoc /** * The server side implementation of the RPC service. * - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it - * Feb 14, 2018 + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it Feb 14, 2018 */ @SuppressWarnings("serial") public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implements ThreddsWorkspaceSyncService { @@ -58,10 +57,10 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem */ public synchronized SyncronizeWithThredds getSyncService() { - if(syncThredds==null) + if (syncThredds == null) syncThredds = new SyncronizeWithThredds(); - return syncThredds; + return syncThredds; } @@ -74,14 +73,12 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem try { UserLocalServiceUtil.getService(); return true; - } - catch (Exception ex) { + } catch (Exception ex) { logger.warn("Development Mode ON"); return false; } } - - + /** * Gets the available THREDDS catalogues for target scope. * @@ -89,101 +86,88 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem * @return the available catalogues for scope * @throws Exception the exception */ - //UPDATED + // UPDATED @Override public List getAvailableCataloguesForScope(String targetFullScope) throws Exception { - if(targetFullScope==null) + if (targetFullScope == null) throw new Exception("Invalid scope null"); List listCtlgs = null; try { - + GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); listCtlgs = getSyncService().getAvailableCatalogues(this.getThreadLocalRequest(), user, targetFullScope); - - logger.debug("Retuning "+listCtlgs.size()+" Catalogues for scope: "+targetFullScope); - if(logger.isDebugEnabled()){ + + logger.debug("Retuning " + listCtlgs.size() + " Catalogues for scope: " + targetFullScope); + if (logger.isDebugEnabled()) { for (ThCatalogueBean thCatalogueBean : listCtlgs) { logger.debug(thCatalogueBean.toString()); } } - }catch (Exception e) { - logger.error("Error on checking available Catalogue in the scope: "+targetFullScope, e); + } catch (Exception e) { + logger.error("Error on checking available Catalogue in the scope: " + targetFullScope, e); } - + 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 + * @throws Exception the exception */ - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.wsthreddssync.client.rpc.ThreddsWorkspaceSyncService#isItemSynched(java.lang.String) - */ - //UPDATED + // UPDATED @Override - public WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws WorkspaceFolderLocked, Exception{ - logger.debug("called isItemSynched for folderId: "+folderId); + public WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws WorkspaceFolderLocked, Exception { + logger.debug("called isItemSynched for folderId: " + 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); + if (theConfig != null) { + logger.info("Folder id: " + folderId + " is synched"); + GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); + String wsScope = PortalContext.getConfiguration().getCurrentScope(this.getThreadLocalRequest()); + String wsUserToken = PortalContext.getConfiguration().getCurrentUserToken(wsScope, user.getUsername()); + Sync_Status theStatus = getSyncService().getSyncStatusInfo(folderId,wsScope,wsUserToken); + 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"); + 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 for "+WsThreddsSynchFolderDescriptor.class.getSimpleName()); + logger.info("The folderId: " + folderId + " is not synched, returning null for " + + WsThreddsSynchFolderDescriptor.class.getSimpleName()); return null; } catch (WorkspaceFolderLocked e) { - logger.warn(e.getMessage() +", sending exception to client..."); + 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); + } catch (Exception e) { + logger.info("Error on isItemSynched for folderId: " + folderId, e); throw new Exception(e); } } - /** * Do sync folder. * - * @param folderId the folder id + * @param folderId the folder id * @param clientConfig the client config * @return the th sync status * @throws Exception the exception */ - /* - * (non-Javadoc) - * - * @see org.gcube.portlets.widgets.wsthreddssync.client.rpc. - * ThreddsWorkspaceSyncService#doSyncFolder(java.lang.String, - * org.gcube.portlets.widgets.wsthreddssync.shared. - * WsThreddsSynchFolderDescriptor) - */ - //UPDATED + // UPDATED @Override public ThSyncStatus doSyncFolder(final String folderId, WsThreddsSynchFolderConfiguration clientConfig) throws Exception { @@ -198,10 +182,6 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem logger.debug("Creating server config " + config); } -// logger.info("Calling doSyncFolder on folderId: "+folderId +", config: "+config); -// String wsScope = PortalContext.getConfiguration().getCurrentScope(this.getThreadLocalRequest()); -// String wsUserToken = PortalContext.getConfiguration().getCurrentUserToken(wsScope, user.getUsername()); - ThSyncStatus status = getSyncService().doSyncFolder(folderId, config, this.getThreadLocalRequest(), user); logger.debug("Returning for folderId " + folderId + " the syncStatus: " + status); @@ -211,22 +191,14 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem throw new Exception("Sorry, an error occurred during synchonization phase, try again later"); } } - + /** - * Do sync folder. + * Do un sync folder. * * @param folderId the folder id - * @return the th sync status + * @return the boolean * @throws Exception the exception */ - /* - * (non-Javadoc) - * - * @see org.gcube.portlets.widgets.wsthreddssync.client.rpc. - * ThreddsWorkspaceSyncService#doSyncFolder(java.lang.String, - * org.gcube.portlets.widgets.wsthreddssync.shared. - * WsThreddsSynchFolderDescriptor) - */ // Updated @Override public Boolean doUnSyncFolder(final String folderId) throws Exception { @@ -235,8 +207,8 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem try { GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); ThSyncFolderDescriptor foldeDesr = getSyncService().isItemSynched(folderId); - return getSyncService().doUnSync(folderId, true, foldeDesr.getConfiguration(), - this.getThreadLocalRequest(), user); + return getSyncService().doUnSync(folderId, true, foldeDesr.getConfiguration(), this.getThreadLocalRequest(), + user); } catch (Exception e) { logger.error("Do un sync Folder error: ", e); throw new Exception( @@ -244,45 +216,43 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem } } - /** - * Gets the list of Scopes (Root-VO, VOs and VREs) for user and the Thredds roles that user has in them. + * Gets the list of Scopes (Root-VO, VOs and VREs) for user and the Thredds + * roles that user has in them. * * @return the VREs and Thredds roles for a given user * @throws Exception the exception */ @Override - public Map getScopesWithThreddsRolesForLoggedUser() throws Exception{ + public Map getScopesWithThreddsRolesForLoggedUser() throws Exception { logger.info("called getScopesWithThreddsRolesForLoggedUser"); - + GCubeUser user = null; Map mapScopesRoles = null; - - //DEV MODE - if (!isWithinPortal()){ + + // DEV MODE + if (!isWithinPortal()) { mapScopesRoles = new HashMap(); mapScopesRoles.put("/gcube/devsec/devVRE", GatewayRolesThredds.DATA_EDITOR); // mapScopesRoles.put( "/gcube", GatewayRolesThredds.THREDDS_PUBLISHER); // mapScopesRoles.put( "/gcube/devNext/NextNext", GatewayRolesThredds.THREDDS_PUBLISHER); return mapScopesRoles; } - + try { user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); mapScopesRoles = WsUtil.getScopesWithThreddsRolesForUser(user); - - logger.info("returning Map(scopes,roles): "+mapScopesRoles); + + logger.info("returning Map(scopes,roles): " + mapScopesRoles); return mapScopesRoles; - }catch (Exception e) { + } catch (Exception e) { String errorMsg = "An error occurred on checking user roles. Refresh the page and try again."; - logger.error("An error occurred on checking user roles for user: "+user, e); + logger.error("An error occurred on checking user roles for user: " + user, e); throw new Exception(errorMsg); - } + } } - - /** * Gets the list scope with the role Data-Manager for logged user. * @@ -290,7 +260,7 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem * @throws Exception the exception */ @Override - public List getListOfDataManagerScopesForLoggedUser() throws Exception{ + public List getListOfDataManagerScopesForLoggedUser() throws Exception { logger.info("called getListOfVREsForLoggedUser...: "); GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); long userId = user.getUserId(); @@ -298,9 +268,9 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem // Instantiate the manager GroupManager groupManager = new LiferayGroupManager(); List listOfScopes = new ArrayList(); - - //DEV MODE - if (!isWithinPortal()){ + + // DEV MODE + if (!isWithinPortal()) { listOfScopes.add(new GcubeScope("devVRE", "/gcube/devsec/devVRE", GcubeScopeType.VRE)); listOfScopes.add(new GcubeScope("NextNext", "/gcube/devNext/NextNext", GcubeScopeType.VRE)); listOfScopes.add(new GcubeScope("devNext", "/gcube/devNext", GcubeScopeType.VO)); @@ -313,104 +283,94 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem try { String gatewayHostname = GenericUtils.getGatewayClientHostname(getThreadLocalRequest()); - //list of Scopes filtered for gateway + // list of Scopes filtered for gateway Set filteredGroupsForGatw = groupManager.listGroupsByUserAndSite(userId, gatewayHostname); - - //List listOfGroups = groupManager.listGroupsByUser(userId); + + // List listOfGroups = groupManager.listGroupsByUser(userId); List listOfGroups = new ArrayList(filteredGroupsForGatw); - logger.info("list of VREs in the gateway "+gatewayHostname+" are "+listOfGroups.size()); + logger.info("list of VREs in the gateway " + gatewayHostname + " are " + listOfGroups.size()); for (GCubeGroup gCubeGroup : listOfGroups) { long groupId = gCubeGroup.getGroupId(); String fullScope = groupManager.getInfrastructureScope(groupId); - logger.debug("For groupId: "+groupId+" got full scope: "+fullScope); - GcubeScopeType scopeType=null; - if(groupManager.isVRE(groupId)){ - scopeType = GcubeScopeType.VRE; - }else if(groupManager.isVO(groupId)){ - scopeType = GcubeScopeType.VO; + logger.debug("For groupId: " + groupId + " got full scope: " + fullScope); + GcubeScopeType scopeType = null; + if (groupManager.isVRE(groupId)) { + scopeType = GcubeScopeType.VRE; + } else if (groupManager.isVO(groupId)) { + scopeType = GcubeScopeType.VO; } // }else if(groupManager.isRootVO(gCubeGroup.getGroupId())){ // scopeType = GcubeScopeType.ROOT; // } - if(scopeType!=null){ + if (scopeType != null) { GatewayRolesThredds roles = WsUtil.getThreddsRoleFor(user, gCubeGroup); - //Adding only the scope where the user has the THREDDS_ADMIN role - GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, gCubeGroup.getGroupName(), fullScope, groupManager, scopeType); - if(gcubeScope!=null) { + // Adding only the scope where the user has the THREDDS_ADMIN role + GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, + gCubeGroup.getGroupName(), fullScope, groupManager, scopeType); + if (gcubeScope != null) { listOfScopes.add(gcubeScope); } } } - + GCubeGroup theRootVO = groupManager.getRootVO(); GatewayRolesThredds roles = WsUtil.getThreddsRoleFor(user, theRootVO); String rootVOFullScope = groupManager.getInfrastructureScope(theRootVO.getGroupId()); - ///ADDING THE ROOT SCOPE if the user has the THREDDS_ADMIN role in the ROOT-VO - GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, theRootVO.getGroupName(), rootVOFullScope, groupManager, GcubeScopeType.ROOT); - if(gcubeScope!=null) { + /// ADDING THE ROOT SCOPE if the user has the THREDDS_ADMIN role in the ROOT-VO + GcubeScope gcubeScope = checkDataManagerCapacityAndThreddsCatalogue(roles, theRootVO.getGroupName(), + rootVOFullScope, groupManager, GcubeScopeType.ROOT); + if (gcubeScope != null) { listOfScopes.add(gcubeScope); } - } - catch (UserRetrievalFault | UserManagementSystemException - | GroupRetrievalFault e) { + } catch (UserRetrievalFault | UserManagementSystemException | GroupRetrievalFault e) { logger.error("Error occurred server-side getting VRE folders: ", e); throw new Exception("Sorry, an error occurred server-side getting VRE folders, try again later"); } - - if(listOfScopes.isEmpty()) { - throw new Exception("No scope detected with the needed role: "+GatewayRolesThredds.DATA_MANAGER.getRoleName()+". Contact the VRE manager or the portal administrator"); + + if (listOfScopes.isEmpty()) { + throw new Exception( + "No scope detected with the needed role: " + GatewayRolesThredds.DATA_MANAGER.getRoleName() + + ". Contact the VRE manager or the portal administrator"); } Collections.sort(listOfScopes); - logger.info("Returning list of allowed scope/s with: "+GatewayRolesThredds.DATA_MANAGER + " role/s: "+listOfScopes); + logger.info("Returning list of allowed scope/s with: " + GatewayRolesThredds.DATA_MANAGER + " role/s: " + + listOfScopes); return listOfScopes; } - - + /** - * Checks if for the input scope: - * - the user has the role {@link GatewayRolesThredds.#THREDDS_ADMIN} - * - the scope has an available THREDDS catalogue configured + * Checks if for the input scope: - the user has the role + * {@link GatewayRolesThredds.#THREDDS_ADMIN} - the scope has an available + * THREDDS catalogue configured * - * @param role the role - * @param scopeName the scope name e.g. devVRE - * @param fullScope the full scope e.g. /gcube/devsec/devVRE + * @param role the role + * @param scopeName the scope name e.g. devVRE + * @param fullScope the full scope e.g. /gcube/devsec/devVRE * @param groupManager the group manager - * @param scopeType the scope type - * @return the gcube scope {@link GcubeScope} if the two conditions (see description) are satisfied, null otherwise + * @param scopeType the scope type + * @return the gcube scope {@link GcubeScope} if the two conditions (see + * description) are satisfied, null otherwise * @throws Exception the exception */ - private GcubeScope checkDataManagerCapacityAndThreddsCatalogue(GatewayRolesThredds role, String scopeName, String fullScope, GroupManager groupManager, GcubeScopeType scopeType) throws Exception { - logger.debug("checking Data-Manager capacity and THREEDS catalogues for role: "+role, "scope name: "+scopeName+", scope: "+fullScope + " scope type: "+scopeType); - if(role!=null && role.getRoleName().equalsIgnoreCase(GatewayRolesNames.DATA_MANAGER.getRoleName())){ + private GcubeScope checkDataManagerCapacityAndThreddsCatalogue(GatewayRolesThredds role, String scopeName, + String fullScope, GroupManager groupManager, GcubeScopeType scopeType) throws Exception { + logger.debug("checking Data-Manager capacity and THREEDS catalogues for role: " + role, + "scope name: " + scopeName + ", scope: " + fullScope + " scope type: " + scopeType); + if (role != null && role.getRoleName().equalsIgnoreCase(GatewayRolesNames.DATA_MANAGER.getRoleName())) { try { List list = getAvailableCataloguesForScope(fullScope); - if(list!=null) { + if (list != null) { return new GcubeScope(scopeName, fullScope, scopeType); } - }catch (Exception e) { - logger.error("Error on checking available catalogue for scope: "+fullScope, e); + } catch (Exception e) { + logger.error("Error on checking available catalogue for scope: " + fullScope, e); } } return null; } - - -// /** -// * Register callback for id. -// * -// * @param folderId the folder id -// * @throws Exception the exception -// */ -// private void registerCallbackForId(String folderId) throws Exception{ -// GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); -// String wsScope = PortalContext.getConfiguration().getCurrentScope(this.getThreadLocalRequest()); -// String wsUserToken = PortalContext.getConfiguration().getCurrentUserToken(wsScope, user.getUsername()); -// getSyncService().registerCallbackForId(folderId, wsScope, wsUserToken); -// } - /** * Monitor sync status. @@ -418,13 +378,10 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem * @param folderId the folder id * @return the th sync status * @throws ItemNotSynched the item not synched - * @throws Exception the exception - */ - /* (non-Javadoc) - * @see org.gcube.portlets.widgets.wsthreddssync.client.rpc.ThreddsWorkspaceSyncService#monitorSyncStatus(java.lang.String) + * @throws Exception the exception */ @Override - public ThSyncStatus monitorSyncStatus(String folderId) throws ItemNotSynched, Exception{ + public ThSyncStatus monitorSyncStatus(String folderId) throws ItemNotSynched, Exception { GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); String wsScope = PortalContext.getConfiguration().getCurrentScope(this.getThreadLocalRequest()); String wsUserToken = PortalContext.getConfiguration().getCurrentUserToken(wsScope, user.getUsername());