ws-thredds-sync-widget/src/main/java/org/gcube/portlets/widgets/wsthreddssync/client/WsThreddsWidget.java

257 lines
7.8 KiB
Java

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<WsThreddsSynchFolderDescriptor>() {
@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<Boolean>() {
@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<ThSyncStatus>() {
@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);
}
}