From 992ae018878eebb74fc26596e3ae15f4c337a8a1 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Thu, 28 Sep 2017 09:59:49 +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@154676 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/rpc/GWTWorkspaceService.java | 7 +++ .../client/rpc/GWTWorkspaceServiceAsync.java | 3 + .../view/windows/DialogPublishOnThredds.java | 63 ++++++++++++++++++- .../server/GWTWorkspaceServiceImpl.java | 27 +++++++- .../server/publish/PublishOnThredds.java | 4 +- .../shared/TransferOnThreddsReport.java | 8 +-- 6 files changed, 101 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java index 133ccca..47a2076 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java @@ -801,5 +801,12 @@ public interface GWTWorkspaceService extends RemoteService{ String folderToPublishId, String folderMetadataId, String vreScope, String catalogueName) throws Exception; + /** + * @param transferId + * @return + * @throws Exception + */ + TransferOnThreddsReport getStatusOfPublishingOnThreddsCatalogue(String transferId) + throws Exception; } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java index c9ee39f..55a9090 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java @@ -800,5 +800,8 @@ public interface GWTWorkspaceServiceAsync { String folderToPublishId, String folderMetadataId, String vreScope, String catalogueName, AsyncCallback callback); + void getStatusOfPublishingOnThreddsCatalogue( + String transferId, AsyncCallback callback); + } 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 362c493..e294644 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 @@ -7,6 +7,7 @@ import java.util.List; import org.gcube.portlets.user.workspace.client.AppControllerExplorer; import org.gcube.portlets.user.workspace.client.ConstantsExplorer; +import org.gcube.portlets.user.workspace.client.event.RefreshFolderEvent; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.GcubeVRE; import org.gcube.portlets.user.workspace.shared.TransferOnThreddsReport; @@ -26,6 +27,7 @@ import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.util.Format; import com.extjs.gxt.ui.client.widget.Dialog; +import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; import com.extjs.gxt.ui.client.widget.form.TextField; @@ -34,6 +36,7 @@ import com.extjs.gxt.ui.client.widget.layout.FormLayout; import com.github.gwtbootstrap.client.ui.Label; import com.github.gwtbootstrap.client.ui.constants.LabelType; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -130,6 +133,7 @@ public class DialogPublishOnThredds extends Dialog { setButtons(Dialog.OKCANCEL); this.getButtonById(Dialog.OK).setText("Publish"); + this.getButtonById(Dialog.CANCEL).setText("Close"); // this.getButtonById(Dialog.CANCEL).setText("Reset"); txtCatalogueName = new TextField(); txtCatalogueName.setEmptyText("Type a Name..."); @@ -208,15 +212,15 @@ public class DialogPublishOnThredds extends Dialog { @Override public void onFailure(Throwable caught) { - // TODO Auto-generated method stub + new MessageBoxAlert("Error", caught.getMessage(), null); } @Override public void onSuccess(TransferOnThreddsReport result) { - + GWT.log("Publishing on Thredds return: "+result); if(result!=null){ - //START TIMER... + pollingStart(result); } } @@ -239,6 +243,59 @@ public class DialogPublishOnThredds extends Dialog { this.show(); } + public void showResult(TransferOnThreddsReport result){ + + + if(result.isOnError()){ + MessageBox.info("Error", result.getReportMessage(), null); + } + + if(result.isTransferringReportAvailable()){ + InfoDisplay.display("Transferring completed", "Refreshing folder content..."); + FileModel folderTarget = new FileModel(result.getFolderId(), "", true); + AppControllerExplorer.getEventBus().fireEvent(new RefreshFolderEvent(folderTarget, false, false, true)); + } + + } + + public void pollingStart(final TransferOnThreddsReport result){ + + showResult(result); + + final Timer t = new Timer(){ + + public void run() { + + AppControllerExplorer.rpcWorkspaceService.getStatusOfPublishingOnThreddsCatalogue(result.getTransferId(), new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + MessageBox.alert("Error", caught.getMessage(), null); + } + + @Override + public void onSuccess(TransferOnThreddsReport result) { + GWT.log("Get status of Publishing on Thredds return: "+result); + + showResult(result); + if(result.isOnError() || result.isTransferringReportAvailable()){ + GWT.log("Cancelling timer for Transferring: "+result); + cancelTimer(); + } + + } + }); + + }; + + public void cancelTimer(){ + this.cancel(); + } + }; + + t.scheduleRepeating(2000); + + } /** * Checks if is valid form. 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 6e91e1b..266b0f4 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 @@ -4207,7 +4207,6 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT } - /** * Publish on thredds catalogue. * @@ -4216,6 +4215,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT * @param vreScope the vre scope * @param catalogueName the catalogue name * @return the transfer on thredds report + * @throws Exception the exception */ @Override public TransferOnThreddsReport publishOnThreddsCatalogue(String folderToPublishId, String folderMetadataId, String vreScope, String catalogueName) throws Exception{ @@ -4230,7 +4230,30 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT return pub.publishFolder(folderToPublishId, folderMetadataId, userToken, catalogueName); }catch(Exception e){ workspaceLogger.error("Error occurred server-side when transfer to Thredds: ", e); - throw new Exception("Sorry, an error occurred erver-side performing transfer to Thredds, try again later"); + throw new Exception("Sorry, an error occurred server-side performing transfer to Thredds, try again later"); + } + + } + + /** + * Gets the publishing on thredds catalogue. + * + * @param transferId the transfer id + * @return the publishing on thredds catalogue + * @throws Exception the exception + */ + @Override + public TransferOnThreddsReport getStatusOfPublishingOnThreddsCatalogue(String transferId) throws Exception{ + workspaceLogger.debug("Getting publishing on thredds for transfer id: "+transferId); + TransferOnThreddsReport tr = null; + try{ + tr = PublishOnThredds.getStatusOfTransferId(this.getThreadLocalRequest().getSession(), transferId); + return tr; + }catch(Exception e){ + workspaceLogger.error("Error occurred server-side when getting the status of transferring on Thredds: ", e); + tr.setOnError(true); + WsUtil.setTransferPublishingOnThredds(this.getThreadLocalRequest().getSession(), tr); + throw new Exception("Sorry, an error occurred server-side getting the status of transferring on 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 9ac2334..7532484 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 @@ -134,12 +134,12 @@ public class PublishOnThredds { | InternalErrorException | HomeNotFoundException | UserNotFoundException e) { - logger.error("Error on getting workspace for thredds transfering to folder: "+folderId, 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 transfering to folder: "+folderId, e); + 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); } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/shared/TransferOnThreddsReport.java b/src/main/java/org/gcube/portlets/user/workspace/shared/TransferOnThreddsReport.java index b242a21..2607937 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/shared/TransferOnThreddsReport.java +++ b/src/main/java/org/gcube/portlets/user/workspace/shared/TransferOnThreddsReport.java @@ -61,11 +61,11 @@ public class TransferOnThreddsReport implements Serializable, IsSerializable{ /** - * Gets the report created on workspace. + * Checks if is transferring report available. * - * @return the reportCreatedOnWorkspace + * @return the boolean */ - public Boolean getReportCreatedOnWorkspace() { + public Boolean isTransferringReportAvailable() { return reportCreatedOnWorkspace; } @@ -98,7 +98,7 @@ public class TransferOnThreddsReport implements Serializable, IsSerializable{ * * @return the onError */ - public Boolean getOnError() { + public Boolean isOnError() { return onError; }