package org.gcube.portlets.user.workspace.client; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.gcube.portlets.user.workspace.client.ConstantsExplorer.ViewSwitchType; import org.gcube.portlets.user.workspace.client.ConstantsExplorer.WsPortletInitOperation; import org.gcube.portlets.user.workspace.client.ConstantsPortlet.ViewSwitchTypeInResult; 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.ActiveGroupingView; import org.gcube.portlets.user.workspace.client.event.ActiveGroupingViewHandler; 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.DeleteItemEvent; import org.gcube.portlets.user.workspace.client.event.DeleteItemEventHandler; import org.gcube.portlets.user.workspace.client.event.DeleteMessageEvent; import org.gcube.portlets.user.workspace.client.event.DeleteMessageEventHandler; import org.gcube.portlets.user.workspace.client.event.DoubleClickElementSelectedEvent; import org.gcube.portlets.user.workspace.client.event.DoubleClickElementSelectedEventHandler; import org.gcube.portlets.user.workspace.client.event.FileDownloadEvent; 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.FilterScopeEvent; 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.GetPublicLinkEvent; 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.GetSharedLinkEventHandler; import org.gcube.portlets.user.workspace.client.event.GridElementSelectedEvent; import org.gcube.portlets.user.workspace.client.event.GridElementSelectedEventHandler; import org.gcube.portlets.user.workspace.client.event.GridElementUnSelectedEvent; import org.gcube.portlets.user.workspace.client.event.GridElementUnSelectedEventHandler; import org.gcube.portlets.user.workspace.client.event.GridRefreshEvent; import org.gcube.portlets.user.workspace.client.event.GridRefreshEventHandler; 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.LoadAllScopeEvent; import org.gcube.portlets.user.workspace.client.event.LoadAllScopeEventHandler; import org.gcube.portlets.user.workspace.client.event.LoadBreadcrumbEvent; import org.gcube.portlets.user.workspace.client.event.LoadBreadcrumbEventHandler; 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.OpenReportsEvent; import org.gcube.portlets.user.workspace.client.event.OpenReportsEventHandler; 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.PasteItemEvent; import org.gcube.portlets.user.workspace.client.event.PasteItemEventHandler; import org.gcube.portlets.user.workspace.client.event.PathElementSelectedEvent; import org.gcube.portlets.user.workspace.client.event.PathElementSelectedEventHandler; import org.gcube.portlets.user.workspace.client.event.PreviewMessageEvent; import org.gcube.portlets.user.workspace.client.event.PreviewMessageEventHandler; import org.gcube.portlets.user.workspace.client.event.RefreshFolderEvent; 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.SaveAttachmentsEvent; import org.gcube.portlets.user.workspace.client.event.SaveAttachmentsEventHandler; import org.gcube.portlets.user.workspace.client.event.SaveSmartFolderEvent; import org.gcube.portlets.user.workspace.client.event.SaveSmartFolderEventHandler; import org.gcube.portlets.user.workspace.client.event.ScopeChangeEvent; import org.gcube.portlets.user.workspace.client.event.ScopeChangeEventHandler; import org.gcube.portlets.user.workspace.client.event.SearchItemByIdEvent; import org.gcube.portlets.user.workspace.client.event.SearchItemByIdEventHandler; import org.gcube.portlets.user.workspace.client.event.SearchTextEvent; import org.gcube.portlets.user.workspace.client.event.SearchTextEventHandler; import org.gcube.portlets.user.workspace.client.event.SendMessageEvent; import org.gcube.portlets.user.workspace.client.event.SendMessageEventHandler; import org.gcube.portlets.user.workspace.client.event.StoreGridChangedEvent; import org.gcube.portlets.user.workspace.client.event.StoreGridChangedEventHandler; 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.UpdateWorkspaceSizeEvent; import org.gcube.portlets.user.workspace.client.event.UpdateWorkspaceSizeEventHandler; import org.gcube.portlets.user.workspace.client.event.VREChangePermissionsEvent; import org.gcube.portlets.user.workspace.client.event.VREChangePermissionsEventHandler; import org.gcube.portlets.user.workspace.client.event.VRESettingPermissionEvent; import org.gcube.portlets.user.workspace.client.event.WebDavUrlEvent; import org.gcube.portlets.user.workspace.client.event.WebDavUrlEventHandler; import org.gcube.portlets.user.workspace.client.interfaces.EventsTypeEnum; import org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface; import org.gcube.portlets.user.workspace.client.model.FileGridModel; 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.ScopeModel; import org.gcube.portlets.user.workspace.client.view.WorskpacePortlet; import org.gcube.portlets.user.workspace.client.view.panels.GxtBorderLayoutPanel; import org.gcube.portlets.user.workspace.client.view.panels.GxtItemsPanel; import org.gcube.portlets.user.workspace.client.view.toolbars.GxtBreadcrumbPathPanel; import org.gcube.portlets.user.workspace.client.view.trash.WindowTrash; import org.gcube.portlets.user.workspace.client.view.windows.DialogGetInfo; import org.gcube.portlets.user.workspace.client.view.windows.InfoDisplay; 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.shared.ExtendedWorkspaceACL; import org.gcube.portlets.user.workspace.shared.SessionExpiredException; import org.gcube.portlets.user.workspace.shared.TrashContent; import org.gcube.portlets.user.workspace.shared.TrashOperationContent; import org.gcube.portlets.user.workspace.shared.WorkspaceTrashOperation; import org.gcube.portlets.user.workspace.shared.WorkspaceUserQuote; import org.gcube.portlets.widgets.sessionchecker.client.CheckSession; import org.gcube.portlets.widgets.wsmail.client.forms.MailForm; 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.LayoutContainer; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.RunAsyncCallback; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.event.shared.HandlerManager; import com.google.gwt.user.client.Cookies; 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.HTML; import com.google.gwt.user.client.ui.HasWidgets; /** * * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * */ public class AppController implements SubscriberInterface { private final static HandlerManager eventBus = new HandlerManager(null); private WorskpacePortlet wsPortlet = null; private AppControllerExplorer appContrExplorer = null; private String rootIdentifier = null; // public static boolean isSearchActive = false; private HasWidgets rootPanel; private String selectedSmartFolderId; private String selectedSmartFolderCategory; private HTML htmlWorkspaceSize = new HTML(); public static final Logger logger = Logger.getLogger("WsAppController"); public AppController(AppControllerExplorer appControllerExplorer) { this.appContrExplorer = appControllerExplorer; this.appContrExplorer.subscribe(this, new EventsTypeEnum[] { EventsTypeEnum.RENAME_ITEM_EVENT, EventsTypeEnum.SELECTED_ITEM_EVENT, // EventsTypeEnum.EXPAND_FOLDER_EVENT, EventsTypeEnum.ADDED_FOLDER_EVENT, EventsTypeEnum.DELETE_ITEM_EVENT, EventsTypeEnum.SUBTREE_LOAD_EVENT, EventsTypeEnum.SMART_FOLDER_EVENT, EventsTypeEnum.COMPLETED_FILE_UPLOAD_EVENT, EventsTypeEnum.ADDED_FILE_EVENT, EventsTypeEnum.MOVED_ITEM_EVENT, EventsTypeEnum.LOAD_MESSAGES_EVENT, EventsTypeEnum.SWITCH_VIEW_EVENT, EventsTypeEnum.DELETED_MESSAGE, EventsTypeEnum.MARK_MESSAGE_AS_READ, EventsTypeEnum.REFRESH_FOLDER, EventsTypeEnum.SELECTED_MESSAGE, EventsTypeEnum.CREATE_NEW_MESSAGE, EventsTypeEnum.REPLY_FORWARD_MESSAGE, EventsTypeEnum.FILE_DOWNLAD_EVENT, EventsTypeEnum.SESSION_EXPIRED, EventsTypeEnum.PASTED_EVENT, EventsTypeEnum.COPY_EVENT, EventsTypeEnum.TRASH_EVENT, EventsTypeEnum.UPDATE_WORKSPACE_SIZE, EventsTypeEnum.UPDATED_VRE_PERMISSION }); bind(); } public static HandlerManager getEventBus() { return eventBus; } private void bind() { //double click on URLs eventBus.addHandler(OpenUrlEvent.TYPE, new OpenUrlEventHandler() { @Override public void onClickUrl(OpenUrlEvent openUrlEvent) { AppControllerExplorer.getInstance().doClickUrl(openUrlEvent); } }); eventBus.addHandler(UpdateWorkspaceSizeEvent.TYPE, new UpdateWorkspaceSizeEventHandler() { @Override public void onUpdateWorkspaceSize(UpdateWorkspaceSizeEvent updateWorkspaceSizeEvent) { updateWorksapaceSize(true); } }); eventBus.addHandler(StoreGridChangedEvent.TYPE, new StoreGridChangedEventHandler() { @Override public void onStoreChanged(StoreGridChangedEvent storeGridChangedEvent) { wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemDetails().updateItemsNumber(storeGridChangedEvent.getSize()); } }); eventBus.addHandler(AddAdministratorEvent.TYPE, new AddAdministratorEventHandler() { @Override public void onAddAdministrator(AddAdministratorEvent addAdministratorEvent) { FileModel parent = wsPortlet.getToolBarPath().getLastParent(); if(parent!=null) AppControllerExplorer.getEventBus().fireEvent(new AddAdministratorEvent(parent)); } }); eventBus.addHandler(TrashEvent.TYPE, new TrashEventHandler() { @Override public void onTrashEvent(TrashEvent trashEvent) { executeTrashOperation(trashEvent.getTrashOperation(), trashEvent.getTargetFileModels()); } }); //********EVENTS TO NOTIFY SUBSCRIBERS eventBus.addHandler(ActiveGroupingView.TYPE, new ActiveGroupingViewHandler() { @Override public void onActiveGroupingView(ActiveGroupingView activeGroupingView) { if(activeGroupingView.isActiveGrouping()){ setCookieGridViewSetting("true"); wsPortlet.getGridGroupContainer().enableGrouping(); } else{ setCookieGridViewSetting("false"); wsPortlet.getGridGroupContainer().disableGrouping(); } } }); //PASTE EVENT eventBus.addHandler(PasteItemEvent.TYPE, new PasteItemEventHandler() { @Override public void onCutCopyAndPaste(PasteItemEvent pasteItemEvent) { String folderDestinationId = null; if(pasteItemEvent.getFolderDestinationId()!=null){ //IF FOLDER DESTINATION EXISTS folderDestinationId = pasteItemEvent.getFolderDestinationId(); }else{ FileModel file = wsPortlet.getToolBarPath().getLastParent(); if(file.getIdentifier()!=null){ //GET LAST PARENT FROM BREADRUMB folderDestinationId = file.getIdentifier(); } } wsPortlet.getGridGroupContainer().mask(ConstantsExplorer.VALIDATINGOPERATION,ConstantsExplorer.LOADINGSTYLE); if(folderDestinationId!=null){ // Info.display("Info", "pasting..."); AppControllerExplorer.getEventBus().fireEvent(new PasteItemEvent(pasteItemEvent.getIds(), folderDestinationId, pasteItemEvent.getOperationType())); } } }); //********EVENTS TO NOTIFY SUBSCRIBERS eventBus.addHandler(OpenReportsEvent.TYPE, new OpenReportsEventHandler() { @Override public void onClickOpenReports(OpenReportsEvent openReportsEvent) { AppControllerExplorer.getEventBus().fireEvent(new OpenReportsEvent(openReportsEvent.getSourceFileModel())); } }); eventBus.addHandler(GetPublicLinkEvent.TYPE, new GetPublicLinkEventHandler() { @Override public void onGetPublicLink(GetPublicLinkEvent getPublicLinkEvent) { // TODO Auto-generated method stub if(getPublicLinkEvent.getSourceFile()!=null){ AppControllerExplorer.getEventBus().fireEvent(new GetPublicLinkEvent(getPublicLinkEvent.getSourceFile())); } } }); eventBus.addHandler(AccountingHistoryEvent.TYPE, new AccountingHistoryEventHandler() { @Override public void onAccountingHistoryShow(AccountingHistoryEvent accountingHistoryEvent) { FileGridModel fileItem = getGridSelectedItem(); if(fileItem!=null){ AppControllerExplorer.getEventBus().fireEvent(new AccountingHistoryEvent(fileItem)); } } }); eventBus.addHandler(AccountingReadersEvent.TYPE, new AccountingReadersEventHandler() { @Override public void onAccountingReadersShow(AccountingReadersEvent accountingReadersEvent) { FileGridModel fileItem = getGridSelectedItem(); if(fileItem!=null){ AppControllerExplorer.getEventBus().fireEvent(new AccountingReadersEvent(fileItem)); } } }); eventBus.addHandler(GetInfoEvent.TYPE, new GetInfoEventHandler() { @Override public void onGetInfo(GetInfoEvent getInfoEvent) { FileModel file = getInfoEvent.getSourceFile(); if(file==null) file = getGridSelectedItem(); if(file!=null) new DialogGetInfo(file); } }); eventBus.addHandler(GetShareLinkEvent.TYPE, new GetSharedLinkEventHandler() { @Override public void onGetLink(GetShareLinkEvent getLinkEvent) { FileModel getLinkFile = getLinkEvent.getSourceFile()!=null?getLinkEvent.getSourceFile():wsPortlet.getToolBarPath().getLastParent(); AppControllerExplorer.getEventBus().fireEvent(new GetShareLinkEvent(getLinkFile)); } }); eventBus.addHandler(GridRefreshEvent.TYPE, new GridRefreshEventHandler() { @Override public void onGridRefresh(GridRefreshEvent gridRefreshEvent) { if(wsPortlet.getToolBarPath().getLastParent()!=null){ //ID DISPLAYED SMART FOLDER CONTENTS? if(selectedSmartFolderId!=null || selectedSmartFolderCategory!=null){ smartFolderSelected(selectedSmartFolderId, selectedSmartFolderCategory); return; } FileModel parent = wsPortlet.getToolBarPath().getLastParent(); //CREATE FOLDER PARENT FOR RPC // FolderModel folder = new FolderModel(parent.getIdentifier(), parent.getName(), parent.getParentFileModel(), true, parent.isShared()); updateStoreByRpc(parent); } } }); eventBus.addHandler(PreviewMessageEvent.TYPE, new PreviewMessageEventHandler() { @Override public void onPreviewMessage(PreviewMessageEvent previewMessageEvent) { AppControllerExplorer.getEventBus().fireEvent(new PreviewMessageEvent(previewMessageEvent.getMessageIdentifier(), previewMessageEvent.getMessageType())); } }); eventBus.addHandler(WebDavUrlEvent.TYPE, new WebDavUrlEventHandler() { @Override public void onClickWebDavUrl(WebDavUrlEvent webDavUrlEvent) { AppControllerExplorer.getEventBus().fireEvent(new WebDavUrlEvent(webDavUrlEvent.getItemIdentifier())); } }); eventBus.addHandler(OpenContextMenuTreeEvent.TYPE, new OpenContextMenuTreeEventHandler() { @Override public void onOpenContextMenuTree(OpenContextMenuTreeEvent openContextMenuTreeEvent) { AppControllerExplorer.getEventBus().fireEvent(openContextMenuTreeEvent); } }); eventBus.addHandler(ImagePreviewEvent.TYPE, new ImagePreviewEventHandler() { @Override public void onClickPreview(ImagePreviewEvent imgPrevEvnt) { AppControllerExplorer.getEventBus().fireEvent(new ImagePreviewEvent(imgPrevEvnt.getSourceFileModel(), imgPrevEvnt.getClientX(), imgPrevEvnt.getClientY())); } }); eventBus.addHandler(FileDownloadEvent.TYPE, new FileDownloadEventHandler() { @Override public void onFileDownloadEvent(FileDownloadEvent fileDownloadEvent) { if(fileDownloadEvent!=null && fileDownloadEvent.getItemIdentifier()!=null){ // FileGridModel fileItem = getGridSelectedItem(); // // String id = fileDownloadEvent.getItemIdentifier()!=null? fileDownloadEvent.getItemIdentifier():""; // // if(fileItem!=null && id.compareTo(fileItem.getIdentifier())==0){ // fileItem.setMarkAsRead(true); // accountingSetItemAsRead(true); // } AppControllerExplorer.getEventBus().fireEvent(new FileDownloadEvent(fileDownloadEvent.getItemIdentifier(), fileDownloadEvent.getItemName(), fileDownloadEvent.getDownloadType())); } } }); eventBus.addHandler(DeleteMessageEvent.TYPE, new DeleteMessageEventHandler() { @Override public void onDeleteMessage(DeleteMessageEvent deleteMessageEvent) { AppControllerExplorer.getEventBus().fireEvent(new DeleteMessageEvent(deleteMessageEvent.getMessageTarget())); } }); eventBus.addHandler(SaveAttachmentsEvent.TYPE, new SaveAttachmentsEventHandler() { @Override public void onSaveAttachments(SaveAttachmentsEvent saveAttachmentsEvent) { AppControllerExplorer.getEventBus().fireEvent(new SaveAttachmentsEvent(saveAttachmentsEvent.getMessageIdentifier(), saveAttachmentsEvent.getMessageType())); } }); eventBus.addHandler(GridElementSelectedEvent.TYPE, new GridElementSelectedEventHandler() { @Override public void onGridElementSelected(GridElementSelectedEvent event) { if(!event.isMultiSelection()){ //IS NOT MULTISELECTION doElementGridSelected(true, event.getSourceFile()); //REMOVED IS MARK AS READ FROM HL - 2015/02/24 // FileGridModel fileItem = getGridSelectedItem(); // if(fileItem!=null){ // accountingSetItemAsRead(fileItem.isMarkAsRead()); // } }else{ //IS MULTISELECTION wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activeButtonForMultiSelection(true); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemDetails().enableInfoHistoryButtons(false); } //setFileDetailsInView(event.getSourceFile().getIdentifier()); } }); eventBus.addHandler(LoadAllScopeEvent.TYPE, new LoadAllScopeEventHandler() { @Override public void onLoadScopes(LoadAllScopeEvent loadAllScopeEvent) { doLoadAllScope(); } private void doLoadAllScope() { appContrExplorer.getRpcWorkspaceService().getAllScope(new AsyncCallback>() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting all scope." +ConstantsExplorer.TRY_AGAIN, null); } @Override public void onSuccess(List result) { // for(ScopeModel scope: result) // System.out.println("#############Scopde id " + scope.getId() + " name " + scope.getName()); if(result!=null && result.size()>0){ wsPortlet.getSearchAndFilterContainer().setListScope(result); wsPortlet.getSearchAndFilterContainer().selectScopeByIndex(0); //select first scope } else new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting all scope. No scope available. " +ConstantsExplorer.TRY_AGAIN, null); } }); } }); eventBus.addHandler(ScopeChangeEvent.TYPE, new ScopeChangeEventHandler() { @Override public void onLoadScope(ScopeChangeEvent scopeChangeEvent) { doLoadScope(scopeChangeEvent.getScopeId()); } private void doLoadScope(String scopeId) { AppControllerExplorer.getEventBus().fireEvent(new FilterScopeEvent(scopeId)); } }); eventBus.addHandler(SaveSmartFolderEvent.TYPE, new SaveSmartFolderEventHandler() { @Override public void onSaveSmartFolder(SaveSmartFolderEvent saveSmartFolderEvent) { doSaveSmartFolder(saveSmartFolderEvent); } private void doSaveSmartFolder(SaveSmartFolderEvent event) { AppControllerExplorer.getEventBus().fireEvent(new AddSmartFolderEvent(event.getSearchText())); } }); eventBus.addHandler(DoubleClickElementSelectedEvent.TYPE, new DoubleClickElementSelectedEventHandler() { @Override public void onDoubleClickElementGrid(DoubleClickElementSelectedEvent doubleClickElementSelectedEvent) { doElementDoubleClick(doubleClickElementSelectedEvent.getSourceFile()); } private void doElementDoubleClick(final FileGridModel fileModel) { // appContrExplorer.expandFolder(event.getIdentifier()); //COMMENTED 01-02-2013 // appContrExplorer.expandFolder(event.getIdentifier()); if(fileModel.getIdentifier()!=null){ if(wsPortlet.getSearchAndFilterContainer().isSearchActive()){ AppController.getEventBus().fireEvent(new SearchTextEvent(null)); wsPortlet.getSearchAndFilterContainer().setSearchActive(false); resetSmartFolderSelected(); } System.out.println("FILE MODEL DOUBLE CLICK: "+fileModel); FolderModel folder = new FolderModel(fileModel.getIdentifier(), fileModel.getName(), fileModel.getParentFileModel(), true, fileModel.isShared(),fileModel.isVreFolder()); updateStoreByRpc(folder); wsPortlet.getGridGroupContainer().setCurrentFolderView(folder); loadBreadcrumbByFileModel(fileModel, true); } else GWT.log("an error occurred in double click on grid, item select is null"); } }); eventBus.addHandler(SearchTextEvent.TYPE, new SearchTextEventHandler() { @Override public void onSearchText(SearchTextEvent searchTextEvent) { if(searchTextEvent.getTextSearch()==null){ appContrExplorer.searching(false); wsPortlet.getGridGroupContainer().setBorderAsOnSearch(false); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activeButtonsOnSearch(false); //ADDED 09-08-13 } else{ wsPortlet.getSearchAndFilterContainer().setSearchActive(true); //ADDED 06-04-12 // setSearchActive(true); appContrExplorer.searching(true); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activeButtonsOnSearch(true); //ADDED 09-08-13 doSearchText(searchTextEvent.getTextSearch()); } } private void doSearchText(String textSearch) { if(wsPortlet.getGxtCardLayoutResultPanel().getActivePanel() instanceof GxtItemsPanel){ //If active panel is panel with file items wsPortlet.getSearchAndFilterContainer().setVisibleButtonSave(true); //ADDED 24/04/2012 // wsPortlet.getGxtCardLayoutResultPanel().getToolBarItem().activeAllButtonWithoutGroupView(false); //ADDED 06/02/2013 wsPortlet.getGridGroupContainer().setBorderAsOnSearch(true); wsPortlet.getGridGroupContainer().mask(ConstantsExplorer.LOADING,ConstantsExplorer.LOADINGSTYLE); appContrExplorer.getRpcWorkspaceService().getItemsBySearchName(textSearch, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { // System.out.println("Failure search RPC"); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " searching item. " +ConstantsExplorer.TRY_AGAIN, null); wsPortlet.getGridGroupContainer().unmask(); } @Override public void onSuccess(List result) { wsPortlet.getGridGroupContainer().updateStore(result); wsPortlet.getGridGroupContainer().unmask(); } }); } } }); eventBus.addHandler(SearchItemByIdEvent.TYPE, new SearchItemByIdEventHandler() { @Override public void onSearchItemById(SearchItemByIdEvent searchItemByIdEvent) { if(searchItemByIdEvent.getItemId()!=null && !searchItemByIdEvent.getItemId().isEmpty()){ wsPortlet.getSearchAndFilterContainer().setSearchActive(true); //ADDED 06-04-12 appContrExplorer.searching(true); doSearchItemById(searchItemByIdEvent.getItemId(), searchItemByIdEvent.getOperationParameter()); }else{ appContrExplorer.searching(false); wsPortlet.getGridGroupContainer().setBorderAsOnSearch(false); } } private void doSearchItemById(final String itemId, WsPortletInitOperation wsPortletInitOperation) { wsPortlet.getGridGroupContainer().setBorderAsOnSearch(true); wsPortlet.getGridGroupContainer().mask(ConstantsExplorer.LOADING,ConstantsExplorer.LOADINGSTYLE); switch (wsPortletInitOperation) { case gotofolder: appContrExplorer.getRpcWorkspaceService().getFolderChildrenForFileGridById(itemId, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { if(caught instanceof SessionExpiredException){ GWT.log("Session expired"); viewSessionExpiredPanel(); return; } new MessageBoxAlert("Error", caught.getMessage(), null); wsPortlet.getGridGroupContainer().unmask(); } @Override public void onSuccess(List result) { wsPortlet.getGridGroupContainer().updateStore(result); wsPortlet.getGridGroupContainer().unmask(); if(result!=null && result.size()>0){ String childId = result.get(0).getIdentifier(); //GET FIRST CHILD ID TO LOAD PARENTS BREADCRUMB loadParentBreadcrumbByItemId(childId, false); }else{ //FOLDER IS EMPTY AND EXISTS, FOLDER IS LAST PARENT INTO BREADCRUMB loadParentBreadcrumbByItemId(itemId, true); //RELOAD BREDCRUMB } boolean selected =wsPortlet.getGridGroupContainer().selectItemByFileModelId(itemId); if(selected) new InfoDisplay("Info", "The searched element was selected"); } }); break; case sharelink: appContrExplorer.getRpcWorkspaceService().getItemForFileGrid(itemId, new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", caught.getMessage(), null); wsPortlet.getGridGroupContainer().unmask(); } @Override public void onSuccess(FileGridModel result) { List listResult = new ArrayList(); listResult.add(result); wsPortlet.getGridGroupContainer().updateStore(listResult); wsPortlet.getGridGroupContainer().unmask(); if(result!=null) loadBreadcrumbByFileModel(result, false); //ADDED 13-06-2013 } }); break; } } }); eventBus.addHandler(PathElementSelectedEvent.TYPE, new PathElementSelectedEventHandler() { @Override public void onPathElementSelected(PathElementSelectedEvent event) { wsPortlet.getSearchAndFilterContainer().searchCancel(); //cancel search if(wsPortlet.getGxtCardLayoutResultPanel().getActivePanel() instanceof GxtItemsPanel){ //If active panel is panel with file items AppController.getEventBus().fireEvent(new SearchTextEvent(null)); } doPathElementSelected(event); } private void doPathElementSelected(PathElementSelectedEvent event) { // appContrExplorer.selectItemInTree(event.getSourceFile().getIdentifier()); appContrExplorer.expandFolder(event.getSourceFile().getIdentifier()); } }); eventBus.addHandler(GridElementUnSelectedEvent.TYPE, new GridElementUnSelectedEventHandler() { @Override public void onGridElementUnSelected(GridElementUnSelectedEvent event) { doElementGridSelected(false, null); } }); eventBus.addHandler(AddFolderEvent.TYPE, new AddFolderEventHandler() { @Override public void onAddItem(AddFolderEvent event) { AppControllerExplorer.getEventBus().fireEvent(new AddFolderEvent(event.getFileSourceModel(),event.getParentFileModel())); } }); eventBus.addHandler(SendMessageEvent.TYPE, new SendMessageEventHandler() { @Override public void onSendMessage(SendMessageEvent sendMessageEvent) { doSendMessage(sendMessageEvent.getListFileModelSelected()); } private void doSendMessage(List listFileModelSelected) { AppControllerExplorer.getEventBus().fireEvent(new SendMessageEvent(null)); } }); eventBus.addHandler(FileUploadEvent.TYPE, new FileUploadEventHandler() { @Override public void onFileUploadEvent(FileUploadEvent fileUploadEvent) { FileModel parent = null; try{ if(!wsPortlet.getSearchAndFilterContainer().isSearchActive()){ //IF IS NOT SEARCH ACTIVE //FILE UPLOAD CASES.. if(fileUploadEvent.getTargetFolderModel()!=null){ parent = fileUploadEvent.getTargetFolderModel(); GWT.log("Search is not active, get parent item for uploading from parent of file model: " +fileUploadEvent.getTargetFolderModel().getName()); }else if(wsPortlet.getToolBarPath().getLastParent()!=null){ parent = wsPortlet.getToolBarPath().getLastParent(); GWT.log("Search is not active get parent item for uploading from breadcrumb: " +parent.getName()); }else if(wsPortlet.getGridGroupContainer().getCurrentFolderView()!=null){ parent = wsPortlet.getGridGroupContainer().getCurrentFolderView(); GWT.log("Search is not active get parent item for uploading from CurrentFolderView: " +parent.getName()); } // }else if(wsPortlet.getGridGroupContainer().getCurrentFolderView()!=null){ // parent = wsPortlet.getGridGroupContainer().getCurrentFolderView(); // GWT.log("get parent item for uploading from CurrentFolderView: " +parent.getName()); // }else if(wsPortlet.getToolBarPath().getLastParent()!=null){ // parent = wsPortlet.getToolBarPath().getLastParent(); // GWT.log("get parent item for uploading from breadcrumb: " +parent.getName()); // } } else{ //IF IS SEARCH ACTIVE //is BREADCRUMB fully? if(wsPortlet.getToolBarPath().getLastParent()!=null){ parent = wsPortlet.getToolBarPath().getLastParent(); GWT.log("Search is active get parent item for uploading from breadcrumb: " +parent.getName()); }else parent = null; //also SET null AS PARENT } AppControllerExplorer.getEventBus().fireEvent(new FileUploadEvent(parent,fileUploadEvent.getUploadType())); }catch (Exception e) { GWT.log("Error onFileUploadEvent", e); } } }); // eventBus.addHandler(FileDownloadEvent.TYPE, new FileDownloadEventHandler() { // // @Override // public void onFileDownloadEvent(FileDownloadEvent fileDownloadEvent) { // AppControllerExplorer.getEventBus().fireEvent(new FileDownloadEvent(fileDownloadEvent.getItemIdentifier(), fileDownloadEvent.getItemName(), fileDownloadEvent.getDownloadType())); // // } // }); eventBus.addHandler(DeleteItemEvent.TYPE, new DeleteItemEventHandler() { @Override public void onDeleteItem(DeleteItemEvent event) { doDeleteItem(event); } private void doDeleteItem(final DeleteItemEvent event){ if(!event.isMultiSelection()){ //IS NOT MULTI AppControllerExplorer.getEventBus().fireEvent(new DeleteItemEvent(event.getFileTarget())); }else{ //IS MULTI if(event.getListTarget()!=null){ FileModel parent = null; if(!wsPortlet.getSearchAndFilterContainer().isSearchActive()){ // IS NOT A SEARCH if(wsPortlet.getToolBarPath().getLastParent()!=null){ parent = wsPortlet.getToolBarPath().getLastParent(); GWT.log("Search is not active get parent item for uploading from breadcrumb: " +parent.getName()); }else if(wsPortlet.getGridGroupContainer().getCurrentFolderView()!=null){ parent = wsPortlet.getGridGroupContainer().getCurrentFolderView(); GWT.log("Search is not active get parent item for uploading from CurrentFolderView: " +parent.getName()); } } final FileModel target = parent; int size = event.getListTarget().size(); MessageBoxConfirm mbc = new MessageBoxConfirm(ConstantsExplorer.MESSAGE_DELETE, "Are you sure you want to delete "+size+" items?"); mbc.getMessageBoxConfirm().addCallback(new Listener() { public void handleEvent(MessageBoxEvent be) { // eventBus.fireEvent(new DeleteItemEvent(sel)); //IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if(clickedButton.equals(Dialog.YES)){ wsPortlet.getGridGroupContainer().mask("Deleting",ConstantsExplorer.LOADINGSTYLE); appContrExplorer.getRpcWorkspaceService().deleteListItemsForIds(event.getListTarget(), new AsyncCallback() { @Override public void onFailure(Throwable arg0) { new MessageBoxAlert("Error", arg0.getMessage(),null); wsPortlet.getGridGroupContainer().unmask(); appContrExplorer.refreshRoot(true); } @Override public void onSuccess(Void arg0) { //Deleting item from grid for (String id : event.getListTarget()) { deleteItem(id); } wsPortlet.getGridGroupContainer().unmask(); GWT.log("target: "+target); if(wsPortlet.getSearchAndFilterContainer().isSearchActive()){ appContrExplorer.refreshRoot(false); }else AppControllerExplorer.getEventBus().fireEvent(new RefreshFolderEvent(target, true, false, true)); } }); } } }); } } } }); eventBus.addHandler(RenameItemEvent.TYPE, new RenameItemEventHandler() { @Override public void onRenameItem(RenameItemEvent event) { doRenameItem(event); } public void doRenameItem(final RenameItemEvent event) { AppControllerExplorer.getEventBus().fireEvent(new RenameItemEvent(event.getFileTarget())); } }); eventBus.addHandler(LoadBreadcrumbEvent.TYPE, new LoadBreadcrumbEventHandler() { @Override public void loadBreadcrumb(LoadBreadcrumbEvent loadBreadcrumbEvent) { if(loadBreadcrumbEvent.getFileModel()!=null) loadBreadcrumbByFileModel(loadBreadcrumbEvent.getFileModel(), true); } }); eventBus.addHandler(VREChangePermissionsEvent.TYPE, new VREChangePermissionsEventHandler() { @Override public void onChangePermissionsOpen(VREChangePermissionsEvent vreChangePermissionsEvent) { if(vreChangePermissionsEvent.getFileModel()!=null) AppControllerExplorer.getEventBus().fireEvent(new VRESettingPermissionEvent(vreChangePermissionsEvent.getFileModel())); } }); } private void accountingSetItemAsRead(boolean read) { wsPortlet.getToolBarItemDetails().setRead(read); } private void doElementGridSelected(boolean isSelected, FileModel target) { wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activeButtonsOnSelectForOperation(target, isSelected); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemDetails().enableInfoHistoryButtons(isSelected); disableButtonsOnBreadcrumbSpecialFolder(); if(isSelected){ FileModel lastParent = this.wsPortlet.getToolBarPath().getLastParent(); if(lastParent!=null && target.getParentFileModel()!=null){ boolean parentChanged = lastParent.getIdentifier().compareTo(target.getParentFileModel().getIdentifier())==0?false:true; //RELOAD breadcrumb only if last parent id is changed if(parentChanged) loadBreadcrumbByFileModel(target,false); } else loadBreadcrumbByFileModel(target,false); } } private void disableButtonsOnBreadcrumbSpecialFolder(){ GxtBreadcrumbPathPanel breadCrumb = this.wsPortlet.getToolBarPath(); FileModel parent = breadCrumb.getLastParent(); if(parent!=null && parent.isSpecialFolder()) wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().disableButtonSpecialFolderSelected(); } private FileGridModel getGridSelectedItem(){ return wsPortlet.getGridGroupContainer().getSelectedItem(); } private void resetSmartFolderSelected(){ selectedSmartFolderId = null; selectedSmartFolderCategory = null; } /** * * @param item * @param isLastParent - if is true, load the item passed in input as last item of the list resulted */ private void loadBreadcrumbByFileModel(final FileModel item, final boolean isLastParent){ GWT.log("Reload Breadcrumb: [FileModel name: "+item.getName()+ ", isLastParent: "+isLastParent+"]"); AppControllerExplorer.rpcWorkspaceService.getListParentsByItemIdentifier(item.getIdentifier(), false, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { GWT.log("failure get list parents by item identifier "+caught); } @Override public void onSuccess(List result) { if(isLastParent && item.isDirectory()){ result.add(item); } updateBreadcrumb(result); //Set file path in tab panel on current item selected } }); } /** * * @param childItemId */ protected void loadParentBreadcrumbByItemId(final String childItemId, boolean includeItemAsParent){ GWT.log("Reload Parent Breadcrumb: [Item id: "+childItemId+"]"); AppControllerExplorer.rpcWorkspaceService.getListParentsByItemIdentifier(childItemId, includeItemAsParent, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { GWT.log("failure get list parents by item identifier "+caught); } @Override public void onSuccess(List result) { updateBreadcrumb(result); //Set file path in tab panel on current item selected } }); } private void updateBreadcrumb(List parents){ //this.wsPortlet.getBasicTabContainer().setLabelPath(path); //Set path in breadcrumb GxtBreadcrumbPathPanel breadCrumb = this.wsPortlet.getToolBarPath(); breadCrumb.setPath(parents); //Set path in breadcrumb FileModel parent = breadCrumb.getLastParent(); GWT.log("Updated Breadcrumb for : "+parent); if(parent!=null){ if(parent.isDirectory() && parent.isShared()){ //IS SHARED FOLDER, ENABLING OPERATION FOR ACTIVE BREADCRUMB setACLInfo(parent.getIdentifier()); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().enableButtonForActiveBreadcrumb(parent); }else if(parent.isSpecialFolder()){ //IS SPECIAL FOLDER? DISABLING BUTTONS GWT.log("Update Breadcrumb is special folder.. disabling special folder buttons"); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().disableButtonSpecialFolderSelected(); setACLInfo(null); }else{ //ENABLING OPERATION FOR ACTIVE BREADCRUMB wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().enableButtonForActiveBreadcrumb(parent); setACLInfo(null); //IS NOT A SHARE FOLDER DOSN'T DISPLAY ACL INFO } }else setACLInfo(null); } private void setACLInfo(final String parentId){ if(parentId==null){ wsPortlet.getToolBarItemDetails().updateACLInfo(null); return; } GWT.log("Updating ACL info for folder id: "+parentId); AppControllerExplorer.rpcWorkspaceService.getUserACLForFolderId(parentId, new AsyncCallback>() { @Override public void onFailure(Throwable arg0) { // TODO Auto-generated method stub } @Override public void onSuccess(List res) { FileModel parent = wsPortlet.getToolBarPath().getLastParent(); GWT.log("Validating correct ACL id: "+parentId +" and "+parent.getIdentifier()); if(parentId.compareTo(parent.getIdentifier())==0){ if(res!=null && res.size()>0){ wsPortlet.getToolBarItemDetails().updateACLInfo(res.get(0)); wsPortlet.getToolBarItemDetails().updateAddAdministorInfo(appContrExplorer.myLogin, res.get(0)); } } } }); } /** * init method * @param rootPanel */ public void go(final HasWidgets rootPanel) { this.rootPanel = rootPanel; final String searchParameter = Window.Location.getParameter(ConstantsPortlet.GET_SEARCH_PARAMETER); final String itemIdParameter = Window.Location.getParameter(ConstantsPortlet.GET_ITEMID_PARAMETER); final String operationParameter = Window.Location.getParameter(ConstantsPortlet.GET_OPEARATION_PARAMETER); final String validateSession = Window.Location.getParameter(ConstantsPortlet.GET_VALIDATE_SESSION); boolean sessionValidating = true; if(validateSession!=null && validateSession.compareToIgnoreCase("false")==0) sessionValidating = false; GWT.log("GET PARAMETER "+ConstantsPortlet.GET_SEARCH_PARAMETER+": "+searchParameter); GWT.log("GET PARAMETER "+ConstantsPortlet.GET_ITEMID_PARAMETER+": "+itemIdParameter); GWT.log("GET PARAMETER "+ConstantsPortlet.GET_OPEARATION_PARAMETER+": "+operationParameter); GWT.log("GET PARAMETER "+ConstantsPortlet.GET_VALIDATE_SESSION+": "+validateSession); final boolean instanceWithGrouping = readCookieWorkspaceGridViewSetting(); System.out.println("Cookie "+ConstantsPortlet.GCUBE_COOKIE_WORKSPACE_GRID_VIEW_SETTING + " return "+instanceWithGrouping); System.out.println("Session Validating is "+sessionValidating); boolean isSearch = false; boolean isSearchForItemId = false; // Log.trace("Start Workspace Portlet"); if (this.appContrExplorer == null){ this.wsPortlet = new WorskpacePortlet(instanceWithGrouping); } else{ if(searchParameter!=null && !searchParameter.isEmpty()) isSearch = true; if(itemIdParameter!=null && !itemIdParameter.isEmpty()){ isSearch = true; isSearchForItemId = true; } this.wsPortlet = new WorskpacePortlet(this.appContrExplorer.getPanel(true, false, !isSearch), instanceWithGrouping); eventBus.fireEvent(new LoadAllScopeEvent()); //LOAD ALL SCOPE EVENT } final boolean searchingForItemId = isSearchForItemId; //VALIDATING SESSION if(appContrExplorer!=null && sessionValidating){ appContrExplorer.getRpcWorkspaceService().isSessionExpired(new AsyncCallback() { @Override public void onFailure(Throwable caught) { GWT.log("ERROR ON VALIDATING SESSION - DEFAULT INIT"); initPortlet(rootPanel, instanceWithGrouping, searchingForItemId, searchParameter, itemIdParameter, operationParameter); } @Override public void onSuccess(Boolean result) { GWT.log("SESSION IS EXPIRED: "+result); //SESSION IS NOT EXPIRED if(!result) initPortlet(rootPanel, instanceWithGrouping, searchingForItemId, searchParameter, itemIdParameter, operationParameter); else{ //SESSION IS EXPIRED viewSessionExpiredPanel(); } } }); } else initPortlet(rootPanel, instanceWithGrouping, searchingForItemId, searchParameter, itemIdParameter, operationParameter); //CheckSession if you do not need to something when the session expire CheckSession.getInstance().startPolling(); } private void initPortlet(final HasWidgets rootPanel, final boolean instanceWithGrouping, boolean isSearchForItemId, final String searchParameter, final String itemIdParameter, final String operationParameter){ rootPanel.add(wsPortlet.getBorderLayoutContainer()); //SET TOGGLE BUTTON GRID VIEW Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().toggleGridViewButton(instanceWithGrouping); } }); //IF IS SEARCH and IS NOT SEARCH FOR ITEM ID - fire event search text if(searchParameter!=null && !searchParameter.isEmpty() && !isSearchForItemId){ Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { wsPortlet.getSearchAndFilterContainer().searchText(searchParameter); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activeButtonsOnSearch(false); //ADDED 09-08-13 } }); } else if(itemIdParameter!=null && !itemIdParameter.isEmpty()){ //SEARCH FOR ITEM ID Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { AppController.getEventBus().fireEvent(new SearchItemByIdEvent(itemIdParameter, operationParameter)); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activeButtonsOnSearch(false); //ADDED 09-08-13 } }); } //LOADING TRASH CONTENT Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { executeTrashOperation(WorkspaceTrashOperation.REFRESH, null); } }); Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { updateWorksapaceSize(false); } }); rootPanel.add(htmlWorkspaceSize); } private void setWorkspaceUserQuotes(String size, long totalItems){ String msg; if(totalItems<=0){ msg = "No items"; }else if(totalItems==1){ msg = totalItems + " item"; }else { msg = totalItems + " items"; } msg+= ", "+size; String html = "
" + msg +"
"; htmlWorkspaceSize.setHTML(html); } /** * * @return true if exists a cookie with msg as true value (or not exists the cookie), false otherwise */ private boolean readCookieWorkspaceGridViewSetting() { //get the cookie with name GCBUEWorkspaceGridViewSetting String msg = Cookies.getCookie(ConstantsPortlet.GCUBE_COOKIE_WORKSPACE_GRID_VIEW_SETTING); //if null, there was no cookie if(msg == null){ setCookieGridViewSetting("true"); return true; } if(msg.compareTo("true")==0) return true; return false; } public static void setCookie(String name, String value, int days) { if (value == null) { Cookies.removeCookie(name); return; } // Now Date expiringDate = new Date(); // Now + days expiringDate.setTime(expiringDate.getTime() + ConstantsPortlet.MILLISECS_PER_DAY * days); Cookies.setCookie(name, value, expiringDate); } public static void setCookieGridViewSetting(String value) { setCookie(ConstantsPortlet.GCUBE_COOKIE_WORKSPACE_GRID_VIEW_SETTING, value, ConstantsPortlet.COOKIE_EXPIRE_DAYS); } public GxtBorderLayoutPanel getMainPanel(){ return wsPortlet.getBorderLayoutContainer(); } // public ExplorerPanel getExplorerPanel() { // return wsPortlet.getExplorerPanel(); // } public void setSizeAsyncTreePanel(int width, int height) { wsPortlet.getExplorerPanel().getAsycTreePanel().setSizeTreePanel(width-17, height-55); } private void updateStoreByRpc(final FileModel folder){ resetSmartFolderSelected(); if(folder==null) return; //CREATE FOLDER PARENT FOR RPC final FileModel parent = new FolderModel(folder.getIdentifier(), folder.getName(), folder.getParentFileModel(), true, folder.isShared(), folder.isVreFolder()); wsPortlet.getGridGroupContainer().mask(ConstantsExplorer.LOADING,ConstantsExplorer.LOADINGSTYLE); appContrExplorer.getRpcWorkspaceService().getFolderChildrenForFileGrid(parent, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { if(caught instanceof SessionExpiredException){ GWT.log("Session expired"); viewSessionExpiredPanel(); return; } new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting items for grid. " +ConstantsExplorer.TRY_AGAIN, null); wsPortlet.getGridGroupContainer().unmask(); } @Override public void onSuccess(List result) { wsPortlet.getGridGroupContainer().setCurrentFolderView(parent); //SET folder as current view wsPortlet.getGridGroupContainer().unmask(); wsPortlet.getGridGroupContainer().updateStore(result); } }); } public FileModel getSelectedFolder(){ return this.appContrExplorer.getSelectedFolderInTree(); } /** * Following methods implements SubscriberInterface */ @Override public void addedFolder(String itemIdentifier, FileModel parent) { updateStoreByRpc(parent); } @Override public void addedFile(String itemIdentifier, FileModel parent) { updateStoreByRpc(parent); } @Override public void selectedItem(FileModel item, List parents) { FileModel currentFolder = wsPortlet.getGridGroupContainer().getCurrentFolderView(); if(currentFolder!=null){ if(item.isDirectory()) //ADDED 11-06-2013 parents.add(item); updateBreadcrumb(parents); //set path //CASE IS A SEARCH if(wsPortlet.getSearchAndFilterContainer().isSearchActive()){ //ADDED 12-04-12 wsPortlet.getSearchAndFilterContainer().searchCancel(); //TODO added in 05/04/2012 AppController.getEventBus().fireEvent(new SearchTextEvent(null)); wsPortlet.getSearchAndFilterContainer().setSearchActive(false); // setSearchActive(false); resetSmartFolderSelected(); updatGridViewForSelectedItem(item); return; } //CASE IS NOT A SEARCH if (item.isDirectory()) updateStoreByRpc(item); //View children of folder else{ String currentIdentifier = currentFolder.getIdentifier(); //Actual id parent if(!currentIdentifier.equals(item.getParentFileModel().getIdentifier())) {//Update store only if folder parent is differently updateStoreByRpc(item.getParentFileModel()); //View contents of parent folder } } } else{ updatGridViewForSelectedItem(item); //No operation is running.. view only items of same level tree of selected item loadBreadcrumbByFileModel(item, true); } } /** * * @param item */ private void updatGridViewForSelectedItem(FileModel item){ if(item==null) return; if(item.isDirectory()) updateStoreByRpc(item); else updateStoreByRpc(item.getParentFileModel()); } @Override public void expandFolderItem(FolderModel folder) { updateStoreByRpc(folder); } @Override public boolean renameItem(String itemIdentifier, String newName, String extension) { FileModel lastParent = wsPortlet.getToolBarPath().getLastParent(); //RELOAD BREADCRUMB loadBreadcrumbByFileModel(lastParent, true); return wsPortlet.getGridGroupContainer().renameItem(itemIdentifier, newName, extension); } @Override public boolean deleteItem(String itemIdentifier) { executeTrashOperation(WorkspaceTrashOperation.REFRESH, null); return wsPortlet.getGridGroupContainer().deleteItem(itemIdentifier); } @Override public void rootLoaded(FileModel root) { this.rootIdentifier = root.getIdentifier(); } @Override public void setParentItemSelected(ArrayList listParents){ updateBreadcrumb(listParents); } @Override public void smartFolderSelected(final String folderId, final String category) { selectedSmartFolderId = folderId; selectedSmartFolderCategory = category; GWT.log("Smart folder selected, folderId: " + selectedSmartFolderId); GWT.log("Smart folder selected, category: " + selectedSmartFolderCategory); wsPortlet.getGridGroupContainer().mask(ConstantsExplorer.LOADING,ConstantsExplorer.LOADINGSTYLE); wsPortlet.getGridGroupContainer().setBorderAsOnSearch(true); if (folderId != null && !folderId.isEmpty()) { appContrExplorer.getRpcWorkspaceService().getSmartFolderResultsById(folderId,new AsyncCallback>() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting smart folders. " +ConstantsExplorer.TRY_AGAIN, null); wsPortlet.getGridGroupContainer().unmask(); } @Override public void onSuccess(List result) { wsPortlet.getSearchAndFilterContainer().setSearchActive(true); // setSearchActive(true); wsPortlet.getGridGroupContainer().unmask(); wsPortlet.getGridGroupContainer().updateStore(result); } }); } else { if (category != null && !category.isEmpty()) { appContrExplorer.getRpcWorkspaceService().getSmartFolderResultsByCategory(category, new AsyncCallback>() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting smart folder results by category. " +ConstantsExplorer.TRY_AGAIN, null); } @Override public void onSuccess(List result) { wsPortlet.getGridGroupContainer().unmask(); wsPortlet.getGridGroupContainer().updateStore(result); } }); } } } @Override public void movedItems(String sourceParentIdentifier, FileModel targetParent) { updateStoreByRpc(targetParent); loadBreadcrumbByFileModel(targetParent, true); //ADDED 13-06-2013 } @Override public void switchView(ViewSwitchType type){ if(type.equals(ViewSwitchType.Tree) || type.equals(ViewSwitchType.SmartFolder)){ wsPortlet.getGxtCardLayoutResultPanel().setActivePanel(ViewSwitchTypeInResult.Group); wsPortlet.getSearchAndFilterContainer().setEmptyText(ConstantsPortlet.SEARCHBYNAME); } else{ wsPortlet.getGxtCardLayoutResultPanel().setActivePanel(ViewSwitchTypeInResult.Messages); wsPortlet.getSearchAndFilterContainer().setEmptyText(ConstantsPortlet.SEARCHINMESSAGE); } //***ADDED 24/04/2012 wsPortlet.getSearchAndFilterContainer().searchCancel(); eventBus.fireEvent(new SearchTextEvent(null)); // appContrExplorer.searching(false); //************** } @Override public void refreshFolder(FileModel folderTarget, boolean forceRefreshContent, boolean forceRefreshBreadcrumb){ resetSmartFolderSelected(); GWT.log("refreshFolder method.."); if(folderTarget!=null){ GWT.log("folder target is: "+ folderTarget.getName() + ", forceRefresh is :" +forceRefreshContent); if(forceRefreshContent){ //FORCED REFRESH FOLDER FileGridModel folder = wsPortlet.getGridGroupContainer().getFileGridModelByIdentifier(folderTarget.getIdentifier()); GWT.log("force refresh, folder :" +folder); updateStoreByRpc(folderTarget); if(forceRefreshBreadcrumb){ GWT.log("forcing reload breadcrumb for: "+folderTarget); loadBreadcrumbByFileModel(folderTarget, true); } return; } FileModel filePath = wsPortlet.getToolBarPath().getLastParent(); if(filePath!=null){ //REFRESH FOLDER ONLY IF IS THE LAST ITEM OF BREADCRUMB if(folderTarget.getIdentifier().compareToIgnoreCase(filePath.getIdentifier())==0){ FileGridModel folder = wsPortlet.getGridGroupContainer().getFileGridModelByIdentifier(folderTarget.getIdentifier()); GWT.log("refresh folder is same LAST ITEM OF BREADCRUMB:" +folder); updateStoreByRpc(folderTarget); return; } } GWT.log("folderTarget is not egual to last parent of the breadrcrumb, refresh folder skypped"); if(forceRefreshBreadcrumb){ GWT.log("forcing reload breadcrumb for: "+folderTarget); loadBreadcrumbByFileModel(folderTarget, true); } } else GWT.log("folderTarget is null, refresh skypped"); } @Override public void createNewMessage(final HashMap hashAttachs) { GWT.runAsync(MailForm.class, new RunAsyncCallback() { @Override public void onSuccess() { if (hashAttachs.size() == 0) { //no attachments new MailForm(); } else { new MailForm(hashAttachs); } } public void onFailure(Throwable reason) { Window.alert("Could not load this component: " + reason.getMessage()); } }); } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#fileDownloaded(java.lang.String) */ @Override public void fileDownloaded(String itemIdentifier) { FileGridModel fileItem = wsPortlet.getGridGroupContainer().getFileGridModelByIdentifier(itemIdentifier); if(fileItem!=null && itemIdentifier!= null && fileItem.getIdentifier().compareTo(itemIdentifier)==0){ //REMOVED FROM HL // fileItem.setMarkAsRead(true); //SET ICON AS READ IF ITEM IS SELECETED IN THE GRID FileGridModel fileSelected = getGridSelectedItem(); if(fileSelected!=null && fileSelected.getIdentifier().compareTo(itemIdentifier)==0) accountingSetItemAsRead(true); } } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#sessionExpired() */ @Override public void viewSessionExpiredPanel() { FileModel folder = wsPortlet.getGridGroupContainer().getCurrentFolderView(); String folderId = ""; if(folder!=null){ folderId = folder.getIdentifier(); }else if(wsPortlet.getToolBarPath().getLastParent()!=null){ folderId = wsPortlet.getToolBarPath().getLastParent().getIdentifier(); } logger.log(Level.INFO, "Showing session expired panel, folderId is: "+folderId); if(folderId!=null && !folderId.isEmpty()){ HashMap params = new HashMap(1); params.put(ConstantsExplorer.GET_ITEMID_PARAMETER, folderId); logger.log(Level.INFO, "show logout with parameter is: "+folderId); CheckSession.showLogoutDialog(params); }else{ logger.log(Level.INFO, "show logut without parameters"); CheckSession.showLogoutDialog(); } if(!CheckSession.getInstance().isShowSessionExpiredDialog() && this.rootPanel!=null){ rootPanel.clear(); rootPanel.add(showProblems()); getMainPanel().setHeight(350); } } private LayoutContainer showProblems() { LayoutContainer errorPanel = new LayoutContainer(); errorPanel.setLayout(new FitLayout()); errorPanel.add(new HTML("
" + "Ops! There were problems while retrieving your workspace!" + "
Your session expired, please try to login again ")); return errorPanel; } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#pasteEventIsCompleted() */ @Override public void pasteEventIsCompleted(boolean isTreeRefreshable, String parentId) { if(isTreeRefreshable){ wsPortlet.getGridGroupContainer().unmask(); }else{ //FORCE GRID REFRESH FileModel lastBreadCrumb = wsPortlet.getToolBarPath().getLastParent(); GWT.log("PasteEventIsCompleted tree is not refreshable"); if(lastBreadCrumb!=null){ GWT.log("Comparing breadcrumb id: "+lastBreadCrumb.getIdentifier() + " and parent id: "+parentId); if(lastBreadCrumb.getIdentifier().compareToIgnoreCase(parentId)==0){ eventBus.fireEvent(new GridRefreshEvent()); } } } // Info.display("Info", "paste submitting..."); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activePasteButton(false); } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#copyEventIsCompleted() */ @Override public void copyEventIsCompleted() { wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemFunctionalities().activePasteButton(true); } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#updatedVREPermissions(java.lang.String) */ @Override public void updatedVREPermissions(String vreFolderId) { GxtBreadcrumbPathPanel breadCrumb = this.wsPortlet.getToolBarPath(); FileModel parent = breadCrumb.getLastParent(); if(parent!=null) GWT.log("UpdatedVREPermissions comparing "+vreFolderId +" and "+parent.getIdentifier()); //IF VRE FOLDER (UPDATED) IS CURRENT BREADCRUMB DISPLAING -> UPDATE if(vreFolderId!=null && parent!=null && vreFolderId.compareToIgnoreCase(parent.getIdentifier())==0){ setACLInfo(vreFolderId); } } /** * * @param operation * @param trashItemId */ private void executeTrashOperation(final WorkspaceTrashOperation operation, List trashItemIds){ GWT.log("Executing trash operation: "+operation); if(operation==null) return; switch (operation) { case SHOW: WindowTrash.getInstance().show(); break; case DELETE_PERMANENTLY: case RESTORE:{ if(trashItemIds==null || trashItemIds.isEmpty()) return; WindowTrash.getInstance().maskContainer("Updating Trash"); List trashIds = new ArrayList(trashItemIds.size()); for (FileModel fileModel : trashItemIds) { trashIds.add(fileModel.getIdentifier()); } AppControllerExplorer.rpcWorkspaceService.executeOperationOnTrash(trashIds, operation, new AsyncCallback() { @Override public void onFailure(Throwable arg0) { WindowTrash.getInstance().unmaskContainer(); } @Override public void onSuccess(TrashOperationContent operationResult) { WindowTrash.getInstance().executeOperationOnTrashContainer(operationResult.getListTrashIds(), operationResult.getOperation()); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemDetails().updateTrashIcon(WindowTrash.getInstance().getTrashedFiles().size()>0); //SHOW POSSIBLY ERRORS WindowTrash.getInstance().showTrashErrors(operation, operationResult.getListErrors()); if(operation.equals(WorkspaceTrashOperation.RESTORE)){ appContrExplorer.refreshRoot(true); } WindowTrash.getInstance().unmaskContainer(); } }); break; } default:{ WindowTrash.getInstance().maskContainer("Updating Trash"); AppControllerExplorer.rpcWorkspaceService.updateTrashContent(operation, new AsyncCallback() { @Override public void onFailure(Throwable arg0) { WindowTrash.getInstance().unmaskContainer(); } @Override public void onSuccess(TrashContent operationResult) { WindowTrash.getInstance().updateTrashContainer(operationResult.getTrashContent()); wsPortlet.getGxtCardLayoutResultPanel().getToolBarItemDetails().updateTrashIcon(operationResult.getTrashContent().size()>0); //SHOW POSSIBLY ERRORS WindowTrash.getInstance().showTrashErrors(operation, operationResult.getListErrors()); if(operation.equals(WorkspaceTrashOperation.RESTORE_ALL)){ appContrExplorer.refreshRoot(true); } WindowTrash.getInstance().unmaskContainer(); } }); break; } } } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#trashEvent(org.gcube.portlets.user.workspace.shared.WorkspaceTrashOperation, java.util.List) */ @Override public void trashEvent(WorkspaceTrashOperation trashOperation, List targetFileModels) { executeTrashOperation(trashOperation, targetFileModels); } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#changedFileModelId(java.lang.String, java.lang.String) */ @Override public void changedFileModelId(String oldId, String newId) { } private void setVisibleUserQuote(boolean bool){ htmlWorkspaceSize.setVisible(bool); } /* (non-Javadoc) * @see org.gcube.portlets.user.workspace.client.interfaces.SubscriberInterface#updateWorksapaceSize() */ @Override public void updateWorksapaceSize(boolean delayCall) { Timer t = new Timer() { @Override public void run() { AppControllerExplorer.rpcWorkspaceService.getUserWorkspaceQuote(new AsyncCallback() { @Override public void onFailure(Throwable arg0) { GWT.log("Failed get worskpace quote as", arg0); setVisibleUserQuote(false); } @Override public void onSuccess(WorkspaceUserQuote wsquote) { if(wsquote==null) setVisibleUserQuote(false); else{ GWT.log("Updating worskpace quote as: "+wsquote); setWorkspaceUserQuotes(wsquote.getDiskSpaceFormatted(), wsquote.getTotalItems()); } } }); } }; if(delayCall) t.schedule(3000); //UPDATING RUN AFTER THREE SECOND else t.run(); } }