2018-03-02 17:03:57 +01:00
package org.gcube.portlets.widgets.wsthreddssync.client ;
2018-03-13 15:09:36 +01:00
import org.gcube.portal.wssynclibrary.shared.WorkspaceFolderLocked ;
2018-03-02 17:03:57 +01:00
import org.gcube.portal.wssynclibrary.shared.thredds.ThSyncStatus ;
2018-03-13 15:09:36 +01:00
import org.gcube.portlets.widgets.wsthreddssync.client.SyncCompletedNotification.HasWsSyncNotificationListner ;
import org.gcube.portlets.widgets.wsthreddssync.client.SyncCompletedNotification.SyncCompletedNotificationListner ;
2018-03-13 17:39:09 +01:00
import org.gcube.portlets.widgets.wsthreddssync.client.dialog.DialogConfirm ;
import org.gcube.portlets.widgets.wsthreddssync.client.dialog.DialogResult ;
2018-03-02 17:03:57 +01:00
import org.gcube.portlets.widgets.wsthreddssync.client.event.PerformDoSyncEvent ;
import org.gcube.portlets.widgets.wsthreddssync.client.event.PerformDoSyncEventHandler ;
2018-03-13 17:39:09 +01:00
import org.gcube.portlets.widgets.wsthreddssync.client.event.PerformDoUnSyncEvent ;
import org.gcube.portlets.widgets.wsthreddssync.client.event.PerformDoUnSyncEventHandler ;
2018-03-02 17:03:57 +01:00
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 ;
2018-03-13 17:39:09 +01:00
import com.google.gwt.event.dom.client.ClickEvent ;
import com.google.gwt.event.dom.client.ClickHandler ;
2018-03-02 17:03:57 +01:00
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
* /
2018-03-13 15:09:36 +01:00
public class WsThreddsWidget implements HasWsSyncNotificationListner {
2018-03-02 17:03:57 +01:00
/** The ws thredds sync service. */
public static final ThreddsWorkspaceSyncServiceAsync wsThreddsSyncService = ThreddsWorkspaceSyncServiceAsync . Util . getInstance ( ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
/** The Constant eventBus. */
public final static HandlerManager eventBus = new HandlerManager ( null ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
private WsThreddsWidgetViewManager viewManager = new WsThreddsWidgetViewManager ( ) ;
2018-03-13 15:09:36 +01:00
private WsFolder currentFolder ;
2018-03-02 17:03:57 +01:00
/ * *
* This is the entry point method .
* /
public WsThreddsWidget ( ) {
bindEvents ( ) ;
}
/ * *
* Bind events .
* /
private void bindEvents ( ) {
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
eventBus . addHandler ( PerformDoSyncEvent . TYPE , new PerformDoSyncEventHandler ( ) {
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
@Override
public void onPerformDoSync ( PerformDoSyncEvent performDoSyncEvent ) {
2018-03-05 15:44:51 +01:00
//GWT.log("One PerformDoSyncEvent "+Random.nextDouble());
2018-03-02 17:03:57 +01:00
if ( performDoSyncEvent . getFolder ( ) ! = null )
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
performFolderSync ( performDoSyncEvent . getFolder ( ) , performDoSyncEvent . getConf ( ) ) ;
}
} ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
eventBus . addHandler ( ShowMonitorSyncStatusEvent . TYPE , new ShowMonitorSyncStatusEventHandler ( ) {
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
@Override
public void onShowMonitorSyncStatus ( ShowMonitorSyncStatusEvent showSyncStatusEvent ) {
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
if ( showSyncStatusEvent . getFolder ( ) ! = null )
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
viewManager . showMonitorSyncToFolder ( showSyncStatusEvent . getFolder ( ) ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
}
} ) ;
2018-03-05 15:44:51 +01:00
2018-03-13 17:39:09 +01:00
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 ( ) ) ;
}
} ) ;
}
}
} ) ;
2018-03-02 17:03:57 +01:00
}
/ * *
* Show sync folder info .
*
* @param folder the folder
* @throws Exception the exception
* /
public void showSyncFolderInfo ( final WsFolder folder ) throws Exception {
2018-03-13 15:09:36 +01:00
this . currentFolder = folder ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
if ( folder = = null | | folder . getFolderId ( ) = = null )
throw new Exception ( " Invalid parameter folder null " ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
MonitorFolderSyncStatusView monitor = viewManager . getMonitor ( folder ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
//SHOWING CURRENT ACTIVE MONITOR
if ( monitor ! = null ) {
GWT . log ( " Monitor for folder: " + folder . getFolderId ( ) + " exists showing it.. " ) ;
viewManager . showMonitorSyncToFolder ( folder ) ;
return ;
}
2018-03-05 10:59:30 +01:00
2018-03-02 17:03:57 +01:00
final Modal box = new Modal ( true ) ;
box . setTitle ( " Checking configurations... " ) ;
LoaderIcon loader = new LoaderIcon ( " Checking folder configurations... " ) ;
box . add ( loader ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:26:44 +01:00
GWT . log ( " Performing isItemSynched: " + folder . getFolderId ( ) ) ;
2018-03-02 17:03:57 +01:00
WsThreddsWidget . wsThreddsSyncService . isItemSynched ( folder . getFolderId ( ) , new AsyncCallback < WsThreddsSynchFolderDescriptor > ( ) {
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
@Override
public void onSuccess ( WsThreddsSynchFolderDescriptor result ) {
box . hide ( ) ;
//GWT.log("WsThreddsSynchFolderDescriptor result: "+result);
viewManager . showThreddsFolderInfo ( folder , result ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
}
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
@Override
public void onFailure ( Throwable caught ) {
box . hide ( ) ;
2018-03-13 15:09:36 +01:00
if ( caught instanceof WorkspaceFolderLocked ) {
viewManager . showMonitorSyncToFolder ( folder ) ;
return ;
}
viewManager . cancelMonitor ( folder ) ;
2018-03-02 17:03:57 +01:00
// TODO Auto-generated method stub
Window . alert ( caught . getMessage ( ) ) ;
}
} ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
box . show ( ) ;
}
2018-03-05 15:44:51 +01:00
2018-03-13 17:39:09 +01:00
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 ( ) ;
}
2018-03-02 17:03:57 +01:00
/ * *
* Perform folder sync .
*
* @param folder the folder
* @param config the config
* /
private void performFolderSync ( final WsFolder folder , WsThreddsSynchFolderConfiguration config ) {
2018-03-13 15:09:36 +01:00
this . currentFolder = folder ;
2018-03-02 17:03:57 +01:00
GWT . log ( " Performing doSyncFolder on: " + folder ) ;
final Modal box = new Modal ( true ) ;
box . setTitle ( " Starting synchronization... " ) ;
2018-03-05 11:54:33 +01:00
box . hide ( false ) ;
2018-03-02 17:03:57 +01:00
LoaderIcon loader = new LoaderIcon ( " Inizializiting synchronization to the folder: " + folder . getFoderName ( ) ) ;
box . add ( loader ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
wsThreddsSyncService . doSyncFolder ( folder . getFolderId ( ) , config , new AsyncCallback < ThSyncStatus > ( ) {
@Override
public void onFailure ( Throwable caught ) {
Window . alert ( caught . getMessage ( ) ) ;
viewManager . cancelMonitor ( folder ) ;
2018-03-05 15:44:51 +01:00
if ( box ! = null )
box . hide ( ) ;
2018-03-02 17:03:57 +01:00
}
@Override
public void onSuccess ( ThSyncStatus result ) {
2018-03-05 15:44:51 +01:00
if ( box ! = null )
box . hide ( ) ;
GWT . log ( " doSyncFolder Updating sync status: " + result ) ;
2018-03-02 17:03:57 +01:00
viewManager . showMonitorSyncToFolder ( folder ) ;
2018-03-05 15:44:51 +01:00
2018-03-02 17:03:57 +01:00
}
} ) ;
box . show ( ) ;
}
2018-03-13 15:09:36 +01:00
/ * ( 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 ) ;
}
2018-03-02 17:03:57 +01:00
}