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.dialog.DialogConfirm; import org.gcube.portlets.widgets.wsthreddssync.client.dialog.DialogResult; 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.PerformDoUnSyncEvent; import org.gcube.portlets.widgets.wsthreddssync.client.event.PerformDoUnSyncEventHandler; import org.gcube.portlets.widgets.wsthreddssync.client.event.ShowMonitorSyncStatusEvent; import org.gcube.portlets.widgets.wsthreddssync.client.event.ShowMonitorSyncStatusEventHandler; import org.gcube.portlets.widgets.wsthreddssync.client.rpc.ThreddsWorkspaceSyncServiceAsync; import org.gcube.portlets.widgets.wsthreddssync.client.view.LoaderIcon; import org.gcube.portlets.widgets.wsthreddssync.client.view.WsThreddsWidgetViewManager; import org.gcube.portlets.widgets.wsthreddssync.client.view.binder.MonitorFolderSyncStatusView; import org.gcube.portlets.widgets.wsthreddssync.shared.WsFolder; import org.gcube.portlets.widgets.wsthreddssync.shared.WsThreddsSynchFolderConfiguration; import org.gcube.portlets.widgets.wsthreddssync.shared.WsThreddsSynchFolderDescriptor; import com.github.gwtbootstrap.client.ui.Modal; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; // TODO: Auto-generated Javadoc /** * The Class WsThreddsWidget. * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * Feb 14, 2018 */ public class WsThreddsWidget implements HasWsSyncNotificationListner { /** The ws thredds sync service. */ public static final ThreddsWorkspaceSyncServiceAsync wsThreddsSyncService = ThreddsWorkspaceSyncServiceAsync.Util.getInstance(); /** The Constant eventBus. */ public final static HandlerManager eventBus = new HandlerManager(null); private WsThreddsWidgetViewManager viewManager = new WsThreddsWidgetViewManager(); private WsFolder currentFolder; /** * This is the entry point method. */ public WsThreddsWidget() { bindEvents(); } /** * Bind events. */ private void bindEvents() { eventBus.addHandler(PerformDoSyncEvent.TYPE, new PerformDoSyncEventHandler() { @Override public void onPerformDoSync(PerformDoSyncEvent performDoSyncEvent) { //GWT.log("One PerformDoSyncEvent "+Random.nextDouble()); if(performDoSyncEvent.getFolder()!=null) performFolderSync(performDoSyncEvent.getFolder(), performDoSyncEvent.getConf()); } }); eventBus.addHandler(ShowMonitorSyncStatusEvent.TYPE, new ShowMonitorSyncStatusEventHandler() { @Override public void onShowMonitorSyncStatus(ShowMonitorSyncStatusEvent showSyncStatusEvent) { if(showSyncStatusEvent.getFolder()!=null) viewManager.showMonitorSyncToFolder(showSyncStatusEvent.getFolder()); } }); eventBus.addHandler(PerformDoUnSyncEvent.TYPE, new PerformDoUnSyncEventHandler() { @Override public void onPerformDoUnSync(final PerformDoUnSyncEvent performDoUnSyncEvent) { if(performDoUnSyncEvent.getFolder()!=null){ DialogConfirm confirm = new DialogConfirm(null, "Unsync confirm?", "Deleting sync configurations to the folder: "+performDoUnSyncEvent.getFolder().getFoderName() +", Confirm?"); confirm.getYesButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { performFolderUnSync(performDoUnSyncEvent.getFolder()); } }); } } }); } /** * Show sync folder info. * * @param folder the folder * @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"); MonitorFolderSyncStatusView monitor = viewManager.getMonitor(folder); //SHOWING CURRENT ACTIVE MONITOR if(monitor!=null) { GWT.log("Monitor for folder: "+folder.getFolderId() +" exists showing it.."); viewManager.showMonitorSyncToFolder(folder); return; } final Modal box = new Modal(true); box.setTitle("Checking configurations..."); LoaderIcon loader = new LoaderIcon("Checking folder configurations..."); box.add(loader); GWT.log("Performing isItemSynched: "+folder.getFolderId()); WsThreddsWidget.wsThreddsSyncService.isItemSynched(folder.getFolderId(), new AsyncCallback() { @Override public void onSuccess(WsThreddsSynchFolderDescriptor result) { box.hide(); //GWT.log("WsThreddsSynchFolderDescriptor result: "+result); viewManager.showThreddsFolderInfo(folder, result); } @Override public void onFailure(Throwable caught) { box.hide(); if(caught instanceof WorkspaceFolderLocked){ viewManager.showMonitorSyncToFolder(folder); return; } viewManager.cancelMonitor(folder); // TODO Auto-generated method stub Window.alert(caught.getMessage()); } }); box.show(); } private void performFolderUnSync(WsFolder folder) { this.currentFolder = folder; GWT.log("Performing doSyncFolder on: "+folder); final Modal box = new Modal(true); box.setTitle("Deleting..."); box.hide(false); LoaderIcon loader = new LoaderIcon("Deleting sync configurations to the folder: "+folder.getFoderName()); box.add(loader); wsThreddsSyncService.doUnSyncFolder(folder.getFolderId(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); if(box!=null) box.hide(); } @Override public void onSuccess(Boolean result) { box.hide(); if(result){ DialogResult dlg = new DialogResult(null, "Unsync performed", "Unsync was performed correctly"); dlg.show(); } } }); box.show(); } /** * Perform folder sync. * * @param folder the folder * @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..."); box.hide(false); LoaderIcon loader = new LoaderIcon("Inizializiting synchronization to the folder: "+folder.getFoderName()); box.add(loader); wsThreddsSyncService.doSyncFolder(folder.getFolderId(), config, new AsyncCallback() { @Override public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); viewManager.cancelMonitor(folder); if(box!=null) box.hide(); } @Override public void onSuccess(ThSyncStatus result) { if(box!=null) box.hide(); GWT.log("doSyncFolder Updating sync status: "+result); viewManager.showMonitorSyncToFolder(folder); } }); 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); } }