From 6d15e514933efb61907689bb45c3c435495ac951 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Thu, 28 Sep 2017 13:07:15 +0000 Subject: [PATCH] Working on Feature #9760: WS-Thredds synch folder integration git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@154685 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../view/windows/DialogPublishOnThredds.java | 2 +- .../server/GWTWorkspaceServiceImpl.java | 14 ++- .../server/publish/PublishOnThredds.java | 116 ++++++++++-------- 3 files changed, 75 insertions(+), 57 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublishOnThredds.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublishOnThredds.java index 0556a2a..5ae04e8 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublishOnThredds.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogPublishOnThredds.java @@ -219,7 +219,7 @@ public class DialogPublishOnThredds extends Dialog { @Override public void onSuccess(TransferOnThreddsReport result) { GWT.log("Publishing on Thredds return: "+result); - InfoDisplay.display("Transferring on Thredds", "Transferring started correclty..."); + InfoDisplay.display("On going", "Transferring started correclty..."); if(result!=null){ pollingStart(result); }else diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java index 1a3cad7..95d6c39 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java @@ -4176,10 +4176,8 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT workspaceLogger.debug("getListOfVREsForLoggedUser...: "); //PortalContextInfo context = WsUtil.getPortalContext(this.getThreadLocalRequest()); GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); - long userId = user.getUserId(); - // Instanciate the manager GroupManager groupManager = new LiferayGroupManager(); List listOfVres = new ArrayList(); @@ -4228,14 +4226,18 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT @Override public TransferOnThreddsReport publishOnThreddsCatalogue(String folderToPublishId, String folderMetadataId, String vreScope, String catalogueName) throws Exception{ workspaceLogger.info("Publishing on thredds the folderId: "+folderToPublishId+", metafolderId: "+folderMetadataId +", vre scope: "+vreScope); - + System.out.println("Publishing on thredds the folderId: "+folderToPublishId+", metafolderId: "+folderMetadataId +", vre scope: "+vreScope); try{ GCubeUser user = PortalContext.getConfiguration().getCurrentUser(this.getThreadLocalRequest()); - String userToken = PortalContext.getConfiguration().getCurrentUserToken(vreScope, user.getUsername()); + String wsUserToken = PortalContext.getConfiguration().getCurrentScope(this.getThreadLocalRequest()); + String targetScopeUserToken = PortalContext.getConfiguration().getCurrentUserToken(vreScope, user.getUsername()); - PublishOnThredds pub = new PublishOnThredds(vreScope, user.getUsername(), this.getThreadLocalRequest().getSession()); + if (isTestMode()){ + targetScopeUserToken = "89257623-0570-4fbe-a15b-458bb84f4902-98187548"; //TOKEN NEXTNEXT by FRANCESCO + } - return pub.publishFolder(folderToPublishId, folderMetadataId, userToken, catalogueName); + PublishOnThredds pub = new PublishOnThredds(wsUserToken, user.getUsername(), this.getThreadLocalRequest().getSession()); + return pub.publishFolder(folderToPublishId, folderMetadataId, targetScopeUserToken, catalogueName); }catch(Exception e){ workspaceLogger.error("Error occurred server-side when transfer to Thredds: ", e); throw new Exception("Sorry, an error occurred server-side performing transfer to Thredds, try again later"); diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/publish/PublishOnThredds.java b/src/main/java/org/gcube/portlets/user/workspace/server/publish/PublishOnThredds.java index 8668d59..ea56062 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/publish/PublishOnThredds.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/publish/PublishOnThredds.java @@ -7,6 +7,8 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.HashSet; import java.util.UUID; @@ -46,16 +48,19 @@ public class PublishOnThredds { private Logger logger = Logger.getLogger(ApplicationProfileReader.class); private String username; private HttpSession httpSession; + private String wsScopeUserToken; + private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); + /** * Instantiates a new publish on thredds. * - * @param publishingScope the publishing scope + * @param wsScopeUserToken the ws scope user token * @param username the username * @param httpSession the http session */ - public PublishOnThredds(String publishingScope, String username, HttpSession httpSession) { - TokenSetter.set(publishingScope); + public PublishOnThredds(String wsScopeUserToken, String username, HttpSession httpSession) { + this.wsScopeUserToken = wsScopeUserToken; this.configs = new HashSet(); this.username = username; this.httpSession = httpSession; @@ -83,64 +88,75 @@ public class PublishOnThredds { @Override public void run() { - WsUtil.setTransferPublishingOnThredds(httpSession, tr); + try{ - FolderConfiguration folderConfig=new FolderConfiguration(publishingUserToken,folderId,catalogueName); - folderConfig.setProvidedMetadata(false); + WsUtil.setTransferPublishingOnThredds(httpSession, tr); + System.out.println("Setting ws user token : "+publishingUserToken); - if(metadataFolderID!=null){ - folderConfig.setProvidedMetadata(true); - folderConfig.setMetadataFolderId(metadataFolderID); - } - configs.add(folderConfig); - TransferRequestServer server=new TransferRequestServer(); - for(FolderConfiguration entry:configs){ + TokenSetter.setToken(wsScopeUserToken); + FolderConfiguration folderConfig=new FolderConfiguration(publishingUserToken,folderId,catalogueName); + folderConfig.setProvidedMetadata(false); - try{ - Workspace ws = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome(username).getWorkspace(); -// FolderReport report=new FolderReport(entry); - logger.debug("Managing {} "+entry); - WorkspaceFolder folder = (WorkspaceFolder) ws.getItem(entry.getFolderId()); - PublishFolders.handleFolder(ws,entry,server,folder); - - - }catch(WorkspaceException | HomeNotFoundException | InternalErrorException | UserNotFoundException e){ - logger.error("WORKSPACE EXC ", e); - setStatusOnTransferId(transferId, true, "Sorry, an error has occurred during getting workspace for user: "+e.getMessage(), false); - }catch(Exception e){ - logger.error("UNEXPECTED EXC ", e); - setStatusOnTransferId(transferId, true, "Sorry, an unexpected error has occurred during getting workspace for user", false); + if(metadataFolderID!=null){ + folderConfig.setProvidedMetadata(true); + folderConfig.setMetadataFolderId(metadataFolderID); } - } + configs.add(folderConfig); + TransferRequestServer server=new TransferRequestServer(); + for(FolderConfiguration entry:configs){ - logger.info("Waiting for service.. "); - server.waitCompletion(); + try{ + Workspace ws = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome(username).getWorkspace(); + // FolderReport report=new FolderReport(entry); + logger.debug("Managing {} "+entry); + WorkspaceFolder folder = (WorkspaceFolder) ws.getItem(entry.getFolderId()); + PublishFolders.handleFolder(ws,entry,server,folder); - Report report = server.getReport(); - File reportFile = report.toFile(folderConfig); - if(reportFile!=null){ - Workspace workspace; - try { - workspace = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome(username).getWorkspace(); - InputStream fileData = new FileInputStream(reportFile); - workspace.createExternalFile("Publishing on thredds report file", "", "text/plain", fileData, folderId); - setStatusOnTransferId(transferId, false, "Sorry, an unexpected error has occurred during getting workspace for user",true); + }catch(WorkspaceException | HomeNotFoundException | InternalErrorException | UserNotFoundException e){ + logger.error("WORKSPACE EXC ", e); + setStatusOnTransferId(transferId, true, "Sorry, an error has occurred during getting workspace for user: "+e.getMessage(), false); + }catch(Exception e){ + logger.error("UNEXPECTED EXC ", e); + setStatusOnTransferId(transferId, true, "Sorry, an unexpected error has occurred during getting workspace for user", false); + } } - catch (WorkspaceFolderNotFoundException - | InternalErrorException - | HomeNotFoundException - | UserNotFoundException e) { - logger.error("Error on getting workspace for thredds transferring to folder: "+folderId, e); - setStatusOnTransferId(transferId, true, "Sorry, an error has occurred during getting workspace for user: "+e.getMessage(),false); - } - catch (FileNotFoundException | InsufficientPrivilegesException | ItemAlreadyExistException | WrongDestinationException e) { - // TODO Auto-generated catch block - logger.error("Error on writing report for thredds transferring to folder: "+folderId, e); - setStatusOnTransferId(transferId, true, "Sorry, an error has occurred during report creation to transfer resulting: "+e.getMessage(),false); + + logger.info("Waiting for service.. "); + server.waitCompletion(); + + Report report = server.getReport(); + File reportFile = report.toFile(folderConfig); + if(reportFile!=null){ + Workspace workspace; + try { + workspace = HomeLibrary.getHomeManagerFactory().getHomeManager().getHome(username).getWorkspace(); + InputStream fileData = new FileInputStream(reportFile); + Timestamp timestamp = new Timestamp(System.currentTimeMillis()); + workspace.createExternalFile("Transferring on Thredds report file "+sdf.format(timestamp), "", "text/plain", fileData, folderId); + setStatusOnTransferId(transferId, false, "Sorry, an unexpected error has occurred during getting workspace for user",true); + + } + catch (WorkspaceFolderNotFoundException + | InternalErrorException + | HomeNotFoundException + | UserNotFoundException e) { + logger.error("Error on getting workspace for thredds transferring to folder: "+folderId, e); + setStatusOnTransferId(transferId, true, "Sorry, an error has occurred during getting workspace for user: "+e.getMessage(),false); + } + catch (FileNotFoundException | InsufficientPrivilegesException | ItemAlreadyExistException | WrongDestinationException e) { + // TODO Auto-generated catch block + logger.error("Error on writing report for thredds transferring to folder: "+folderId, e); + setStatusOnTransferId(transferId, true, "Sorry, an error has occurred during report creation to transfer resulting: "+e.getMessage(),false); + } } + }catch(Exception e){ + logger.error("Unexpected error has occurred when performing the tranferring to Thredds, folderID is: "+folderId, e); + e.printStackTrace(); + setStatusOnTransferId(transferId, true, "Sorry, an unexpected error has occurred when performing the tranferring on Thredds. Refresh and try again later",false); } } + }.start(); return tr;