From 2e43561c987b392c6241ff4b8b1078c6e4d31e49 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Tue, 13 Mar 2018 14:09:36 +0000 Subject: [PATCH] Handled ProcessNotFoundException git-svn-id: http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/portlets/widgets/ws-thredds-sync-widget@165000 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/SyncCompletedNotification.java | 58 +++++++ .../wsthreddssync/client/WsThreddsWidget.java | 29 +++- .../client/dialog/PanelConfirmBuilder.java | 163 ++++++++++++++++++ .../rpc/ThreddsWorkspaceSyncService.java | 5 +- .../view/WsThreddsWidgetViewManager.java | 57 +++++- .../view/binder/AbstractViewDialogBox.java | 87 +++++++++- .../CreateThreddsConfigurationView.java | 12 +- .../server/SyncronizeWithThredds.java | 7 +- .../ThreddsWorkspaceSyncServiceImpl.java | 8 +- 9 files changed, 412 insertions(+), 14 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/SyncCompletedNotification.java create mode 100644 src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/dialog/PanelConfirmBuilder.java diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/SyncCompletedNotification.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/SyncCompletedNotification.java new file mode 100644 index 0000000..1c42d66 --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/SyncCompletedNotification.java @@ -0,0 +1,58 @@ +/** + * + */ +package org.gcube.portlets.widgets.wsthreddssync.client; + +import org.gcube.portlets.widgets.wsthreddssync.shared.WsFolder; + + +/** + * The Class SyncCompletedNotification. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Mar 13, 2018 + */ +public class SyncCompletedNotification { + + + /** + * The Interface SyncCompletedNotificationListner. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Mar 13, 2018 + */ + public interface SyncCompletedNotificationListner{ + + /** + * On sync completed. + * + * @param folder the folder + */ + void onSyncCompleted(WsFolder folder); + + /** + * On sync error. + * + * @param folder the folder + */ + void onSyncError(WsFolder folder); + } + + + /** + * The Interface HasWsSyncNotificationListner. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Mar 13, 2018 + */ + public interface HasWsSyncNotificationListner { + + /** + * Adds the sync completed listner. + * + * @param listner the listner + */ + public void addSyncCompletedListner(SyncCompletedNotificationListner listner); + + } +} diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/WsThreddsWidget.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/WsThreddsWidget.java index 4a09ac1..ecbf898 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/WsThreddsWidget.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/WsThreddsWidget.java @@ -1,6 +1,9 @@ package org.gcube.portlets.widgets.wsthreddssync.client; +import org.gcube.portal.wssynclibrary.shared.WorkspaceFolderLocked; import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncStatus; +import org.gcube.portlets.widgets.wsthreddssync.client.SyncCompletedNotification.HasWsSyncNotificationListner; +import org.gcube.portlets.widgets.wsthreddssync.client.SyncCompletedNotification.SyncCompletedNotificationListner; import org.gcube.portlets.widgets.wsthreddssync.client.event.PerformDoSyncEvent; import org.gcube.portlets.widgets.wsthreddssync.client.event.PerformDoSyncEventHandler; import org.gcube.portlets.widgets.wsthreddssync.client.event.ShowMonitorSyncStatusEvent; @@ -27,7 +30,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Feb 14, 2018 */ -public class WsThreddsWidget { +public class WsThreddsWidget implements HasWsSyncNotificationListner { /** The ws thredds sync service. */ public static final ThreddsWorkspaceSyncServiceAsync wsThreddsSyncService = ThreddsWorkspaceSyncServiceAsync.Util.getInstance(); @@ -37,6 +40,8 @@ public class WsThreddsWidget { private WsThreddsWidgetViewManager viewManager = new WsThreddsWidgetViewManager(); + private WsFolder currentFolder; + /** * This is the entry point method. */ @@ -85,6 +90,7 @@ public class WsThreddsWidget { * @throws Exception the exception */ public void showSyncFolderInfo(final WsFolder folder) throws Exception { + this.currentFolder = folder; if(folder==null || folder.getFolderId()==null) throw new Exception("Invalid parameter folder null"); @@ -117,8 +123,14 @@ public class WsThreddsWidget { @Override public void onFailure(Throwable caught) { - viewManager.cancelMonitor(folder); box.hide(); + + if(caught instanceof WorkspaceFolderLocked){ + viewManager.showMonitorSyncToFolder(folder); + return; + } + + viewManager.cancelMonitor(folder); // TODO Auto-generated method stub Window.alert(caught.getMessage()); } @@ -136,7 +148,7 @@ public class WsThreddsWidget { * @param config the config */ private void performFolderSync(final WsFolder folder, WsThreddsSynchFolderConfiguration config) { - + this.currentFolder = folder; GWT.log("Performing doSyncFolder on: "+folder); final Modal box = new Modal(true); box.setTitle("Starting synchronization..."); @@ -167,4 +179,15 @@ public class WsThreddsWidget { }); box.show(); } + + /* (non-Javadoc) + * @see org.gcube.portlets.widgets.wsthreddssync.client.SyncCompletedNotification.HasWsSyncNotificationListner#addSyncCompletedListner(org.gcube.portlets.widgets.wsthreddssync.client.SyncCompletedNotification.SyncCompletedNotificationListner) + */ + @Override + public void addSyncCompletedListner(SyncCompletedNotificationListner listner) { + + listner.onSyncCompleted(currentFolder); + + } + } diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/dialog/PanelConfirmBuilder.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/dialog/PanelConfirmBuilder.java new file mode 100644 index 0000000..1746d1e --- /dev/null +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/dialog/PanelConfirmBuilder.java @@ -0,0 +1,163 @@ +/** + * + */ +package org.gcube.portlets.widgets.wsthreddssync.client.dialog; + + +import org.gcube.portlets.widgets.wsthreddssync.client.resource.Icons; + +import com.github.gwtbootstrap.client.ui.Alert; +import com.github.gwtbootstrap.client.ui.constants.AlertType; +import com.google.gwt.dom.client.Style.Unit; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.resources.client.ImageResource; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.DockPanel; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; + + + +/** + * The Class PanelConfirmBuilder. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Mar 13, 2018 + */ +public abstract class PanelConfirmBuilder { + + private DockPanel dock = new DockPanel(); + private Button yesButton; + private VerticalPanel vpContainer; + private ImageResource loading = Icons.ICONS.loading(); + private HorizontalPanel hpButtons = new HorizontalPanel(); + private Button noButton; + + /** + * On click no button. + */ + public abstract void onClickNoButton(); + + /** + * On click yes button. + */ + public abstract void onClickYesButton(); + + + /** + * Instantiates a new panel confirm builder. + * + * @param img the img + * @param caption the caption + * @param text the text + */ + public PanelConfirmBuilder(Image img, String caption, String text, AlertType type) { + dock.setSpacing(4); + dock.setWidth("100%"); +// setHeading(caption); + + yesButton = new Button("Yes"); + + yesButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + onClickYesButton(); + } + }); + + noButton = new Button("No"); + + noButton.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + onClickNoButton(); + } + }); + + vpContainer = new VerticalPanel(); + vpContainer.getElement().getStyle().setMargin(20.0, Unit.PX); + Alert txt = new Alert(text); + txt.setType(type); + txt.setClose(false); + vpContainer.add(txt); + hpButtons = new HorizontalPanel(); + hpButtons.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); +// hpButtons.getElement().getStyle().setMarginTop(20.0, Unit.PX); + hpButtons.setSpacing(3); + yesButton.getElement().getStyle().setMarginRight(20.0, Unit.PX); + hpButtons.add(yesButton); + hpButtons.add(noButton); + + dock.add(hpButtons, DockPanel.SOUTH); + dock.setCellHorizontalAlignment(hpButtons, DockPanel.ALIGN_CENTER); + + if (img != null) + dock.add(img, DockPanel.WEST); + + dock.add(vpContainer, DockPanel.CENTER); +// add(dock); + } + + + /** + * Loader. + * + * @param message the message + */ + public void loader(String message){ + try{ + dock.remove(hpButtons); + }catch(Exception e){} + vpContainer.clear(); + HorizontalPanel hpMask = new HorizontalPanel(); + hpMask.add(new Image(loading)); + HTML html = new HTML(message); + html.getElement().getStyle().setMarginLeft(5, Unit.PX); + hpMask.add(html); + vpContainer.add(hpMask); + } + + /** + * Adds the to center panel. + * + * @param w the w + */ + public void addToCenterPanel(Widget w) { + vpContainer.add(w); + } + + /** + * Gets the dock. + * + * @return the dock + */ + public DockPanel getPanel() { + return dock; + } + + /** + * Gets the yes button. + * + * @return the yes button + */ + public Button getYesButton() { + return yesButton; + } + + /** + * Gets the no button. + * + * @return the no button + */ + public Button getNoButton() { + return noButton; + } +} \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/rpc/ThreddsWorkspaceSyncService.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/rpc/ThreddsWorkspaceSyncService.java index befab9b..03f3064 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/rpc/ThreddsWorkspaceSyncService.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/rpc/ThreddsWorkspaceSyncService.java @@ -3,6 +3,7 @@ package org.gcube.portlets.widgets.wsthreddssync.client.rpc; import java.util.List; import org.gcube.portal.wssynclibrary.shared.ItemNotSynched; +import org.gcube.portal.wssynclibrary.shared.WorkspaceFolderLocked; import org.gcube.portal.wssynclibrary.shared.thredds.ThCatalogueBean; import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncStatus; import org.gcube.portlets.widgets.wsthreddssync.shared.GcubeScope; @@ -27,10 +28,10 @@ public interface ThreddsWorkspaceSyncService extends RemoteService { * * @param folderId the folder id * @return the ws thredds synch folder descriptor - * @throws ItemNotSynched the item not synched + * @throws WorkspaceFolderLocked the workspace folder locked * @throws Exception the exception */ - WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws ItemNotSynched, Exception; + WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws WorkspaceFolderLocked, Exception; /** * Do sync folder. diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/WsThreddsWidgetViewManager.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/WsThreddsWidgetViewManager.java index 2502ca4..cb108b3 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/WsThreddsWidgetViewManager.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/WsThreddsWidgetViewManager.java @@ -25,7 +25,9 @@ import com.github.gwtbootstrap.client.ui.constants.AlertType; import com.google.gwt.core.shared.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.VerticalPanel; @@ -138,6 +140,13 @@ public class WsThreddsWidgetViewManager { box.hide(); } + + @Override + public void confirmHanlder(CONFIRM_VALUE confirm, Command command) { + + // TODO Auto-generated method stub + + } }; if(monitorView==null) { @@ -176,9 +185,7 @@ public class WsThreddsWidgetViewManager { @Override public void onFailure(Throwable caught) { cancelMonitor(folder); - - //SHOW MESSAGE ON ERROR - + Window.alert(caught.getMessage()); } @Override @@ -236,6 +243,18 @@ public class WsThreddsWidgetViewManager { box.hide(); } + + @Override + public void confirmHanlder(CONFIRM_VALUE confirm, Command command) { + + if(confirm.equals(CONFIRM_VALUE.YES)){ + box.hide(); + } + + if(command!=null) + command.execute(); + + } }; CreateThreddsConfigurationView createThreddsConfiguration = new CreateThreddsConfigurationView(folder.getFolderId()) { @@ -260,6 +279,31 @@ public class WsThreddsWidgetViewManager { panelView.setError(visible, error); } + + @Override + public void setConfirm(boolean visible, String msg) { + + Command yes = new Command() { + + @Override + public void execute() { + + submitHandler(); + } + }; + + Command no = new Command() { + + @Override + public void execute() { + + panelView.setConfirm(false, "", null, null); + } + }; + + panelView.setConfirm(visible, msg, yes, no); + + } }; panelView.addViewAsWidget(createThreddsConfiguration); @@ -291,6 +335,13 @@ public class WsThreddsWidgetViewManager { public void closeHandler() { box.hide(); } + + @Override + public void confirmHanlder(CONFIRM_VALUE confirm, Command command) { + + // TODO Auto-generated method stub + + } }; boolean isCreateConfiguration = folderDescriptor==null?true:false; diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/AbstractViewDialogBox.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/AbstractViewDialogBox.java index ea36f59..a9105aa 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/AbstractViewDialogBox.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/AbstractViewDialogBox.java @@ -1,6 +1,7 @@ package org.gcube.portlets.widgets.wsthreddssync.client.view.binder; +import org.gcube.portlets.widgets.wsthreddssync.client.dialog.PanelConfirmBuilder; import org.gcube.portlets.widgets.wsthreddssync.client.view.LoaderIcon; import com.github.gwtbootstrap.client.ui.Alert; @@ -12,6 +13,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.Command; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.ScrollPanel; @@ -34,6 +36,14 @@ public abstract class AbstractViewDialogBox extends Composite { /** The default width. */ public static int DEFAULT_WIDTH = 500; + + /** + * The Enum CONFIRM_VALUE. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Mar 13, 2018 + */ + public static enum CONFIRM_VALUE {YES, NO} /** * The Interface AbstractViewDialogBoxUiBinder. * @@ -71,11 +81,22 @@ public abstract class AbstractViewDialogBox extends Composite { /** The alert info. */ protected Alert alertInfo = new Alert(); + + protected PanelConfirmBuilder confirmBuilder; + /** * Close handler. */ public abstract void closeHandler(); + + /** + * Confirm hanlder. + * + * @param confirm the confirm + */ + public abstract void confirmHanlder(CONFIRM_VALUE confirm, Command command); + /** * Because this class has a default constructor, it can * be used as a binder template. In other words, it can be used in other @@ -141,8 +162,17 @@ public abstract class AbstractViewDialogBox extends Composite { * @param text the text */ public void showLoading(boolean visible, String text){ + + try{ + validator_field.remove(loaderIcon); + }catch(Exception e){ + + } + loaderIcon.setVisible(visible); loaderIcon.setText(text); + + validator_field.add(loaderIcon); } @@ -153,8 +183,17 @@ public abstract class AbstractViewDialogBox extends Composite { * @param error the error */ public void setError(boolean visible, String error) { + + try{ + validator_field.remove(alertError); + }catch(Exception e){ + + } + alertError.setVisible(visible); alertError.setText(error==null?"":error); + + validator_field.add(alertError); } @@ -162,12 +201,58 @@ public abstract class AbstractViewDialogBox extends Composite { * Sets the error. * * @param visible the visible - * @param error the error + * @param msg the msg */ public void setInfo(boolean visible, String msg) { + + + try{ + validator_field.remove(alertInfo); + }catch(Exception e){ + + } + alertInfo.setVisible(visible); alertInfo.setText(msg==null?"":msg); + + validator_field.add(alertInfo); } + /** + * Sets the confirm. + * + * @param visible the visible + * @param msg the msg + */ + public void setConfirm(boolean visible, String msg, final Command yes, final Command no){ + + try{ + validator_field.remove(confirmBuilder.getPanel()); + }catch(Exception e){ + + } + + if(visible){ + + confirmBuilder = new PanelConfirmBuilder(null, null, msg, AlertType.WARNING) { + + @Override + public void onClickYesButton() { + + confirmHanlder(CONFIRM_VALUE.YES, yes); + } + + @Override + public void onClickNoButton() { + + confirmHanlder(CONFIRM_VALUE.NO, no); + } + }; + + validator_field.add(confirmBuilder.getPanel()); + } + + } + } diff --git a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/CreateThreddsConfigurationView.java b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/CreateThreddsConfigurationView.java index c04c734..dccda16 100644 --- a/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/CreateThreddsConfigurationView.java +++ b/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/view/binder/CreateThreddsConfigurationView.java @@ -131,6 +131,16 @@ public abstract class CreateThreddsConfigurationView extends Composite { public abstract void setError(boolean visible, String error); + + /** + * Sets the confirm. + * + * @param visible the visible + * @param msg the msg + */ + public abstract void setConfirm(boolean visible, String msg); + + /** * Because this class has a default constructor, it can * be used as a binder template. In other words, it can be used in other @@ -349,7 +359,7 @@ public abstract class CreateThreddsConfigurationView extends Composite { if(field_folder_name.getValue() == null || field_folder_name.getValue().isEmpty()){ cg_folder_name.setType(ControlGroupType.WARNING); - setError(true, "The Catalogue Entry is required"); + setConfirm(true, "The Catalogue Entry is empty. Do you want continue anyway?"); return false; }else if(field_folder_name.getValue().startsWith("/")){ cg_folder_name.setType(ControlGroupType.ERROR); 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 494462b..c321355 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 @@ -8,6 +8,7 @@ import java.util.List; import org.gcube.common.authorization.library.provider.SecurityTokenProvider; 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; import org.gcube.portal.wssynclibrary.shared.thredds.ThCatalogueBean; import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncFolderDescriptor; @@ -165,9 +166,10 @@ public class SyncronizeWithThredds { * @param userToken the user token * @return the th sync folder descriptor * @throws ItemNotSynched the item not synched + * @throws WorkspaceFolderLocked the workspace folder locked * @throws Exception the exception */ - public ThSyncFolderDescriptor checkItemSynched(String folderId, String scope, String userToken) throws ItemNotSynched, Exception{ + public ThSyncFolderDescriptor checkItemSynched(String folderId, String scope, String userToken) throws ItemNotSynched, WorkspaceFolderLocked, Exception{ setContextParameters(scope, userToken); return workspaceThreddsSynchronize.checkItemSynched(folderId); @@ -212,9 +214,8 @@ public class SyncronizeWithThredds { * @param scope the scope * @param userToken the user token * @param targetToken the target token - * @return * @return the available catalogues by token - * @throws Exception + * @throws Exception the exception */ public List getAvailableCataloguesByToken(String scope, String userToken, String targetToken) throws Exception { setContextParameters(scope, userToken); 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 3536099..d4c1f75 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 @@ -5,6 +5,7 @@ import java.util.List; import org.gcube.common.portal.PortalContext; import org.gcube.portal.wssynclibrary.shared.ItemNotSynched; +import org.gcube.portal.wssynclibrary.shared.WorkspaceFolderLocked; 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; @@ -216,7 +217,7 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem * @see org.gcube.portlets.widgets.wsthreddssync.client.rpc.ThreddsWorkspaceSyncService#isItemSynched(java.lang.String) */ @Override - public WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws Exception{ + public WsThreddsSynchFolderDescriptor isItemSynched(String folderId) throws WorkspaceFolderLocked, Exception{ logger.debug("Performing isItemSynched for foldeId: "+folderId); @@ -241,6 +242,11 @@ public class ThreddsWorkspaceSyncServiceImpl extends RemoteServiceServlet implem } 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);