package org.gcube.portlets.user.workspace.client; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.gcube.common.workspacetaskexecutor.shared.FilterOperator; import org.gcube.portal.clientcontext.client.GCubeClientContext; import org.gcube.portlets.user.workspace.client.ConstantsExplorer.WS_UPLOAD_TYPE; import org.gcube.portlets.user.workspace.client.ConstantsExplorer.WsPortletInitOperation; import org.gcube.portlets.user.workspace.client.event.AccountingHistoryEvent; import org.gcube.portlets.user.workspace.client.event.AccountingHistoryEventHandler; import org.gcube.portlets.user.workspace.client.event.AccountingReadersEvent; import org.gcube.portlets.user.workspace.client.event.AccountingReadersEventHandler; import org.gcube.portlets.user.workspace.client.event.AddAdministratorEvent; import org.gcube.portlets.user.workspace.client.event.AddAdministratorEventHandler; import org.gcube.portlets.user.workspace.client.event.AddFolderEvent; import org.gcube.portlets.user.workspace.client.event.AddFolderEventHandler; import org.gcube.portlets.user.workspace.client.event.AddSmartFolderEvent; import org.gcube.portlets.user.workspace.client.event.AddSmartFolderEventHandler; import org.gcube.portlets.user.workspace.client.event.CheckItemLockedBySyncEvent; import org.gcube.portlets.user.workspace.client.event.CheckItemLockedBySyncEventHandler; import org.gcube.portlets.user.workspace.client.event.CompletedFileUploadEvent; import org.gcube.portlets.user.workspace.client.event.CompletedFileUploadEventHandler; import org.gcube.portlets.user.workspace.client.event.CopyItemsEvent; import org.gcube.portlets.user.workspace.client.event.CopyItemsEventHandler; import org.gcube.portlets.user.workspace.client.event.CreateSharedFolderEvent; import org.gcube.portlets.user.workspace.client.event.CreateSharedFolderEventHandler; import org.gcube.portlets.user.workspace.client.event.CreateUrlEvent; import org.gcube.portlets.user.workspace.client.event.CreateUrlEventHandler; import org.gcube.portlets.user.workspace.client.event.DeleteItemEvent; import org.gcube.portlets.user.workspace.client.event.DeleteItemEventHandler; import org.gcube.portlets.user.workspace.client.event.DeleteSmartFolderEvent; import org.gcube.portlets.user.workspace.client.event.DeleteSmartFolderEventHandler; import org.gcube.portlets.user.workspace.client.event.DragOnTreeMoveItemEvent; import org.gcube.portlets.user.workspace.client.event.DragOnTreeMoveItemEventHandler; import org.gcube.portlets.user.workspace.client.event.EditUserPermissionEvent; import org.gcube.portlets.user.workspace.client.event.EditUserPermissionEventHandler; import org.gcube.portlets.user.workspace.client.event.ExecuteDataMinerTaskEvent; import org.gcube.portlets.user.workspace.client.event.ExecuteDataMinerTaskEventHandler; import org.gcube.portlets.user.workspace.client.event.ExpandFolderEvent; import org.gcube.portlets.user.workspace.client.event.ExpandFolderEventHandler; import org.gcube.portlets.user.workspace.client.event.FileDownloadEvent; import org.gcube.portlets.user.workspace.client.event.FileDownloadEvent.DownloadType; import org.gcube.portlets.user.workspace.client.event.FileDownloadEventHandler; import org.gcube.portlets.user.workspace.client.event.FileUploadEvent; import org.gcube.portlets.user.workspace.client.event.FileUploadEventHandler; import org.gcube.portlets.user.workspace.client.event.GetFolderLinkEvent; import org.gcube.portlets.user.workspace.client.event.GetFolderLinkEventHandler; import org.gcube.portlets.user.workspace.client.event.GetInfoEvent; import org.gcube.portlets.user.workspace.client.event.GetInfoEventHandler; import org.gcube.portlets.user.workspace.client.event.GetPublicLinkEventHandler; import org.gcube.portlets.user.workspace.client.event.GetShareLinkEvent; import org.gcube.portlets.user.workspace.client.event.GetShareableLink; import org.gcube.portlets.user.workspace.client.event.GetSharedLinkEventHandler; import org.gcube.portlets.user.workspace.client.event.ImagePreviewEvent; import org.gcube.portlets.user.workspace.client.event.ImagePreviewEventHandler; import org.gcube.portlets.user.workspace.client.event.LoadFolderEvent; import org.gcube.portlets.user.workspace.client.event.LoadTreeEvent; import org.gcube.portlets.user.workspace.client.event.LoadTreeEventHandler; import org.gcube.portlets.user.workspace.client.event.MoveItemsEvent; import org.gcube.portlets.user.workspace.client.event.MoveItemsEventHandler; import org.gcube.portlets.user.workspace.client.event.OpenContextMenuTreeEvent; import org.gcube.portlets.user.workspace.client.event.OpenContextMenuTreeEventHandler; import org.gcube.portlets.user.workspace.client.event.OpenUrlEvent; import org.gcube.portlets.user.workspace.client.event.OpenUrlEventHandler; import org.gcube.portlets.user.workspace.client.event.PublishOnDataCatalogueEvent; import org.gcube.portlets.user.workspace.client.event.PublishOnDataCatalogueEventHandler; import org.gcube.portlets.user.workspace.client.event.RefreshFolderEvent; import org.gcube.portlets.user.workspace.client.event.RefreshItemEventHandler; import org.gcube.portlets.user.workspace.client.event.RenameItemEvent; import org.gcube.portlets.user.workspace.client.event.RenameItemEventHandler; import org.gcube.portlets.user.workspace.client.event.RenderForm; import org.gcube.portlets.user.workspace.client.event.RenderFormEventHandler; import org.gcube.portlets.user.workspace.client.event.SelectedItemEvent; import org.gcube.portlets.user.workspace.client.event.SelectedItemEventHandler; import org.gcube.portlets.user.workspace.client.event.SessionExpiredEvent; import org.gcube.portlets.user.workspace.client.event.SessionExpiredEventHandler; import org.gcube.portlets.user.workspace.client.event.SmartFolderSelectedEvent; import org.gcube.portlets.user.workspace.client.event.SmartFolderSelectedEventHandler; import org.gcube.portlets.user.workspace.client.event.SubTreeLoadedEvent; import org.gcube.portlets.user.workspace.client.event.SubTreeLoadedEventHandler; import org.gcube.portlets.user.workspace.client.event.SwitchViewEvent; import org.gcube.portlets.user.workspace.client.event.SwitchViewEventHandler; import org.gcube.portlets.user.workspace.client.event.SyncWithThreddsCatalogueEvent; import org.gcube.portlets.user.workspace.client.event.SyncWithThreddsCatalogueEventHandler; import org.gcube.portlets.user.workspace.client.event.TrashEvent; import org.gcube.portlets.user.workspace.client.event.TrashEventHandler; import org.gcube.portlets.user.workspace.client.event.UnShareFolderEvent; import org.gcube.portlets.user.workspace.client.event.UnShareFolderEventHandler; import org.gcube.portlets.user.workspace.client.event.UpdateWorkspaceSizeEvent; import org.gcube.portlets.user.workspace.client.event.UpdateWorkspaceSizeEventHandler; import org.gcube.portlets.user.workspace.client.event.UpdatedVREPermissionEvent; import org.gcube.portlets.user.workspace.client.event.UpdatedVREPermissionEventHandler; import org.gcube.portlets.user.workspace.client.event.VRESettingPermissionEvent; import org.gcube.portlets.user.workspace.client.event.VRESettingPermissionEventHandler; import org.gcube.portlets.user.workspace.client.event.VersioningHistoryShowEvent; import org.gcube.portlets.user.workspace.client.event.VersioningHistoryShowEventHandler; import org.gcube.portlets.user.workspace.client.interfaces.EventsTypeEnum; import org.gcube.portlets.user.workspace.client.interfaces.GXTFolderItemTypeEnum; import org.gcube.portlets.user.workspace.client.interfaces.GuiEventInterface; import org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface; import org.gcube.portlets.user.workspace.client.interfaces.TreeAppControllerInterface; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; import org.gcube.portlets.user.workspace.client.model.SubTree; import org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService; import org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceServiceAsync; import org.gcube.portlets.user.workspace.client.util.RequestBuilderWorkspaceValidateItem; import org.gcube.portlets.user.workspace.client.util.WindowOpenParameter; import org.gcube.portlets.user.workspace.client.view.ExplorerPanel; import org.gcube.portlets.user.workspace.client.view.sharing.DialogPermission; import org.gcube.portlets.user.workspace.client.view.sharing.DialogShareFolder; import org.gcube.portlets.user.workspace.client.view.tree.AsyncTreePanel; import org.gcube.portlets.user.workspace.client.view.windows.DialogAddFolderAndSmart; import org.gcube.portlets.user.workspace.client.view.windows.DialogAddFolderAndSmart.AddType; import org.gcube.portlets.user.workspace.client.view.windows.DialogAddUrl; import org.gcube.portlets.user.workspace.client.view.windows.DialogGetInfo; import org.gcube.portlets.user.workspace.client.view.windows.DialogGetLink; import org.gcube.portlets.user.workspace.client.view.windows.DialogGetLink.Link_Type; import org.gcube.portlets.user.workspace.client.view.windows.DialogInfoboot; import org.gcube.portlets.user.workspace.client.view.windows.DialogShareLink; import org.gcube.portlets.user.workspace.client.view.windows.DialogShareableLink; import org.gcube.portlets.user.workspace.client.view.windows.DialogText; import org.gcube.portlets.user.workspace.client.view.windows.ImagesPreviewController; import org.gcube.portlets.user.workspace.client.view.windows.InfoDisplayMessage; import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxAlert; import org.gcube.portlets.user.workspace.client.view.windows.MessageBoxConfirm; import org.gcube.portlets.user.workspace.client.view.windows.NewBrowserWindow; import org.gcube.portlets.user.workspace.client.view.windows.accounting.WindowAccountingInfo; import org.gcube.portlets.user.workspace.client.workspace.GWTWorkspaceItem; import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalImage; import org.gcube.portlets.user.workspace.client.workspace.folder.item.GWTExternalUrl; import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTImageDocument; import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTUrlDocument; import org.gcube.portlets.user.workspace.shared.SHUBOperationNotAllowedException; import org.gcube.portlets.user.workspace.shared.SessionExpiredException; import org.gcube.portlets.user.workspace.shared.UserBean; import org.gcube.portlets.user.workspace.shared.WorkspaceOperationResult; import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingField; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.events.CloseCreationFormEvent; import org.gcube.portlets.widgets.ckandatapublisherwidget.client.ui.form.CreateDatasetForm; import org.gcube.portlets.widgets.workspacesharingwidget.client.MultiDragConstants; import org.gcube.portlets.widgets.workspacesharingwidget.client.MultiDragWorkspaceContactAdmin; import org.gcube.portlets.widgets.workspacesharingwidget.client.ShowPermissionsDialog; import org.gcube.portlets.widgets.workspacesharingwidget.client.rpc.WorkspaceSharingServiceAsync; import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.UserStore; import org.gcube.portlets.widgets.workspacesharingwidget.shared.InfoContactModel; import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener; import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE; import org.gcube.portlets.widgets.workspaceuploader.client.uploader.MultipleDilaogUpload; import org.gcube.portlets.widgets.wsexplorer.client.WorkspaceExplorerConstants; import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener; import org.gcube.portlets.widgets.wsexplorer.client.select.WorkspaceExplorerSelectDialog; import org.gcube.portlets.widgets.wsexplorer.client.view.grid.ItemsTable.DISPLAY_FIELD; import org.gcube.portlets.widgets.wsexplorer.shared.Item; import org.gcube.portlets.widgets.wstaskexecutor.client.WsTaskExecutorWidget; import org.gcube.portlets.widgets.wstaskexecutor.shared.SelectableOperator; import org.gcube.portlets.widgets.wstaskexecutor.shared.WSItem; import org.gcube.portlets.widgets.wsthreddssync.client.SyncCompletedNotification.SyncCompletedNotificationListner; import org.gcube.portlets.widgets.wsthreddssync.client.WsThreddsWidget; import org.gcube.portlets.widgets.wsthreddssync.shared.WsFolder; import com.extjs.gxt.ui.client.Registry; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.MessageBoxEvent; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.MessageBox; import com.github.gwtbootstrap.client.ui.Modal; import com.github.gwtbootstrap.client.ui.event.HideEvent; import com.github.gwtbootstrap.client.ui.event.HideHandler; import com.google.gwt.core.client.GWT; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.http.client.RequestBuilder; 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.HasWidgets; /** * The Class AppControllerExplorer. * * @author Francesco Mangiacrapa francesco.mangiacrapa{@literal @}isti.cnr.it May 15, 2017 */ public class AppControllerExplorer implements EventHandler, TreeAppControllerInterface { private static final String METHOD_IS_NO_LONGER_USED = "method is no longer used"; public static final GWTWorkspaceServiceAsync rpcWorkspaceService = (GWTWorkspaceServiceAsync) GWT .create(GWTWorkspaceService.class); private ExplorerPanel explorerPanel; private final static HandlerManager eventBus = new HandlerManager(null); private HashMap> subscribers = null; private boolean selectRootItem; public static String myLogin; public static String myLoginFirstName; // PRE-LOAD LIST OF USER FORM LIFERAY private UserStore userStore = new UserStore(); private static AppControllerExplorer singleton; private Map msgFolderSynched = new HashMap(); private WsThreddsWidget wsThreddsWidget = new WsThreddsWidget(); private WsTaskExecutorWidget taskExecutor = new WsTaskExecutorWidget(); public static final int delayTime = 3000; /** * Instantiates a new app controller explorer. */ public AppControllerExplorer() { Registry.register(ConstantsExplorer.RPC_WORKSPACE_SERVICE, rpcWorkspaceService); subscribers = new HashMap>(); bind(); singleton = this; } /** * Gets the single instance of AppControllerExplorer. * * @return single instance of AppControllerExplorer */ public static AppControllerExplorer getInstance() { return singleton; } /** * Gets the event bus. * * @return the event bus */ public static HandlerManager getEventBus() { return eventBus; } /** * Gets the rpc workspace service. * * @return the rpc workspace service */ public GWTWorkspaceServiceAsync getRpcWorkspaceService() { return rpcWorkspaceService; } /** * Bind. */ private void bind() { eventBus.addHandler(CheckItemLockedBySyncEvent.TYPE, new CheckItemLockedBySyncEventHandler() { @Override public void onCheckItemLockedBySync(final CheckItemLockedBySyncEvent checkItemLockedBySyncEvent) { GWT.log("Fired CheckItemLocked..."); if (checkItemLockedBySyncEvent.getItem() != null) { rpcWorkspaceService.isItemUnderSync(checkItemLockedBySyncEvent.getItem().getIdentifier(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } @Override public void onSuccess(Boolean result) { GWT.log("CheckItemLocked for folder: " + checkItemLockedBySyncEvent.getItem().getName() + " returned locked: " + result); String msgDisplayed = msgFolderSynched .get(checkItemLockedBySyncEvent.getItem().getIdentifier()); if (msgDisplayed == null && result) { String msg = "The folder: " + checkItemLockedBySyncEvent.getItem().getName() + ", " + ConstantsExplorer.MSG_FOLDER_LOCKED_BY_SYNC; MessageBox.info("Warning: folder under synchornization", msg, null); msgFolderSynched.put(checkItemLockedBySyncEvent.getItem().getIdentifier(), msg); } } }); } } }); eventBus.addHandler(PublishOnDataCatalogueEvent.TYPE, new PublishOnDataCatalogueEventHandler() { @Override public void onPublish(PublishOnDataCatalogueEvent publishEvent) { // get the folder id final String folderId = publishEvent.getFolderId(); if (folderId != null && !folderId.isEmpty()) { final Modal modal = new Modal(true, true); modal.setTitle("Publish Item"); modal.addStyleName("insert-metadata-modal-style"); modal.addStyleName("modal-top-custom"); // ((Element)modal.getElement().getChildNodes().getItem(1)).addClassName("modal-body-custom"); modal.add(new CreateDatasetForm(folderId, eventBus)); modal.setCloseVisible(true); modal.show(); // hide any popup panel opened modal.addHideHandler(new HideHandler() { @Override public void onHide(HideEvent hideEvent) { eventBus.fireEvent(new CloseCreationFormEvent()); } }); } } }); eventBus.addHandler(SyncWithThreddsCatalogueEvent.TYPE, new SyncWithThreddsCatalogueEventHandler() { @Override public void onSync(SyncWithThreddsCatalogueEvent publishEvent) { final FileModel folder = publishEvent.getFolderToPublish(); if (folder != null) { WsFolder wsFolder = new WsFolder(folder.getIdentifier(), folder.getName()); try { wsThreddsWidget.showSyncFolderInfo(wsFolder); wsThreddsWidget.addSyncCompletedListner(new SyncCompletedNotificationListner() { @Override public void onSyncError(WsFolder folder) { rpcWorkspaceService.getListParentsByItemIdentifier(folder.getFolderId(), false, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method // stub } @Override public void onSuccess(List result) { if (result.size() > 0) { eventBus.fireEvent(new RefreshFolderEvent( result.get(result.size() - 1), true, false, false)); } } }); } @Override public void onSyncCompleted(WsFolder folder) { if (folder != null) { rpcWorkspaceService.getListParentsByItemIdentifier(folder.getFolderId(), false, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated // method stub } @Override public void onSuccess(List result) { if (result.size() > 0) { eventBus.fireEvent(new RefreshFolderEvent( result.get(result.size() - 1), true, false, false)); } } }); } } @Override public void onUnSyncPerformed(WsFolder folder) { if (folder != null) { rpcWorkspaceService.getListParentsByItemIdentifier(folder.getFolderId(), false, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated // method stub } @Override public void onSuccess(List result) { if (result.size() > 0) { eventBus.fireEvent(new RefreshFolderEvent( result.get(result.size() - 1), true, false, false)); } } }); } } }); } catch (Exception e) { Window.alert(e.getMessage()); } } } }); eventBus.addHandler(VersioningHistoryShowEvent.TYPE, new VersioningHistoryShowEventHandler() { @Override public void onFileVersioning(VersioningHistoryShowEvent versioningHistoryEvent) { FileModel file = versioningHistoryEvent.getTargetFileModel(); if (file == null) return; notifySubscriber(versioningHistoryEvent); } }); eventBus.addHandler(ExecuteDataMinerTaskEvent.TYPE, new ExecuteDataMinerTaskEventHandler() { @Override public void onExecuteDMTask(ExecuteDataMinerTaskEvent executeDataMinerTaskEvent) { if (executeDataMinerTaskEvent.getTargetFileModel() != null) { WSItem wsItem = new WSItem(executeDataMinerTaskEvent.getTargetFileModel().getIdentifier(), executeDataMinerTaskEvent.getTargetFileModel().getName()); wsItem.setFolder(executeDataMinerTaskEvent.getTargetFileModel().isDirectory()); try { String[] filterForParameterTypes = new String[1]; filterForParameterTypes[0] = "FILE"; FilterOperator filterOperator = wsItem.isFolder() ? FilterOperator.LOGICAL_NOT : FilterOperator.LOGICAL_OR; SelectableOperator selectableOperator = new SelectableOperator(filterForParameterTypes, filterOperator); taskExecutor.showTaskConfigurations(wsItem, selectableOperator); } catch (Exception e) { Window.alert(e.getMessage()); } } } }); eventBus.addHandler(UpdateWorkspaceSizeEvent.TYPE, new UpdateWorkspaceSizeEventHandler() { @Override public void onUpdateWorkspaceSize(UpdateWorkspaceSizeEvent updateWorkspaceSizeEvent) { doUpdateWorkspaceSize(updateWorkspaceSizeEvent); } }); eventBus.addHandler(RenderForm.TYPE, new RenderFormEventHandler() { @Override public void onRenderForm(RenderForm event) { } }); eventBus.addHandler(GetFolderLinkEvent.TYPE, new GetFolderLinkEventHandler() { @Override public void onGetFolderLink(GetFolderLinkEvent getFolderLinkEvent) { GWT.log("getFolderLinkEvent.getSourceFile() " + getFolderLinkEvent.getSourceFile()); // TODO Auto-generated method stub if (getFolderLinkEvent.getSourceFile() != null) { GWT.log("getFolderLinkEvent.getSourceFile() " + getFolderLinkEvent.getSourceFile()); DialogGetLink dialog = new DialogGetLink("Copy to clipboard Public Link to folder: Ctrl+C", getFolderLinkEvent.getSourceFile(), null, Link_Type.FOLDER_LINK, getFolderLinkEvent.isSetPublic()); dialog.show(); } } }); eventBus.addHandler(UnShareFolderEvent.TYPE, new UnShareFolderEventHandler() { @Override public void onUnShareFolder(UnShareFolderEvent unShareFolderEvent) { final FileModel source = unShareFolderEvent.getTargetFileModel(); String folderId = null; if (source != null) folderId = source.getIdentifier(); if (folderId != null) { String msg = "Unsharing the folder, the files will be removed from your workspace. Continue?"; MessageBoxConfirm mbc = new MessageBoxConfirm("Confirm Unshare?", msg); final String folderIdentification = folderId; mbc.getMessageBoxConfirm().addCallback(new Listener() { public void handleEvent(MessageBoxEvent be) { // IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if (clickedButton.equals(Dialog.YES)) { GWT.log("Calling unSharedFolderByFolderSharedId for id: "+folderIdentification); explorerPanel.getAsycTreePanel().mask(ConstantsExplorer.UNSHARING, ConstantsExplorer.LOADINGSTYLE); WorkspaceSharingServiceAsync.INSTANCE.unSharedFolderByFolderSharedId( folderIdentification, new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } new MessageBoxAlert("Error", caught.getMessage(), null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(Boolean result) { GWT.log("Waiting " + delayTime); if (result) { // REFRESH PARENT // FOLDER Timer t = new Timer() { @Override public void run() { GWT.log("Runing refresh after wait: " + delayTime); eventBus.fireEvent(new RefreshFolderEvent( source.getParentFileModel(), true, true, false)); explorerPanel.getAsycTreePanel().unmask(); } }; t.schedule(delayTime); } else explorerPanel.getAsycTreePanel().unmask(); } }); } } }); } } }); eventBus.addHandler(TrashEvent.TYPE, new TrashEventHandler() { @Override public void onTrashEvent(TrashEvent trashEvent) { notifySubscriber(trashEvent); } }); eventBus.addHandler(AddAdministratorEvent.TYPE, new AddAdministratorEventHandler() { @Override public void onAddAdministrator(AddAdministratorEvent addAdministratorEvent) { final FileModel file = addAdministratorEvent.getSelectedFolder(); if (file == null || file.getIdentifier() == null) return; // ADMINISTRATOR/S CAN EDIT OTHER ADMINISTRATOR/S showAddAdministratorsDialog(file); // COMMENTED 03-03-2017 ONLY OWNER CAN EDIT ADMINISTRATOR/S /* * rpcWorkspaceService.getOwnerByItemId(file.getIdentifier(), * new AsyncCallback() { * * @Override public void onFailure(Throwable caught) { * * if(caught instanceof SessionExpiredException){ * GWT.log("Session expired"); eventBus.fireEvent(new * SessionExpiredEvent()); return; } * * new MessageBoxAlert("Error", * "Sorry, an error occurred on recovering the contacts, try again later" * , null); explorerPanel.unmask(); } * * @Override public void onSuccess(InfoContactModel * infoContactModel) { * * //IF IS OWNER * if(AppControllerExplorer.myLogin.compareToIgnoreCase( * infoContactModel.getLogin())==0) * showAddAdministratorsDialog(file); else new * MessageBoxAlert("Permission denied", * "You have no permissions to manage administrators. You are not manager of \"" * +file.getName()+"\"", null); * * } }); */ } }); eventBus.addHandler(EditUserPermissionEvent.TYPE, new EditUserPermissionEventHandler() { @Override public void onEditUserPermission(EditUserPermissionEvent editUserPermissionEvent) { final FileModel file = editUserPermissionEvent.getSourceFolder(); if (file == null || file.getIdentifier() == null) return; WorkspaceSharingServiceAsync.INSTANCE.getOwnerByItemId(file.getIdentifier(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } new MessageBoxAlert("Error", "Sorry, an error occurred on recovering the contacts, try again later", null); explorerPanel.unmask(); } @Override public void onSuccess(InfoContactModel infoContactModel) { ediPermissions(file); // GWT.log("Comparing owner login // "+infoContactModel +" with " // +AppControllerExplorer.myLogin); // //IF IS OWNER // if(AppControllerExplorer.myLogin.compareToIgnoreCase(infoContactModel.getLogin())==0) // ediPermissions(file); // else // new MessageBoxAlert("Permission denied", "You // have no authority to manage user permissions. // You are not manager of // \""+file.getName()+"\"", null); } }); } }); eventBus.addHandler(GetInfoEvent.TYPE, new GetInfoEventHandler() { @Override public void onGetInfo(GetInfoEvent getInfoEvent) { new DialogGetInfo(getInfoEvent.getSourceFile()); //new DialogInfoboot(getInfoEvent.getSourceFile()); } }); eventBus.addHandler(CreateSharedFolderEvent.TYPE, new CreateSharedFolderEventHandler() { @Override public void onCreateSharedFolder(CreateSharedFolderEvent createSharedFolderEvent) { final FileModel sourceFileModel = createSharedFolderEvent.getFileSourceModel(); // IF ITEM IS SHAREABLE if (sourceFileModel.isShareable()) { // DEBUG System.out.println( "create shared folderEvent - sourceFileModel id " + sourceFileModel.getIdentifier()); final FileModel parentFileModel = createSharedFolderEvent.getParentFileModel(); final boolean isNewFolder = createSharedFolderEvent.isNewFolder(); DialogShareFolder dialogSharedFolder = null; String parentDirectoryName = null; FileModel parent = null; // COMMENTED 26/02/2014 // if(parentFileModel==null){ //PARENT IS ROOT // parent = explorerPanel.getAsycTreePanel().getRootItem(); // sourceFileModel.setParentFileModel(parent); // } if (sourceFileModel.isDirectory()) { // explorerPanel.getAsycTreePanel().setExpandTreeLevel(sourceFileModel.getIdentifier(), // true); parentDirectoryName = sourceFileModel.getName(); parent = sourceFileModel; } else { parentDirectoryName = parentFileModel.getName(); } if (isNewFolder) dialogSharedFolder = new DialogShareFolder(parentDirectoryName, eventBus, userStore); else dialogSharedFolder = new DialogShareFolder(parentDirectoryName, sourceFileModel, eventBus, userStore); final DialogShareFolder finalDialog = dialogSharedFolder; final FileModel parentModel = parent; finalDialog.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { if (finalDialog.isValidForm(true)) { FileModel fileModel = null; if (isNewFolder) { // create a lowest object to send to server fileModel = new FileModel("tempId", finalDialog.getName(), parentModel, true, false); // create new shared folder } else { fileModel = finalDialog.getParentFolder(); // add // user // for // share // create a lowest object to send to server fileModel = new FileModel(fileModel.getIdentifier(), fileModel.getName(), fileModel.getParentFileModel(), fileModel.isDirectory(), fileModel.isShared()); } fileModel.setDescription(finalDialog.getDescription()); // DEBUG /* * System.out.println("FileModel id "+fileModel. * getIdentifier() + * " name: "+fileModel.getName() + " parent " + * fileModel.getParentFileModel()); * for(InfoContactModel * contact:finalDialog.getSharedListUsers() ){ * System.out.println("Share with Contact " * +contact) ; * * } */ System.out.println("ACL is " + finalDialog.getSelectedACL()); Info.display("Info", "An operation of sharing was submitted"); explorerPanel.mask("Setting permissions", ConstantsExplorer.LOADINGSTYLE); WorkspaceSharingServiceAsync.INSTANCE.shareFolder(fileModel.getIdentifier(), fileModel.getName(), fileModel.getDescription(), fileModel.getParentFileModel() != null ? fileModel.getParentFileModel().getIdentifier() : null, finalDialog.getSharedListUsers(), isNewFolder, finalDialog.getSelectedACL(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } new MessageBoxAlert("Error", caught.getMessage(), null); explorerPanel.unmask(); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(Boolean result) { if (result) { // REFRESH PARENT FOLDER Timer t = new Timer() { @Override public void run() { GWT.log("Runing refresh after wait: " + delayTime); // TODO FileModel parentToRefresh = null; if (isNewFolder) parentToRefresh = parentModel; else parentToRefresh = parentFileModel; GWT.log("share completed throwing refresh folder : " + parentToRefresh.getName() + " get id: " + parentToRefresh.getIdentifier()); // UPDATED ID RefreshFolderEvent refEvent = new RefreshFolderEvent( parentToRefresh, true, true, false); refEvent.setForceReloadBreadCrumb(true); eventBus.fireEvent(refEvent); explorerPanel.unmask(); } }; t.schedule(delayTime); } explorerPanel.unmask(); } }); } } }); } else {// ITEM IS NOT SHAREABLE new InfoDisplayMessage("Info", "The selected item is not shareable because an ancestor item is already shared"); } } }); // ********EVENTS TO NOTIFY SUBSCRIBERS eventBus.addHandler(SubTreeLoadedEvent.TYPE, new SubTreeLoadedEventHandler() { @Override public void onSubTreeLoaded(SubTreeLoadedEvent event) { doSubTreeLoaded(event); } private void doSubTreeLoaded(SubTreeLoadedEvent event) { notifySubscriber(event); } }); // ********EVENTS TO NOTIFY SUBSCRIBERS eventBus.addHandler(SessionExpiredEvent.TYPE, new SessionExpiredEventHandler() { @Override public void onSessionExpired(SessionExpiredEvent sessionExpiredEvent) { notifySubscriber(sessionExpiredEvent); } }); eventBus.addHandler(GetShareLinkEvent.TYPE, new GetSharedLinkEventHandler() { @Override public void onGetLink(GetShareLinkEvent getLinkEvent) { if (getLinkEvent.getSourceFile() != null) { String currentUrl = portalURL(); int lastChar = currentUrl.lastIndexOf("?"); currentUrl = lastChar > -1 ? currentUrl.substring(0, lastChar) : currentUrl; // IF // EXISTS // - // REMOVE // STRING // AFTER // ? // (? // INLCUSE) // int last = currentUrl.lastIndexOf("/"); // String shareLinkUrl = currentUrl.substring(0,last+1) + // "?" // +ConstantsExplorer.GET_ITEMID_PARAMETER+"="+getLinkEvent.getSourceFile().getIdentifier(); String shareLinkUrl = currentUrl + "?" + ConstantsExplorer.GET_ITEMID_PARAMETER + "=" + getLinkEvent.getSourceFile().getIdentifier(); shareLinkUrl += "&" + ConstantsExplorer.GET_OPERATION_PARAMETER + "=" + WsPortletInitOperation.gotofolder; DialogShareLink dialog = new DialogShareLink("Copy to clipboard Share Link: Ctrl+C", shareLinkUrl); dialog.show(); } } }); eventBus.addHandler(GetShareableLink.TYPE, new GetPublicLinkEventHandler() { @Override public void onGetPublicLink(GetShareableLink getPublicLinkEvent) { // TODO Auto-generated method stub if (getPublicLinkEvent.getSourceFile() != null) { new DialogShareableLink(getPublicLinkEvent.getSourceFile(), getPublicLinkEvent.getVersion()); } } }); eventBus.addHandler(RefreshFolderEvent.TYPE, new RefreshItemEventHandler() { @Override public void onRefreshItem(RefreshFolderEvent refreshItemEvent) { GWT.log("RefreshFolderEvent: " + refreshItemEvent); if (refreshItemEvent.getFolderTarget() != null && refreshItemEvent.getFolderTarget().getIdentifier() != null) { if (!refreshItemEvent.isCalledTreeSide()) { // Called Tree // side explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder( refreshItemEvent.getFolderTarget().getIdentifier(), refreshItemEvent.isExpandFolder()); notifySubscriber(refreshItemEvent); } else { // Validating folder existence - called portlet // side // FileModel target = // explorerPanel.getAsycTreePanel().getFileModelByIdentifier(refreshItemEvent.getFolderTarget().getIdentifier()); // if(target!=null) explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder( refreshItemEvent.getFolderTarget().getIdentifier(), refreshItemEvent.isExpandFolder()); } } else GWT.log("warn: escape refresh because item is null"); } }); // Called from context menu on grid eventBus.addHandler(OpenContextMenuTreeEvent.TYPE, new OpenContextMenuTreeEventHandler() { @Override public void onOpenContextMenuTree(OpenContextMenuTreeEvent openContextMenuTreeEvent) { explorerPanel.getAsycTreePanel().getContextMenuTree().openContextMenuOnItem( openContextMenuTreeEvent.getSelectedItems(), openContextMenuTreeEvent.getClientX(), openContextMenuTreeEvent.getClientY()); } }); eventBus.addHandler(CopyItemsEvent.TYPE, new CopyItemsEventHandler() { @Override public void onCopyItems(final CopyItemsEvent copytemEvent) { if (copytemEvent.getIds() != null && copytemEvent.getIds().size() > 0) { explorerPanel.mask("Copying...", ConstantsExplorer.LOADINGSTYLE); rpcWorkspaceService.copyItems(copytemEvent.getIds(), copytemEvent.getDestinationFolderId(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.unmask(); if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } new MessageBoxAlert("Error", caught.getMessage() + ".", null); explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder( copytemEvent.getDestinationFolderId(), false); notifySubscriber(copytemEvent); } @Override public void onSuccess(WorkspaceOperationResult result) { explorerPanel.unmask(); GWT.log("Copy terminated without error? " + result); FileModel folderDestionationInTree = explorerPanel.getAsycTreePanel() .getFileModelByIdentifier(copytemEvent.getDestinationFolderId()); GWT.log("Destination Folder: " + copytemEvent.getDestinationFolderId() + " is in Tree: " + folderDestionationInTree); if (result.getError() != null) new MessageBoxAlert("Error", result.getError(), null); if (folderDestionationInTree != null) eventBus.fireEvent( new RefreshFolderEvent(folderDestionationInTree, true, false, false)); notifySubscriber(copytemEvent); } }); } } }); eventBus.addHandler(MoveItemsEvent.TYPE, new MoveItemsEventHandler() { @Override public void onMoveItems(MoveItemsEvent moveItemEvent) { GWT.log("MoveItemEvent is fired on : " + moveItemEvent.getIds().size() + "items, DestinationId: " + moveItemEvent.getDestionationFolderId()); doMoveItems(moveItemEvent); } private void doMoveItems(final MoveItemsEvent moveItemsEvent) { if (moveItemsEvent.getIds() == null || moveItemsEvent.getIds().size() == 0) return; WorkspaceExplorerConstants.SELECT = "Move"; DISPLAY_FIELD[] displayFields = new DISPLAY_FIELD[] { DISPLAY_FIELD.ICON, DISPLAY_FIELD.NAME, DISPLAY_FIELD.OWNER }; final WorkspaceExplorerSelectDialog navigator = new WorkspaceExplorerSelectDialog("Move to...", true, moveItemsEvent.getSourceParentFolder().getIdentifier(), "", displayFields); WorskpaceExplorerSelectNotificationListener listener = new WorskpaceExplorerSelectNotificationListener() { @Override public void onSelectedItem(Item item) { navigator.hide(); if (item == null) new MessageBoxAlert("Error", "No folder selected", null); GWT.log("destionation folder is: " + item); final String destinationFolderId = item.getId(); moveItemsEvent.setDestionationFolderId(destinationFolderId); // do // not // remove // this // set explorerPanel.mask("Moving...", ConstantsExplorer.LOADINGSTYLE); rpcWorkspaceService.moveItems(moveItemsEvent.getIds(), destinationFolderId, new AsyncCallback() { public void onFailure(Throwable caught) { explorerPanel.unmask(); if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } new MessageBoxAlert("Error", caught.getMessage() + ".", null); explorerPanel.getAsycTreePanel() .reloadTreeLevelAndExpandFolder(destinationFolderId, false); String sourceParentId = moveItemsEvent.getSourceParentFolder() != null ? moveItemsEvent.getSourceParentFolder().getIdentifier() : null; explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder(sourceParentId, true); notifySubscriber(moveItemsEvent); // WE // MISSING // THE // PARENT // OF // destinationFolderId } @Override public void onSuccess(WorkspaceOperationResult result) { explorerPanel.unmask(); GWT.log("Move terminated without error? " + result); // NO ERROR if (result.getError() == null) { // REFRESHING SOURCE PARENT FOLDER eventBus.fireEvent(new RefreshFolderEvent( moveItemsEvent.getSourceParentFolder(), true, false, false)); } else { // WITH ERROR new MessageBoxAlert("Error", result.getError(), null); } // GETTING DESTINATION FOLDER FileModel folderDestionationInTree = explorerPanel.getAsycTreePanel() .getFileModelByIdentifier(destinationFolderId); GWT.log("Destination Folder: " + destinationFolderId + " is in Tree: " + folderDestionationInTree); // IF DESTINATION FOLDER IS IN THE TREE, // REFRESH IT if (folderDestionationInTree != null) eventBus.fireEvent(new RefreshFolderEvent(folderDestionationInTree, true, false, false)); moveItemsEvent.setTreeRefreshable(false); // forcing // grid // refresh notifySubscriber(moveItemsEvent); } }); } @Override public void onFailed(Throwable throwable) { GWT.log("onFailed.."); navigator.hide(); } @Override public void onAborted() { GWT.log("onAborted.."); } @Override public void onNotValidSelection() { GWT.log("onNotValidSelection.."); } }; navigator.addWorkspaceExplorerSelectNotificationListener(listener); navigator.show(); } }); eventBus.addHandler(SwitchViewEvent.TYPE, new SwitchViewEventHandler() { @Override public void onSwitchView(SwitchViewEvent switchViewEvent) { notifySubscriber(switchViewEvent); } }); eventBus.addHandler(LoadTreeEvent.TYPE, new LoadTreeEventHandler() { @Override public void doLoadTree(LoadTreeEvent loadtreeEvent) { selectRootItem = loadtreeEvent.isSelectRoot(); //SET IS SEARCH TO FALSE explorerPanel.getAsycTreePanel().setSearch(false); // RELOAD TREE ROOT explorerPanel.getAsycTreePanel().loadRootItem(selectRootItem); } }); eventBus.addHandler(AccountingHistoryEvent.TYPE, new AccountingHistoryEventHandler() { @Override public void onAccountingHistoryShow(AccountingHistoryEvent accountingHistoryEvent) { FileModel fileItem = accountingHistoryEvent.getTargetFileModel(); if (fileItem != null) { String title = ConstantsExplorer.ACCOUNTING_HISTORY_OF + fileItem.getName(); final WindowAccountingInfo winInfo = new WindowAccountingInfo(fileItem, title); winInfo.show(); winInfo.maskAccountingInfo(true); rpcWorkspaceService.getAccountingHistory(fileItem.getIdentifier(), new AsyncCallback>() { @Override public void onFailure(Throwable caught) { winInfo.maskAccountingInfo(false); new MessageBoxAlert("Error", caught.getMessage(), null); } @Override public void onSuccess(List result) { winInfo.updateInfoContainer(result); winInfo.maskAccountingInfo(false); } }); } } }); eventBus.addHandler(AccountingReadersEvent.TYPE, new AccountingReadersEventHandler() { @Override public void onAccountingReadersShow(AccountingReadersEvent accountingReadersEvent) { FileModel fileItem = accountingReadersEvent.getTargetFileModel(); if (fileItem != null) { String title = ConstantsExplorer.ACCOUNTING_READERS_OF + fileItem.getName(); final WindowAccountingInfo winInfo = new WindowAccountingInfo(fileItem, title); winInfo.show(); winInfo.maskAccountingInfo(true); rpcWorkspaceService.getAccountingReaders(fileItem.getIdentifier(), new AsyncCallback>() { @Override public void onFailure(Throwable caught) { winInfo.maskAccountingInfo(false); new MessageBoxAlert("Error", caught.getMessage(), null); } @Override public void onSuccess(List result) { winInfo.updateInfoContainer(result); winInfo.maskAccountingInfo(false); } }); } } }); eventBus.addHandler(FileDownloadEvent.TYPE, new FileDownloadEventHandler() { @Override public void onFileDownloadEvent(FileDownloadEvent fileDownloadEvent) { if (fileDownloadEvent.getItemIdentifier() != null) { // Add currentContextId parameter String currentContextId = GCubeClientContext.getCurrentContextId(); if (fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)) { if (fileDownloadEvent.getItemName() != null) { try { // String currentUserId = // GCubeClientContext.getCurrentUserId(); String queryString = "id=" + fileDownloadEvent.getItemIdentifier() + "&viewContent=true&" + ConstantsExplorer.CURRENT_CONTEXT_ID + "=" + currentContextId; if (fileDownloadEvent.getVersionId() != null) queryString += "&" + ConstantsExplorer.FILE_VERSION_ID + "=" + fileDownloadEvent.getVersionId(); new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET, ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE, queryString, "_blank", downloadHandlerCallback); } catch (Exception e) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", e.getMessage(), null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } } // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", // fileDownloadEvent.getItemName(), ""); } else { // Task #12601 - Migrated to StorageHub /* * if (fileDownloadEvent.isFolder()) { * FolderDownloadDialog dlg = new * FolderDownloadDialog(fileDownloadEvent, myLogin); * dlg.setPopupPosition(Window.getClientWidth() - * (FolderDownloadDialog.WIDTH + 50), * Window.getClientHeight() - * (FolderDownloadDialog.HEIGHT + 120)); dlg.show(); } * * else { try { //String currentUserId = * GCubeClientContext.getCurrentUserId(); String * queryString = * "id="+fileDownloadEvent.getItemIdentifier()+"&"+ * ConstantsExplorer.CURRENT_CONTEXT_ID+"="+ * currentContextId; * if(fileDownloadEvent.getVersionId()!=null) * queryString+="&"+ConstantsExplorer.FILE_VERSION_ID+ * "="+fileDownloadEvent.getVersionId(); new * RequestBuilderWorkspaceValidateItem(RequestBuilder. * GET,ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE, * queryString, "_self", downloadHandlerCallback); } * catch (Exception e) { * explorerPanel.getAsycTreePanel().unmask(); new * MessageBoxAlert("Error", e.getMessage(), null); * explorerPanel.getAsycTreePanel(). * removeAllAndRecoveryRoot(); } } */ try { // String currentUserId = // GCubeClientContext.getCurrentUserId(); String queryString = "id=" + fileDownloadEvent.getItemIdentifier() + "&" + ConstantsExplorer.CURRENT_CONTEXT_ID + "=" + currentContextId; if (fileDownloadEvent.getVersionId() != null) queryString += "&" + ConstantsExplorer.FILE_VERSION_ID + "=" + fileDownloadEvent.getVersionId(); new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET, ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE, queryString, "_self", downloadHandlerCallback); } catch (Exception e) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", e.getMessage(), null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } } notifySubscriber(fileDownloadEvent); } } }); eventBus.addHandler(FileUploadEvent.TYPE, new FileUploadEventHandler() { @Override public void onFileUploadEvent(FileUploadEvent fileUploadEvent) { doFileUploadEvent(fileUploadEvent); } private void doFileUploadEvent(final FileUploadEvent fileUploadEvent) { GWT.log("FileUploadEvent..."); FileModel folder = fileUploadEvent.getTargetFolderModel(); if (folder == null) folder = explorerPanel.getAsycTreePanel().getRootItem(); String caption = "Upload "; UPLOAD_TYPE upType = UPLOAD_TYPE.File; if (fileUploadEvent.getUploadType().compareTo(WS_UPLOAD_TYPE.Archive) == 0) { caption += "Archive"; upType = UPLOAD_TYPE.Archive; } else if (fileUploadEvent.getUploadType().compareTo(WS_UPLOAD_TYPE.File) == 0) { caption += "File/s"; upType = UPLOAD_TYPE.File; } caption += " in: " + folder.getName(); MultipleDilaogUpload uploadStream = new MultipleDilaogUpload(caption, folder.getIdentifier(), upType); WorskpaceUploadNotificationListener listener = new WorskpaceUploadNotificationListener() { @Override public void onUploadCompleted(String parentId, String itemId) { GWT.log("Upload completed: [parentID: " + parentId + ", itemId: " + itemId + ", uploadType: " + fileUploadEvent.getUploadType() + "]"); eventBus.fireEvent( new CompletedFileUploadEvent(parentId, itemId, fileUploadEvent.getUploadType(), false)); } @Override public void onUploadAborted(String parentId, String itemId) { GWT.log("Upload Aborted: [parentID: " + parentId + ", itemId: " + itemId + "]"); } @Override public void onError(String parentId, String itemId, Throwable throwable) { GWT.log("Upload Error: [parentID: " + parentId + ", itemId: " + itemId + "]"); } @Override public void onOverwriteCompleted(String parentId, String itemId) { GWT.log("Upload Override Completed: [parentID: " + parentId + ", itemId: " + itemId + "]"); eventBus.fireEvent( new CompletedFileUploadEvent(parentId, itemId, fileUploadEvent.getUploadType(), true)); } }; uploadStream.addWorkspaceUploadNotificationListener(listener); uploadStream.center(); } }); eventBus.addHandler(CompletedFileUploadEvent.TYPE, new CompletedFileUploadEventHandler() { @Override public void onCompletedFileUploadEvent(CompletedFileUploadEvent completedFileUploadEvent) { doCompletedFileUploadEvent(completedFileUploadEvent); } private void doCompletedFileUploadEvent(CompletedFileUploadEvent completedFileUploadEvent) { boolean isLevelExpanded = treeLevelIsExpanded(completedFileUploadEvent.getParentId()); // REFRESH TREE ONLY IF FOLDER PARENT EXISTS IN TREE FileModel parent = explorerPanel.getAsycTreePanel() .getFileModelByIdentifier(completedFileUploadEvent.getParentId()); GWT.log("doCompletedFileUploadEvent..." + parent); if (parent != null && completedFileUploadEvent.getItemIdentifier() != null) { explorerPanel.getAsycTreePanel() .reloadTreeLevelAndExpandFolder(completedFileUploadEvent.getParentId(), isLevelExpanded); // explorerPanel.getAsycTreePanel().addItemIdAndExpandFolder(parent, // completedFileUploadEvent.getItemIdentifier(), // isLevelExpanded); } doUpdateWorkspaceSize(new UpdateWorkspaceSizeEvent()); notifySubscriber(completedFileUploadEvent); } }); eventBus.addHandler(DeleteSmartFolderEvent.TYPE, new DeleteSmartFolderEventHandler() { @Override public void onDeleteItem(DeleteSmartFolderEvent deleteSmartFolderEvent) { doDeleteSmartFolder(deleteSmartFolderEvent); } private void doDeleteSmartFolder(DeleteSmartFolderEvent deleteSmartFolderEvent) { Window.alert("The method 'doDeleteSmartFolder' " +METHOD_IS_NO_LONGER_USED); } }); eventBus.addHandler(AddSmartFolderEvent.TYPE, new AddSmartFolderEventHandler() { @Override public void onSaveSmartFolder(AddSmartFolderEvent saveSmartFolderEvent) { doSaveSmartFolder(saveSmartFolderEvent); } private void doSaveSmartFolder(final AddSmartFolderEvent saveSmartFolderEvent) { Window.alert("The method 'doSaveSmartFolder' " +METHOD_IS_NO_LONGER_USED); } }); eventBus.addHandler(SmartFolderSelectedEvent.TYPE, new SmartFolderSelectedEventHandler() { @Override public void onSmartFolderSelected(SmartFolderSelectedEvent smartFolderSelectedEvent) { searching(true); // System.out.println("Click smart folder : " + // smartFolderSelectedEvent.getSmartFolderName()); doSmartFolderSelected(smartFolderSelectedEvent); } private void doSmartFolderSelected(SmartFolderSelectedEvent smartFolderSelectedEvent) { notifySubscriber(smartFolderSelectedEvent); } }); eventBus.addHandler(RenameItemEvent.TYPE, new RenameItemEventHandler() { @Override public void onRenameItem(RenameItemEvent event) { doRenameItem(event); } private void doRenameItem(final RenameItemEvent event) { final FileModel target = event.getFileTarget(); final DialogText dgt = new DialogText(ConstantsExplorer.MESSAGE_RENAME, ConstantsExplorer.MESSAGE_ITEM_NAME, event.getFileTarget().getName(), target.isDirectory()); dgt.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { final String newName = dgt.getTxtValue(); if (dgt.isValidForm()) { dgt.mask("Renaming..."); GWT.log("Renaming on id: " + target.getIdentifier()); rpcWorkspaceService.renameItem(target.getIdentifier(), newName, target.getName(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { dgt.unmask(); dgt.hide(); if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } if(caught instanceof SHUBOperationNotAllowedException) { MessageBox.info("Operation not allowed...", caught.getMessage(), null).show(); }else { new MessageBoxAlert("Error", caught.getMessage(), null); } explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(Boolean result) { dgt.unmask(); dgt.hide(); explorerPanel.getAsycTreePanel().renameItem(target.getIdentifier(), newName, null); event.setNewName(newName); notifySubscriber(event); } }); } } }); } }); eventBus.addHandler(DeleteItemEvent.TYPE, new DeleteItemEventHandler() { @Override public void onDeleteItem(DeleteItemEvent event) { doDeleteItem(event); } private void doDeleteItem(final DeleteItemEvent event) { String title = ""; String msg = ""; if (event.getFileTarget().isShared()) { title = ConstantsExplorer.MESSAGE_DELETE; msg = "This item is shared. Deleting this item will affect other users. Continue?"; } else { title = ConstantsExplorer.MESSAGE_DELETE; msg = ConstantsExplorer.MESSAGE_CONFIRM_DELETE_ITEM + " " + event.getFileTarget().getName() + "?"; } MessageBoxConfirm mbc = new MessageBoxConfirm(title, msg); mbc.getMessageBoxConfirm().addCallback(new Listener() { public void handleEvent(MessageBoxEvent be) { // IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if (clickedButton.equals(Dialog.YES)) { explorerPanel.getAsycTreePanel().mask("Deleting", ConstantsExplorer.LOADINGSTYLE); rpcWorkspaceService.deleteItem(event.getFileTarget().getIdentifier(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); if(caught instanceof SHUBOperationNotAllowedException) { MessageBox.info("Operation not allowed...", caught.getMessage(), null).show(); }else { new MessageBoxAlert("Error", caught.getMessage(), null); } explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(Boolean result) { explorerPanel.getAsycTreePanel().unmask(); // Timer is used as work around to // chrome and safari browser Timer t = new Timer() { public void run() { FileModel fileModel = event.getFileTarget(); if (explorerPanel.getAsycTreePanel() .deleteItem(fileModel.getIdentifier())) { explorerPanel.getAsycTreePanel().selectItem( fileModel.getParentFileModel().getIdentifier()); // Select // parent // of // item // deleted } notifySubscriber(event); // doUpdateWorkspaceSize(new // UpdateWorkspaceSizeEvent()); // eventBus.fireEvent(new // UpdateWorkspaceSizeEvent()); } }; // Schedule the timer to run after // 250 ms. t.schedule(250); } }); } } }); } }); eventBus.addHandler(SelectedItemEvent.TYPE, new SelectedItemEventHandler() { @Override public void onSelectedItem(SelectedItemEvent selectedItemEvent) { doSelectedItem(selectedItemEvent); } private void doSelectedItem(SelectedItemEvent event) { notifySubscriber(event); } }); eventBus.addHandler(ExpandFolderEvent.TYPE, new ExpandFolderEventHandler() { @Override public void onExpandFolder(ExpandFolderEvent expandFolderEvent) { doExpandFolder(expandFolderEvent); } private void doExpandFolder(ExpandFolderEvent expandFolderEvent) { notifySubscriber(expandFolderEvent); } }); eventBus.addHandler(AddFolderEvent.TYPE, new AddFolderEventHandler() { @Override public void onAddItem(AddFolderEvent event) { doAddItem(event); } private void doAddItem(final AddFolderEvent event) { final FileModel sourceFileModel = event.getFileSourceModel(); final FileModel parentFileModel = event.getParentFileModel(); String directory = null; if (sourceFileModel.isDirectory()) { explorerPanel.getAsycTreePanel().setExpandTreeLevel(sourceFileModel.getIdentifier(), true); directory = sourceFileModel.getName(); } else directory = parentFileModel.getName(); final DialogAddFolderAndSmart dialogAddFolder = new DialogAddFolderAndSmart(directory, AddType.FOLDER); dialogAddFolder.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { if (dialogAddFolder.isValidForm()) { if (sourceFileModel.isDirectory()) { rpcWorkspaceService.createFolder(dialogAddFolder.getName(), dialogAddFolder.getDescription(), sourceFileModel, new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } new MessageBoxAlert("Error", caught.getMessage(), null); } @Override public void onSuccess(FolderModel child) { explorerPanel.getAsycTreePanel() .addItem(sourceFileModel.getIdentifier(), child, false); event.setNewFolder(child); notifySubscriber(event); } }); } else { rpcWorkspaceService.createFolder(dialogAddFolder.getName(), dialogAddFolder.getDescription(), parentFileModel, new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", caught.getMessage(), null); } @Override public void onSuccess(FolderModel child) { explorerPanel.getAsycTreePanel() .addItem(parentFileModel.getIdentifier(), child, false); event.setNewFolder(child); notifySubscriber(event); } }); } } } }); } }); eventBus.addHandler(DragOnTreeMoveItemEvent.TYPE, new DragOnTreeMoveItemEventHandler() { @Override public void onMoveItem(final DragOnTreeMoveItemEvent event) { explorerPanel.getAsycTreePanel().mask(ConstantsExplorer.MOVING, ConstantsExplorer.LOADINGSTYLE); rpcWorkspaceService.moveItems(Arrays.asList(event.getFileSourceModel().getIdentifier()), event.getTargetParentFileModel().getIdentifier(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); if (caught instanceof SessionExpiredException) { GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } new MessageBoxAlert("Error", caught.getMessage() + ".", null); // System.out.println(caught.getMessage()); // explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder( // event.getTargetParentFileModel().getIdentifier(), false); // explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder( // event.getFileSourceModel().getParentFileModel().getIdentifier(), true); //FXING THE ISSUE #16665 explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(WorkspaceOperationResult result) { explorerPanel.getAsycTreePanel().unmask(); if (result != null) { if (result.getError() != null) { new MessageBoxAlert("Error", result.getError(), null); //FXING THE ISSUE #16665 explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder( event.getTargetParentFileModel().getIdentifier(), true); notifySubscriber(event); } } }); } }); eventBus.addHandler(ImagePreviewEvent.TYPE, new ImagePreviewEventHandler() { @Override public void onClickPreview(ImagePreviewEvent imagePreviewEvent) { if (imagePreviewEvent.getClientX() > 0 && imagePreviewEvent.getClientY() > 0) doClickPreview(imagePreviewEvent, imagePreviewEvent.getClientX(), imagePreviewEvent.getClientY()); else doClickPreview(imagePreviewEvent, 50, 50); // ADDED 24/07/2013 if (imagePreviewEvent.getSourceFileModel() != null) { // FILE // CAN // NOT // LOADED // IN // TREE notifySubscriber(new FileDownloadEvent(imagePreviewEvent.getSourceFileModel().getIdentifier(), imagePreviewEvent.getSourceFileModel().getName(), FileDownloadEvent.DownloadType.SHOW, false, null)); } } private void doClickPreview(ImagePreviewEvent imagePreviewEvent, final int positionX, final int positionY) { final FileModel fileModel = imagePreviewEvent.getSourceFileModel(); boolean fullDetails = false; rpcWorkspaceService.getImageById(fileModel.getIdentifier(), fileModel.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.IMAGE_DOCUMENT), fullDetails, new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting the image preview", null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(GWTWorkspaceItem item) { GWT.log("Image loaded: " + item.getName() + " label: " + item.getLabel() + " type: " + fileModel.getGXTFolderItemType()); if (fileModel.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.IMAGE_DOCUMENT)) new ImagesPreviewController(fileModel.getName(), fileModel.getParentFileModel(), (GWTImageDocument) item, positionX, positionY); else new ImagesPreviewController(fileModel.getName(), fileModel.getParentFileModel(), (GWTExternalImage) item, positionX, positionY); } }); } }); eventBus.addHandler(OpenUrlEvent.TYPE, new OpenUrlEventHandler() { @Override public void onClickUrl(OpenUrlEvent openUrlEvent) { doClickUrl(openUrlEvent); } }); eventBus.addHandler(CreateUrlEvent.TYPE, new CreateUrlEventHandler() { @Override public void onClickCreateUrl(CreateUrlEvent createUrlEvent) { doClickCreateUrl(createUrlEvent); } private void doClickCreateUrl(final CreateUrlEvent createUrlEvent) { final FileModel parent = createUrlEvent.getParentFileModel(); final DialogAddUrl dgu = new DialogAddUrl(parent.getName()); dgu.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { if (dgu.isValidForm()) { explorerPanel.getAsycTreePanel().mask(ConstantsExplorer.VALIDATINGOPERATION, ConstantsExplorer.LOADINGSTYLE); GWT.log("parent: " + parent); rpcWorkspaceService.createExternalUrl(parent.getIdentifier(), dgu.getName(), dgu.getDescription(), dgu.getUrl(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " creating url.", null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(FileModel child) { explorerPanel.getAsycTreePanel().unmask(); eventBus.fireEvent(new CompletedFileUploadEvent(parent.getIdentifier(), child.getIdentifier(), WS_UPLOAD_TYPE.File, false)); // explorerPanel.getAsycTreePanel().addItem(parent.getIdentifier(), // child, false); // explorerPanel.getAsycTreePanel().unmask(); // notifySubscriber(createUrlEvent); } }); } } }); } }); eventBus.addHandler(VRESettingPermissionEvent.TYPE, new VRESettingPermissionEventHandler() { @Override public void onPermissionSetting(VRESettingPermissionEvent settingPermissionEvent) { if (settingPermissionEvent.getSourceFile() != null) { DialogPermission dialog = new DialogPermission(settingPermissionEvent.getSourceFile()); dialog.show(); } else Info.display("Attention", "Select a VRE Folder to change permissions!"); } }); eventBus.addHandler(UpdatedVREPermissionEvent.TYPE, new UpdatedVREPermissionEventHandler() { @Override public void onUpdateVREPermissions(UpdatedVREPermissionEvent updatedVREPermissionEvent) { notifySubscriber(updatedVREPermissionEvent); } }); } /** * Do update workspace size. * * @param updateWorkspaceSizeEvent * the update workspace size event */ protected void doUpdateWorkspaceSize(UpdateWorkspaceSizeEvent updateWorkspaceSizeEvent) { notifySubscriber(updateWorkspaceSizeEvent); } /** * Portal url. * * @return the string */ public static native String portalURL()/*-{ return $wnd.location.href; }-*/; // ********END EVENTS TO NOTIFY SUBSCRIBERS // Method Notify Subscriber /** * Notify subscriber. * * @param event * the event */ public void notifySubscriber(GuiEventInterface event) { if (subscribers.containsKey(event.getKey())) for (SubscriberInterface sub : subscribers.get(event.getKey())) { if (event instanceof RenameItemEvent) { RenameItemEvent renameEvent = (RenameItemEvent) event; sub.renameItem(renameEvent.getFileTarget().getIdentifier(), renameEvent.getNewName(), renameEvent.getExtension()); } else if (event instanceof DeleteItemEvent) { DeleteItemEvent deleteEvent = (DeleteItemEvent) event; List ids = new ArrayList(1); ids.add(deleteEvent.getFileTarget().getIdentifier()); sub.deleteItems(ids); } else if (event instanceof SelectedItemEvent) { SelectedItemEvent selectedEvent = (SelectedItemEvent) event; List listFileModel = new ArrayList(); FileModel item = explorerPanel.getAsycTreePanel() .getFileModelByIdentifier(selectedEvent.getFileTarget().getIdentifier()); listFileModel = getListParents(listFileModel, item); // used // for // update // path // bar sub.selectedItem(selectedEvent.getFileTarget(), listFileModel); } else if (event instanceof ExpandFolderEvent) { ExpandFolderEvent expandEvent = (ExpandFolderEvent) event; sub.expandFolderItem(expandEvent.getFolderTarget()); } else if (event instanceof AddFolderEvent) { AddFolderEvent addItemEvent = (AddFolderEvent) event; if (addItemEvent.getFileSourceModel().isDirectory()) sub.addedFolder(addItemEvent.getNewFolder().getIdentifier(), addItemEvent.getFileSourceModel()); else sub.addedFolder(addItemEvent.getNewFolder().getIdentifier(), addItemEvent.getParentFileModel()); } else if (event instanceof SubTreeLoadedEvent) { GWT.log("SubTreeLoadedEvent..."); SubTreeLoadedEvent subTreeEvent = (SubTreeLoadedEvent) event; sub.setParentItemSelected(subTreeEvent.getPathParentsList()); // if(openTreeMenuEvent && isShowTreeMenu==false) // eventBus.fireEvent(new O) } else if (event instanceof SmartFolderSelectedEvent) { SmartFolderSelectedEvent smartEvent = (SmartFolderSelectedEvent) event; sub.smartFolderSelected(smartEvent.getSmartFolderCustomId(), smartEvent.getCategory()); } else if (event instanceof FileUploadEvent) { // FileUploadEvent fileUpEvent = (FileUploadEvent) event; // sub.addedFile(fileUpEvent.getParentFileModel(), ""); } else if (event instanceof CompletedFileUploadEvent) { CompletedFileUploadEvent fileUpEvent = (CompletedFileUploadEvent) event; sub.addedFile(fileUpEvent.getItemIdentifier(), fileUpEvent.getParentId(), fileUpEvent.getUploadType(), fileUpEvent.isOverwrite()); } else if (event instanceof CreateUrlEvent) { CreateUrlEvent createUrlEvent = (CreateUrlEvent) event; sub.addedFile(createUrlEvent.getItemIdentifier(), createUrlEvent.getParentFileModel().getIdentifier(), WS_UPLOAD_TYPE.File, false); } else if (event instanceof DragOnTreeMoveItemEvent) { DragOnTreeMoveItemEvent moveItemEvent = (DragOnTreeMoveItemEvent) event; sub.movedItems(moveItemEvent.getFileSourceModel().getIdentifier(), moveItemEvent.getTargetParentFileModel()); } else if (event instanceof SwitchViewEvent) { SwitchViewEvent switchView = (SwitchViewEvent) event; sub.switchView(switchView.getType()); } else if (event instanceof RefreshFolderEvent) { RefreshFolderEvent refresh = (RefreshFolderEvent) event; sub.refreshFolder(refresh.getFolderTarget(), refresh.isForceRefresh(), refresh.isForceReloadBreadCrumb()); } else if (event instanceof FileDownloadEvent) { FileDownloadEvent messageEvent = (FileDownloadEvent) event; sub.fileDownloaded(messageEvent.getItemIdentifier()); } else if (event instanceof SessionExpiredEvent) { sub.viewSessionExpiredPanel(); } else if (event instanceof MoveItemsEvent) { MoveItemsEvent moveEvent = (MoveItemsEvent) event; sub.moveEventIsCompleted(moveEvent.isTreeRefreshable(), moveEvent.getDestionationFolderId()); } else if (event instanceof CopyItemsEvent) { CopyItemsEvent copyEvent = (CopyItemsEvent) event; sub.copyEventIsCompleted(copyEvent.getDestinationFolderId()); } else if (event instanceof TrashEvent) { TrashEvent trashEvent = (TrashEvent) event; sub.trashEvent(trashEvent.getTrashOperation(), trashEvent.getTargetFileModels()); } else if (event instanceof UpdatedVREPermissionEvent) { UpdatedVREPermissionEvent vreEvent = (UpdatedVREPermissionEvent) event; sub.updatedVREPermissions(vreEvent.getVreFolder()); } else if (event instanceof UpdateWorkspaceSizeEvent) { sub.updateWorksapaceSize(true); } else if (event instanceof VersioningHistoryShowEvent) { VersioningHistoryShowEvent historyVers = (VersioningHistoryShowEvent) event; sub.versioningHistory(historyVers.getTargetFileModel()); } else if (event instanceof LoadFolderEvent) { LoadFolderEvent loadFolderEvent = (LoadFolderEvent) event; sub.loadFolder(loadFolderEvent.getTargetFolder()); } } } /** * Tree level is expanded. * * @param folderId * the folder id * @return true, if successful */ public boolean treeLevelIsExpanded(String folderId) { return explorerPanel.getAsycTreePanel().isExpanded(folderId); } /** * Gets the list parents. * * @param listParentModel * the list parent model * @param item * the item * @return the list parents */ private List getListParents(List listParentModel, FileModel item) { getParents(listParentModel, item); Collections.reverse(listParentModel); return listParentModel; } /** * Gets the parents. * * @param listParents * the list parents * @param item * the item * @return the parents */ private void getParents(List listParents, FileModel item) { if (item == null || item.getParentFileModel() == null) { return; } if (item.getParentFileModel().isRoot()) { listParents.add(item.getParentFileModel()); return; } listParents.add(item.getParentFileModel()); getParents(listParents, item.getParentFileModel()); } /** * Subscribe. * * @param subscriber * the subscriber * @param keys * the keys */ public void subscribe(SubscriberInterface subscriber, EventsTypeEnum[] keys) { for (EventsTypeEnum m : keys) subscribe(subscriber, m); } /** * Subscribe. * * @param subscriber * the subscriber * @param key * the key */ public void subscribe(SubscriberInterface subscriber, EventsTypeEnum key) { if (subscribers.containsKey(key)) subscribers.get(key).add(subscriber); else { ArrayList subs = new ArrayList(); subs.add(subscriber); subscribers.put(key, subs); } } /** * Unsubscribe. * * @param subscriber * the subscriber * @param key * the key */ public void unsubscribe(SubscriberInterface subscriber, EventsTypeEnum key) { if (subscribers.containsKey(key)) subscribers.get(key).remove(subscriber); } /** * Go. * * @param rootPanel * the root panel * @param onlyTree * the only tree * @param instancingSmartFolder * the instancing smart folder * @param instancingMessages * the instancing messages * @param selectRootItem * the select root item */ public void go(final HasWidgets rootPanel, boolean onlyTree, boolean instancingSmartFolder, boolean instancingMessages, boolean selectRootItem) { if (onlyTree) { this.selectRootItem = selectRootItem; this.explorerPanel = new ExplorerPanel(true, this.selectRootItem); this.selectRootItem = false; // set false select root item; only // first time is used this.explorerPanel.setSize(400, 600); this.explorerPanel.getAsycTreePanel().setSizeTreePanel(350, 550); // rootPanel.add(new BasicDNDExample()); //it's example of drag&drop } else this.explorerPanel = new ExplorerPanel(instancingSmartFolder, instancingMessages); rootPanel.add(explorerPanel); } /** * Use method getPanel. * * @return ExplorerPanel * @deprecated */ @Deprecated public ExplorerPanel getTreePanel() { this.explorerPanel = getPanel(); return this.explorerPanel; } /** * Instance only Async Tree with specific width - height - select by default * the root item . * * @param width * the width * @param height * the height * @return AsyncTreePanel */ public AsyncTreePanel getTree(int width, int height) { this.explorerPanel = getPanel(); this.explorerPanel.getAsycTreePanel().setSizeTreePanel(width, height); this.explorerPanel.getAsycTreePanel().setHeaderTreeVisible(false); return explorerPanel.getAsycTreePanel(); } /** * Hide sharing facilities. */ public void hideSharingFacilities() { explorerPanel.getAsycTreePanel().getContextMenuTree().setHideSharing(); } /** * Refresh root. * * @param selectRootItem * the select root item */ public void refreshRoot(boolean selectRootItem) { if (explorerPanel.getAsycTreePanel() != null) explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(selectRootItem); } /** * Instance only Async Tree. Select by default root items of tree. * * @return ExplorerPanel */ public ExplorerPanel getPanel() { this.explorerPanel = new ExplorerPanel(true, true); loadMyLogin(); loadMyFirstName(); return this.explorerPanel; } /** * Instance by default asyncronus Tree while Smart Folders and Messages was * instanced as input value. * * @param instancingSmartFolder * the instancing smart folder * @param instancingMessages * the instancing messages * @param selectRootItem * the select root item * @return ExplorerPanel */ public ExplorerPanel getPanel(boolean instancingSmartFolder, boolean instancingMessages, boolean selectRootItem) { this.explorerPanel = new ExplorerPanel(instancingSmartFolder, instancingMessages, selectRootItem); this.selectRootItem = selectRootItem; loadMyLogin(); loadMyFirstName(); return this.explorerPanel; } /** * Edi permissions. * * @param file * the file */ private void ediPermissions(final FileModel file) { GWT.log("Show Permissions on " + file); // MultiDragConstants.HEADING_DIALOG = "Permissions: " + file.getName(); /// MultiDragConstants.ALL_CONTACTS_LEFT_LIST = "Shared User/s"; // MultiDragConstants.SHARE_WITH_RIGHT_LIST = "Set permissions for // User/s"; final ShowPermissionsDialog showPermissionDialog = new ShowPermissionsDialog("Permissions: " + file.getName(), file.getIdentifier()); showPermissionDialog.show(); /* * @SuppressWarnings("unused") final MultiDragContactsEditPermissions * multiDragContact = new MultiDragContactsEditPermissions( * LOAD_CONTACTS_AS.SHARED_USER, file.getIdentifier(), true); * * final DialogMultiDragContact multidrag = * multiDragContact.getDialog(); * * multidrag. * setTxtHelp("Sets the permission for the user(s) dragged in the right list" * ); * * multidrag.getButtonById(Dialog.OK).addListener(Events.Select, new * Listener() { * * @Override public void handleEvent(BaseEvent be) { final * List targets = multiDragContact .getTargetContacts(); * * if (targets.size() == 0) { MessageBoxConfirm info = new * MessageBoxConfirm("Any User/s?", * "You have not selected any Users, confirm exit?"); * * info.getMessageBoxConfirm().addCallback(new * Listener() { * * public void handleEvent(MessageBoxEvent be) { // IF NOT CANCELLED * String clickedButton = be.getButtonClicked().getItemId(); if * (clickedButton.equals(Dialog.YES)) { multidrag.hide(); } } }); } * * // GWT.log(targets.toString()); * * if (targets.size() >= 1 && multiDragContact.getSelectedAcl() != null) * { * * final List logins = new ArrayList(targets.size()); * * for (org.gcube.portlets.widgets.workspacesharingwidget.shared. * InfoContactModel infoContactModel : targets) { * GWT.log(infoContactModel.toString()); * logins.add(infoContactModel.getLogin()); } * * WorkspaceSharingServiceAsync.INSTANCE.validateACLToUser(file. * getIdentifier(), logins, multiDragContact.getSelectedAclID(), new * AsyncCallback() { * * @Override public void onFailure(Throwable caught) { new * MessageBoxAlert("Error", caught.getMessage(), null); * * } * * @Override public void onSuccess(ReportAssignmentACL result) { * * String msg = ""; * * if (result.getErrors().size() > 0) { for (String error : * result.getErrors()) { msg += "
  • " + error + ";

  • "; * * } new MessageBoxAlert("Warning!!", msg, null); return; } * * if (result.getValidLogins().size() == 0) { msg += * "Setting permission '" + multiDragContact.getSelectedAcl().getLabel() * + "' is not valid for " + file.getName(); MessageBox info = * MessageBox.info("Permissions not valid for " + file.getName(), msg, * null); info.show(); return; } * * String names = ""; for (String name : result.getValidLogins()) { * names += "
  • " + name + ";
  • "; } * * msg += "Setting permission '" + * multiDragContact.getSelectedAcl().getLabel() + "' for:
      " + names * + "
    confirm?"; * * MessageBoxConfirm confirm = new MessageBoxConfirm( * "Setting new permissions to " + file.getName() + "?", msg); * confirm.getMessageBoxConfirm().addCallback(new * Listener() { * * public void handleEvent(MessageBoxEvent be) { * * // IF NOT CANCELLED String clickedButton = * be.getButtonClicked().getItemId(); if * (clickedButton.equals(Dialog.YES)) { // * doAddAdministratorToFolderId(file, // logins); * setACLToFolderId(file.getIdentifier(), logins, * multiDragContact.getSelectedAclID()); multidrag.hide(); } else if * (clickedButton.equals(Dialog.CANCEL)) { multidrag.hide(); } * * } }); * * } }); * * } * * } }); * * multidrag.show(); */ } /** * Show add administrators dialog. * * @param file * the file */ private void showAddAdministratorsDialog(final FileModel file) { MultiDragConstants.HEADING_DIALOG = "Edit Administrator/s to: " + file.getName(); MultiDragConstants.ALL_CONTACTS_LEFT_LIST = "All Contacts"; MultiDragConstants.SHARE_WITH_RIGHT_LIST = "New Administrator/s"; final MultiDragWorkspaceContactAdmin multiDragContactAdmin = new MultiDragWorkspaceContactAdmin( file.getIdentifier()); final Dialog multidrag = multiDragContactAdmin.getDialogMultiDragContact(); multidrag.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { final List targets = multiDragContactAdmin.getTargetContacts(); if (targets.size() == 1) { MessageBoxConfirm info = new MessageBoxConfirm("Attention", "Attention the owner is already Administrator. You have not selected further administrators." + " Confirm and exit?"); info.getMessageBoxConfirm().addCallback(new Listener() { public void handleEvent(MessageBoxEvent be) { // IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if (clickedButton.equals(Dialog.YES)) { List logins = new ArrayList(1); logins.add(targets.get(0).getLogin()); doAddAdministratorToFolderId(file, logins); multidrag.hide(); } } }); } if (targets.size() > 1) { final List logins = new ArrayList(targets.size()); String names = "
      "; for (InfoContactModel infoContactModel : targets) { logins.add(infoContactModel.getLogin()); names += "
    • " + infoContactModel.getName() + ";
    • "; } String tail = "
    as "; tail += logins.size() > 1 ? "administrators" : "administrator"; tail += ", confirm?"; MessageBoxConfirm confirm = new MessageBoxConfirm("Attention", "The owner and the current user are administrators. Selected:
    " + names + tail); confirm.getMessageBoxConfirm().addCallback(new Listener() { public void handleEvent(MessageBoxEvent be) { // IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if (clickedButton.equals(Dialog.YES)) { doAddAdministratorToFolderId(file, logins); multidrag.hide(); } if (clickedButton.equals(Dialog.CANCEL)) { multidrag.hide(); } } }); } } }); multidrag.show(); } /** * Do add administrator to folder id. * * @param file * the file * @param logins * the logins */ private void doAddAdministratorToFolderId(final FileModel file, final List logins) { WorkspaceSharingServiceAsync.INSTANCE.addAdministratorsByFolderId(file.getIdentifier(), logins, new AsyncCallback() { @Override public void onFailure(Throwable arg0) { new MessageBoxAlert("Error", arg0.getMessage(), null); } @Override public void onSuccess(Boolean arg0) { String msg = "Updating administrator/s completed successfully"; MessageBox.info("Operation completed", msg, null); } }); } /** * Sets the acl to folder id. * * @param folderId * the folder id * @param logins * the logins * @param aclTypeID * the acl type id */ private void setACLToFolderId(final String folderId, final List logins, String aclTypeID) { MessageBox.info("Attention", "set acls is not directly possible with StorageHub. Please use share or unshare.", null); // rpcWorkspaceService.setACLs(folderId, logins, aclTypeID, new // AsyncCallback() { // // @Override // public void onFailure(Throwable caught) { // new MessageBoxAlert("Error", caught.getMessage(), null); // // } // // @Override // public void onSuccess(Void result) { // String msg = "Updating permissions completed successfully"; // MessageBox.info("Operation completed", msg, null); // } // }); } /** * Load my login. */ private void loadMyLogin() { String currentUrl = Window.Location.getHref().split("\\?")[0]; rpcWorkspaceService.getMyLogin(currentUrl, new AsyncCallback() { @Override public void onFailure(Throwable caught) { GWT.log("Error on loading my login is empty"); ConstantsExplorer.log("Error on loading my login is empty"); myLogin = ""; } @Override public void onSuccess(UserBean user) { ConstantsExplorer.log("UserBean is: " + user.toString()); GWT.log("My login is: " + user.getUsername()); myLogin = user.getUsername(); myLoginFirstName = user.getFirstName(); } }); } /** * Load my first name. */ private void loadMyFirstName() { rpcWorkspaceService.getMyFirstName(new AsyncCallback() { @Override public void onFailure(Throwable caught) { ConstantsExplorer.log("Error on loading my first name"); myLoginFirstName = ""; } @Override public void onSuccess(String firstName) { ConstantsExplorer.log("getMyFirstName is: " + firstName); myLoginFirstName = firstName; } }); } /** * Load item from workspace. * * @param itemIdentifier * the item identifier */ private void loadItemFromWorkspace(final String itemIdentifier) { explorerPanel.getAsycTreePanel().mask(ConstantsExplorer.LOADING, ConstantsExplorer.LOADINGSTYLE); rpcWorkspaceService.getChildrenSubTreeToRootByIdentifier(itemIdentifier, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", "Sorry - getChildrenSubTreeToRootByIdentifier", null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(ArrayList result) { boolean foundAncestor = false; // int index = 0; int i = 0; try { while (!foundAncestor) { if (i < result.size()) { SubTree subTree = result.get(i); // get // SubTree String folderModelId = subTree.getParentId(); // get // folder // id FolderModel folderInTree = (FolderModel) explorerPanel.getAsycTreePanel() .getFileModelByIdentifier(folderModelId); if (folderInTree != null && explorerPanel.getAsycTreePanel() .getChildrenNumber(folderInTree.getIdentifier()) == 0) foundAncestor = true; i++; } else break; } explorerPanel.getAsycTreePanel().setSubTreeLoaded(true); if (foundAncestor) { for (int j = i - 1; j < result.size(); j++) { SubTree subTree = result.get(j); // get // SubTree String folderModelId = subTree.getParentId(); // get // folder // id FolderModel folderInTree = (FolderModel) explorerPanel.getAsycTreePanel() .getFileModelByIdentifier(folderModelId); // get // folder // in // tree if (folderInTree.getParentFileModel() != null) subTree.getParent().setParentFileModel(folderInTree.getParentFileModel()); // set // parent explorerPanel.getAsycTreePanel().addChildrenToFolder( subTree.getParent().getIdentifier(), subTree.getChildren()); // Add // level explorerPanel.getAsycTreePanel() .setExpandTreeLevel(subTree.getParent().getIdentifier(), true); // Expand // level } ArrayList pathParentsList = (ArrayList) getListParentsByIdentifierFromTree( itemIdentifier); selectItemInTree(itemIdentifier); explorerPanel.getAsycTreePanel().setSubTreeLoaded(false); explorerPanel.getAsycTreePanel().unmask(); eventBus.fireEvent(new SubTreeLoadedEvent(pathParentsList)); } } catch (Exception e) { new MessageBoxAlert("Error", "Sorry, e " + e.getMessage(), null); } } }); } /** * Deselect current selection. */ private void deselectCurrentSelection() { FileModel fileModelSelected = explorerPanel.getAsycTreePanel().getSelectedFileModelItem(); if (fileModelSelected != null) explorerPanel.getAsycTreePanel().deselectItem(fileModelSelected); } // ********METHODS TO NOTIFY TREE /* * (non-Javadoc) * * @see org.gcube.portlets.user.workspace.client.interfaces. * TreeAppControllerInterface#getListParentsByIdentifierFromTree(java.lang. * String) */ @Override public List getListParentsByIdentifierFromTree(String itemIdentifier) { List listParentModel = new ArrayList(); FileModel item = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); if (item == null) { return null; } else { return getListParents(listParentModel, item); } } /* * (non-Javadoc) * * @see org.gcube.portlets.user.workspace.client.interfaces. * TreeAppControllerInterface#renameItem(java.lang.String, java.lang.String, * java.lang.String) */ @Override public boolean renameItem(String itemIdentifier, String newName, String extension) { return this.explorerPanel.getAsycTreePanel().renameItem(itemIdentifier, newName, extension); } /* * (non-Javadoc) * * @see org.gcube.portlets.user.workspace.client.interfaces. * TreeAppControllerInterface#deleteItem(java.lang.String) */ @Override public boolean deleteItem(String itemIdentifier) { return this.explorerPanel.getAsycTreePanel().deleteItem(itemIdentifier); } /** * method not used. * * @param itemIdentifier * the item identifier * @param name * the name * @param parentIdentifier * the parent identifier * @return true, if successful */ @Override public boolean addFolder(String itemIdentifier, String name, String parentIdentifier) { return false; // not used } /** * method not used. * * @param itemIdentifier * the item identifier * @param name * the name * @param parentIdentifier * the parent identifier * @return true, if successful */ @Override public boolean addFile(String itemIdentifier, String name, String parentIdentifier) { return false; } /** * method not used. * * @param itemIdentifier * the item identifier * @return true, if successful */ @Override public boolean reloadFolderChildren(String itemIdentifier) { return false; } /** * method not used. * * @param type * the new visualization type */ @Override public void setVisualizationType(VisualizationType type) { } /* * (non-Javadoc) * * @see org.gcube.portlets.user.workspace.client.interfaces. * TreeAppControllerInterface#selectRootItem() */ @Override public void selectRootItem() { this.explorerPanel.getAsycTreePanel().selectRootItem(); } /** * Gets the selected folder in tree. * * @return FileModel parent selected or root item if no directory is * selected */ @Override public FileModel getSelectedFolderInTree() { FileModel fileModel = this.explorerPanel.getAsycTreePanel().getSelectedFileModelItem(); if (fileModel.isDirectory()) return fileModel; else return fileModel.getParentFileModel(); } /* * (non-Javadoc) * * @see org.gcube.portlets.user.workspace.client.interfaces. * TreeAppControllerInterface#findItemAndSelectItemInTree(java.lang.String) */ @Override public void findItemAndSelectItemInTree(String itemIdentifier) { // FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); // // if (fileModel == null) { // Loading item by RPC // // loadItemFromWorkspace(itemIdentifier); // } // // else { // // selectItemInTree(itemIdentifier); // } Window.alert("the method findItemAndSelectItemInTree is no longer used"); } /** * Select item in tree. * * @param itemIdentifier * the item identifier */ private void selectItemInTree(String itemIdentifier) { FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); if (fileModel != null) { if (explorerPanel.getAsycTreePanel().isSearch()) deselectCurrentSelection(); if (fileModel.isDirectory()) { if (fileModel.getParentFileModel() != null) this.explorerPanel.getAsycTreePanel() .setExpandTreeLevel(fileModel.getParentFileModel().getIdentifier(), true); // expand // parent // folder this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); } else this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); // select // item } } public AsyncCallback downloadHandlerCallback = new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", caught.getMessage(), null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(WindowOpenParameter windowOpenParam) { String params = "?" + windowOpenParam.getParameters(); if (params.length() > 1) params += "&"; params += ConstantsExplorer.REDIRECTONERROR + "=" + windowOpenParam.isRedirectOnError(); windowOpenParam.getBrowserWindow().setUrl(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE + params); } }; /* * (non-Javadoc) * * @see org.gcube.portlets.user.workspace.client.interfaces. * TreeAppControllerInterface#expandFolder(java.lang.String) */ @Override /** * Called when path item is clicked */ public void expandFolder(final String itemIdentifier) { searching(false); FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); if (fileModel == null) { // Loading by RPC loadItemFromWorkspace(itemIdentifier); } else { deselectCurrentSelection(); this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); // select // item } } /* * (non-Javadoc) * * @see org.gcube.portlets.user.workspace.client.interfaces. * TreeAppControllerInterface#searching(boolean) */ @Override public void searching(boolean isSearch) { // deselecteCurrentSelection(); explorerPanel.getAsycTreePanel().setSearch(isSearch); } /** * Do click url. * * @param openUrlEvent * the open url event */ public void doClickUrl(OpenUrlEvent openUrlEvent) { final FileModel fileModel = openUrlEvent.getSourceFileModel(); if (fileModel == null) return; GWT.log("do click url"); final NewBrowserWindow newBrowserWindow = NewBrowserWindow.open("", "_blank", ""); rpcWorkspaceService.getUrlById(fileModel.getIdentifier(), fileModel.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.URL_DOCUMENT), false, new AsyncCallback() { @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " clicking url.", null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(GWTWorkspaceItem result) { if (fileModel.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.URL_DOCUMENT)) { newBrowserWindow.setUrl(((GWTUrlDocument) result).getUrl()); // new WindowOpenUrl(((GWTUrlDocument) // result).getUrl(), "_blank", ""); GWT.log("URL_DOCUMENT Open " + ((GWTUrlDocument) result).getUrl()); } else { // new WindowOpenUrl(((GWTExternalUrl) // result).getUrl(), "_blank", ""); newBrowserWindow.setUrl(((GWTExternalUrl) result).getUrl()); GWT.log("ExternalUrl Open " + ((GWTExternalUrl) result).getUrl()); } } }); // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileModel.getIdentifier()+"&viewContent=true", // fileModel.getName(), ""); } }