From a6690e4f5c99ff669f71e0e34deeae2e701ab933 Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Tue, 21 Jan 2014 13:55:19 +0000 Subject: [PATCH] Fixed enhancements: Workspace: integration of Progress Bar Widget for File Uploads git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@90305 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 9 +- .../user/workspace/WorkspaceTree.gwt.xml | 4 + .../client/AppControllerExplorer.java | 1762 +++++++++-------- .../workspace/client/ConstantsExplorer.java | 1 + .../client/view/windows/DialogUpload.java | 2 +- .../client/view/windows/FileUploader.java | 93 + .../view/windows/UpdateServiceUploader.java | 166 ++ .../workspace/server/LocalUploadServlet.java | 474 +++++ .../user/workspace/server/UploadServlet.java | 2 +- .../user/workspace/server/util/WsUtil.java | 4 +- 10 files changed, 1678 insertions(+), 839 deletions(-) create mode 100644 src/main/java/org/gcube/portlets/user/workspace/client/view/windows/FileUploader.java create mode 100644 src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java create mode 100644 src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java diff --git a/pom.xml b/pom.xml index 3e19c3c..eead231 100644 --- a/pom.xml +++ b/pom.xml @@ -137,6 +137,13 @@ provided + + + org.gcube.portlets.widgets + fileupload-progress-bar + [1.0.0-SNAPSHOT, 2.0.0-SNAPSHOT) + + commons-fileupload commons-fileupload @@ -158,7 +165,7 @@ slf4j-api runtime - + com.liferay.portal portal-service diff --git a/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml b/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml index e2a1367..ab67650 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml +++ b/src/main/java/org/gcube/portlets/user/workspace/WorkspaceTree.gwt.xml @@ -17,7 +17,11 @@ --> + + + + diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java index 9c7b8cf..315b5e0 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java @@ -116,12 +116,13 @@ import org.gcube.portlets.user.workspace.client.view.windows.DialogGetInfo; import org.gcube.portlets.user.workspace.client.view.windows.DialogPublicLink; import org.gcube.portlets.user.workspace.client.view.windows.DialogShareLink; import org.gcube.portlets.user.workspace.client.view.windows.DialogText; -import org.gcube.portlets.user.workspace.client.view.windows.DialogUpload; import org.gcube.portlets.user.workspace.client.view.windows.DialogWebDavUrl; +import org.gcube.portlets.user.workspace.client.view.windows.FileUploader; import org.gcube.portlets.user.workspace.client.view.windows.InfoDisplay; 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.UpdateServiceUploader; import org.gcube.portlets.user.workspace.client.view.windows.WindowImagePreview; import org.gcube.portlets.user.workspace.client.view.windows.WindowOpenUrl; import org.gcube.portlets.user.workspace.client.view.windows.accounting.WindowAccountingInfo; @@ -132,6 +133,11 @@ import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTI import org.gcube.portlets.user.workspace.client.workspace.folder.item.gcube.GWTUrlDocument; import org.gcube.portlets.user.workspace.shared.SessionExpiredException; import org.gcube.portlets.user.workspace.shared.accounting.GxtAccountingField; +import org.gcube.portlets.widgets.fileupload.client.events.FileUploadCompleteEvent; +import org.gcube.portlets.widgets.fileupload.client.events.FileUploadCompleteEventHandler; +import org.gcube.portlets.widgets.fileupload.client.events.FileUploadSelectedEvent; +import org.gcube.portlets.widgets.fileupload.client.events.FileUploadSelectedEventHandler; +import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressDialog; import com.extjs.gxt.ui.client.Registry; import com.extjs.gxt.ui.client.event.BaseEvent; @@ -145,6 +151,7 @@ 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; @@ -155,19 +162,20 @@ import com.google.gwt.user.client.ui.HasWidgets; */ public class AppControllerExplorer implements EventHandler, TreeAppControllerInterface{ - + 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 HashMap> subscribers = null; + private boolean selectRootItem; - + private FileUploader fileUploader; + public AppControllerExplorer() { Registry.register(ConstantsExplorer.RPC_WORKSPACE_SERVICE, rpcWorkspaceService); subscribers = new HashMap>(); bind(); - + } public AppControllerExplorer getInstance() { @@ -177,200 +185,200 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt public static HandlerManager getEventBus() { return eventBus; } - + public GWTWorkspaceServiceAsync getRpcWorkspaceService() { return rpcWorkspaceService; } private void bind() { - + eventBus.addHandler(RenderForm.TYPE, new RenderFormEventHandler() { @Override public void onRenderForm(RenderForm event) { - - + + } }); - + 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() { - + 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) { - - // eventBus.fireEvent(new DeleteItemEvent(sel)); - + + // eventBus.fireEvent(new DeleteItemEvent(sel)); + //IF NOT CANCELLED String clickedButton = be.getButtonClicked().getItemId(); if(clickedButton.equals(Dialog.YES)){ - + rpcWorkspaceService.unSharedFolderByFolderSharedId(folderIdentification, 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.getAsycTreePanel().removeAllAndRecoveryRoot(); } - + @Override public void onSuccess(Boolean result) { if(result) //REFRESH PARENT FOLDER eventBus.fireEvent(new RefreshFolderEvent(source.getParentFileModel(), true, false, false)); - + } }); } } - }); + }); } - + } }); - + eventBus.addHandler(TrashEvent.TYPE, new TrashEventHandler() { - + @Override public void onTrashEvent(TrashEvent trashEvent) { - + notifySubscriber(trashEvent); } }); - + eventBus.addHandler(GetInfoEvent.TYPE, new GetInfoEventHandler() { - + @Override public void onGetInfo(GetInfoEvent getInfoEvent) { new DialogGetInfo(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; - + if(parentFileModel==null){ //PARENT IS ROOT parent = explorerPanel.getAsycTreePanel().getRootItem(); sourceFileModel.setParentFileModel(parent); } - + if(sourceFileModel.isDirectory()){ - // explorerPanel.getAsycTreePanel().setExpandTreeLevel(sourceFileModel.getIdentifier(), true); + // explorerPanel.getAsycTreePanel().setExpandTreeLevel(sourceFileModel.getIdentifier(), true); parentDirectoryName = sourceFileModel.getName(); parent = sourceFileModel; } else{ parentDirectoryName = parentFileModel.getName(); - + } - + if(isNewFolder) dialogSharedFolder = new DialogShareFolder(parentDirectoryName,eventBus); else dialogSharedFolder = new DialogShareFolder(parentDirectoryName, sourceFileModel, eventBus); - - + + 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("FileModel id "+fileModel.getIdentifier() + " name: "+fileModel.getName() + " parent " + fileModel.getParentFileModel()); + // for(InfoContactModel contact:finalDialog.getSharedListUsers() ){ + // System.out.println("Share with Contact "+contact) ; + // + // } + Info.display("Info", "An operation of sharing was submitted"); explorerPanel.mask("Submitting operation"); - + rpcWorkspaceService.shareFolder(fileModel, finalDialog.getSharedListUsers(), isNewFolder, 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(); } - + @Override public void onSuccess(Boolean result) { if(result){ FileModel parentToRefresh=null; - + if(isNewFolder) parentToRefresh = parentModel; else parentToRefresh = parentFileModel; - + eventBus.fireEvent(new RefreshFolderEvent(parentToRefresh, true, false, false)); GWT.log("share completed refresh folder : "+parentModel.getName()); } @@ -378,51 +386,51 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } }); } - - } - }); - - } + + } + }); + + } 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(WebDavUrlEvent.TYPE, new WebDavUrlEventHandler() { - + @Override public void onClickWebDavUrl(WebDavUrlEvent webDavUrlEvent) { - + String itemIdentifier = webDavUrlEvent.getItemIdentifier(); if(itemIdentifier==null) itemIdentifier = explorerPanel.getAsycTreePanel().getRootItem().getIdentifier(); - + rpcWorkspaceService.getUrlWebDav(itemIdentifier, new AsyncCallback() { @Override @@ -432,74 +440,74 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @Override public void onSuccess(String url) { -// new MessageBoxInfo(ConstantsExplorer.URL_WEBDAV, url); + // new MessageBoxInfo(ConstantsExplorer.URL_WEBDAV, url); DialogWebDavUrl diag = new DialogWebDavUrl(ConstantsExplorer.URL_WEBDAV +": "+ ConstantsExplorer.TITLEACCESSWEBDAV, "", url); diag.selectTxt(); - + } - + }); - - } - + + } + }); - + eventBus.addHandler(DeleteBulkEvent.TYPE, new DeleteBulkEventHandler() { - + @Override public void onDeleteBulk(final DeleteBulkEvent deleteBulkEvent) { - + rpcWorkspaceService.deleteBulk(deleteBulkEvent.getBulkId(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR+ "deleting bulk "+ ConstantsExplorer.TRY_AGAIN, null); - + } @Override public void onSuccess(Boolean result) { if(result) BulkCreatorWindow.getInstance().removeProgress(deleteBulkEvent.getBulkId()); - - + + } - + }); - + } }); - - + + 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(); + + // 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_OPEARATION_PARAMETER+"="+WsPortletInitOperation.gotofolder; - - - + + + DialogShareLink dialog = new DialogShareLink("Copy to clipboard Share Link: Ctrl+C", shareLinkUrl); dialog.show(); } } }); - - + + eventBus.addHandler(GetPublicLinkEvent.TYPE, new GetPublicLinkEventHandler() { - + @Override public void onGetPublicLink(GetPublicLinkEvent getPublicLinkEvent) { // TODO Auto-generated method stub @@ -510,14 +518,14 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } }); - + eventBus.addHandler(RefreshFolderEvent.TYPE, new RefreshItemEventHandler() { - + @Override public void onRefreshItem(RefreshFolderEvent refreshItemEvent) { - + if(refreshItemEvent.getFolderTarget()!=null){ - + if(!refreshItemEvent.isIfExists()){ //CAlled Tree side explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder(refreshItemEvent.getFolderTarget().getIdentifier(), refreshItemEvent.isExpandFolder()); notifySubscriber(refreshItemEvent); @@ -527,43 +535,43 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt if(target!=null) explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder(refreshItemEvent.getFolderTarget().getIdentifier(), refreshItemEvent.isExpandFolder()); } -// notifySubscriber(refreshtemEvent); + // notifySubscriber(refreshtemEvent); } 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.getTargetFileModel(), openContextMenuTreeEvent.getClientX(), openContextMenuTreeEvent.getClientY()); + explorerPanel.getAsycTreePanel().getContextMenuTree().openContextMenuOnItem(openContextMenuTreeEvent.getTargetFileModel(), openContextMenuTreeEvent.getClientX(), openContextMenuTreeEvent.getClientY()); } }); - - + + eventBus.addHandler(BulkCreatorEvent.TYPE, new BulkCreatorEventHandler() { - + @Override public void onBulkCreator(BulkCreatorEvent bulkCreatorEvent) { - + boolean isLoading = BulkCreatorWindow.getInstance().addProgressBar(bulkCreatorEvent.getListBulks()); explorerPanel.setLoadingBulk(isLoading); - - + + } }); - + eventBus.addHandler(CopytemEvent.TYPE, new CopytemEventHandler() { - + @Override public void onCopyItem(CopytemEvent copytemEvent) { notifySubscriber(copytemEvent); @@ -571,83 +579,83 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt }); eventBus.addHandler(PasteItemEvent.TYPE, new PasteItemEventHandler() { - + @Override public void onCopyAndPaste(PasteItemEvent pasteItemEvent) { - + GWT.log("PasteItemEvent is fired on itemId: "+pasteItemEvent.getItemId()+", DestinationId: "+pasteItemEvent.getFolderDestinationId()); doCopyAndPaste(pasteItemEvent); - + } private void doCopyAndPaste(final PasteItemEvent pasteItemEvent) { - - + + rpcWorkspaceService.copyItem(pasteItemEvent.getItemId(), pasteItemEvent.getFolderDestinationId(), 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); - + } @Override public void onSuccess(Boolean result) { - + if(result) eventBus.fireEvent(new RefreshFolderEvent(explorerPanel.getAsycTreePanel().getFileModelByIdentifier(pasteItemEvent.getFolderDestinationId()), false, true, false)); - + notifySubscriber(pasteItemEvent); } - + }); - + } }); - + eventBus.addHandler(DeleteMessageEvent.TYPE, new DeleteMessageEventHandler() { - + @Override public void onDeleteMessage(DeleteMessageEvent deleteMessageEvent) { doDeleteMessage(deleteMessageEvent); - + } private void doDeleteMessage(final DeleteMessageEvent deleteMessageEvent) { - + rpcWorkspaceService.deleteMessage(deleteMessageEvent.getMessageTarget().getId(), deleteMessageEvent.getMessageTarget().getMessageType(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR +" deleting message. " + ConstantsExplorer.TRY_AGAIN, null); - + } @Override public void onSuccess(Boolean result) { if(result) notifySubscriber(deleteMessageEvent); - + } }); - - + + } }); - + eventBus.addHandler(SaveAttachmentsEvent.TYPE, new SaveAttachmentsEventHandler() { - + @Override public void onSaveAttachments(SaveAttachmentsEvent saveAttachmentsEvent) { - + final InfoDisplay saving = new InfoDisplay("Info","saving in progress..."); rpcWorkspaceService.saveAttachments(saveAttachmentsEvent.getMessageIdentifier(), saveAttachmentsEvent.getMessageType(), new AsyncCallback() { @@ -655,15 +663,15 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR +" saving attachments. " + ConstantsExplorer.TRY_AGAIN, null); - + } @Override public void onSuccess(Boolean result) { - + if(saving.isAttached()) saving.hide(); - + if(result){ new InfoDisplay("Info","Message attachments has been saved"); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); @@ -672,135 +680,135 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt }); } }); - - - + + + eventBus.addHandler(PreviewMessageEvent.TYPE, new PreviewMessageEventHandler() { - + @Override public void onPreviewMessage(PreviewMessageEvent previewMessageEvent) { doPreviewMessage(previewMessageEvent); - + } private void doPreviewMessage(final PreviewMessageEvent previewMessageEvent) { - + rpcWorkspaceService.getMessageById(previewMessageEvent.getMessageIdentifier(), previewMessageEvent.getMessageType(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " opening message." + ConstantsExplorer.TRY_AGAIN, null); - + } @Override public void onSuccess(MessageModel message) { - -// String headerTitle = ConstantsExplorer.MESSAGE_SENT_IN_DATE +": " +message.getDate() + " by "+ message.getFromLogin(); -// new SendMessage(result.getId(), headerTitle, result.getSubject(), result.getTextMessage(), result.getListAttachments(), result.getListContactsToString()); - + + // String headerTitle = ConstantsExplorer.MESSAGE_SENT_IN_DATE +": " +message.getDate() + " by "+ message.getFromLogin(); + // new SendMessage(result.getId(), headerTitle, result.getSubject(), result.getTextMessage(), result.getListAttachments(), result.getListContactsToString()); + previewMessageEvent.setMessage(message); notifySubscriber(previewMessageEvent); - + } }); - + } }); - - - + + + eventBus.addHandler(OpenMessageEvent.TYPE, new OpenMessageEventHandler() { - + @Override public void onOpenMessage(OpenMessageEvent openMessageEvent) { doOpenMessage(openMessageEvent); - + } private void doOpenMessage(final OpenMessageEvent openMessageEvent) { - + rpcWorkspaceService.getMessageById(openMessageEvent.getMessageIdentifier(), openMessageEvent.getMessageType(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " opening message. " +ConstantsExplorer.TRY_AGAIN, null); - + } @Override public void onSuccess(MessageModel result) { //Commented for Massi -// if(openMessageEvent.getOpenType().equals(OpenType.REPLY)) -//// new SendMessage(result, MessageOperationType.OPEN); //OPEN MESSAGE -//// notifySubscriber(openMessageEvent); -// else{ -// openMessageEvent.setMessage(result); -//// notifySubscriber(openMessageEvent); -//// new SendMessage(result, MessageOperationType.FORWARD); -// } - + // if(openMessageEvent.getOpenType().equals(OpenType.REPLY)) + //// new SendMessage(result, MessageOperationType.OPEN); //OPEN MESSAGE + //// notifySubscriber(openMessageEvent); + // else{ + // openMessageEvent.setMessage(result); + //// notifySubscriber(openMessageEvent); + //// new SendMessage(result, MessageOperationType.FORWARD); + // } + openMessageEvent.setMessage(result); //This fill item text and list contact notifySubscriber(openMessageEvent); } }); - - - + + + } }); - + eventBus.addHandler(SwitchViewEvent.TYPE, new SwitchViewEventHandler() { - + @Override public void onSwitchView(SwitchViewEvent switchViewEvent) { notifySubscriber(switchViewEvent); } }); - - - + + + eventBus.addHandler(SendMessageEvent.TYPE, new SendMessageEventHandler() { - + @Override public void onSendMessage(SendMessageEvent sendMessageEvent) { notifySubscriber(sendMessageEvent); } }); - - + + eventBus.addHandler(FilterScopeEvent.TYPE, new FilterScopeEventHandler() { @Override public void onClickScopeFilter(FilterScopeEvent filterScopeEvent) { - + explorerPanel.getAsycTreePanel().setSearch(false); //SET IS SEARCH FALSE - + doChangeScope(filterScopeEvent.getScopeId()); - - + + } private void doChangeScope(String scopeId) { - + explorerPanel.getAsycTreePanel().loadRootItem(scopeId,selectRootItem); // RELOAD ROOT BY SCOPE explorerPanel.getSmartFolderPanel().reloadPanelSmartFolder(); //RELOAD SMART FOLDER - + } }); - + 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); @@ -811,90 +819,90 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt 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){ -// if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ -// if(fileDownloadEvent.getItemName()!= null) -// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", fileDownloadEvent.getItemName(), ""); -// } -// else -// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier(), "_self", ""); -// - + // if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ + // if(fileDownloadEvent.getItemName()!= null) + // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", fileDownloadEvent.getItemName(), ""); + // } + // else + // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier(), "_self", ""); + // + if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ if(fileDownloadEvent.getItemName()!= null){ try { new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET, ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE, "id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", "_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(), ""); + // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier()+"&viewContent=true", fileDownloadEvent.getItemName(), ""); } else{ - + try { new RequestBuilderWorkspaceValidateItem(RequestBuilder.GET,ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE, "id="+fileDownloadEvent.getItemIdentifier(), "_self", downloadHandlerCallback); } catch (Exception e) { @@ -903,38 +911,39 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } } -// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier(), "_self", ""); - -// if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ -// if(fileDownloadEvent.getItemName()!= null){ -// -// new DialogDownload(fileDownloadEvent.getItemName(), "_blank", fileDownloadEvent.getItemIdentifier(), true).submitForm(); -// } -// -// }else{ -// -// new DialogDownload("", "_self", fileDownloadEvent.getItemIdentifier(), false).submitForm(); -// } -// - - + // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileDownloadEvent.getItemIdentifier(), "_self", ""); + + // if(fileDownloadEvent.getDownloadType().equals(DownloadType.SHOW)){ + // if(fileDownloadEvent.getItemName()!= null){ + // + // new DialogDownload(fileDownloadEvent.getItemName(), "_blank", fileDownloadEvent.getItemIdentifier(), true).submitForm(); + // } + // + // }else{ + // + // new DialogDownload("", "_self", fileDownloadEvent.getItemIdentifier(), false).submitForm(); + // } + // + + markItemInTreeAsRead(fileDownloadEvent.getItemIdentifier(), true); - -// FileModel file = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(fileDownloadEvent.getItemIdentifier()); -// -// if(file!=null){ //FILE CAN NOT LOADED IN TREE -// file.setMarkAsRead(true); -// } - + + // FileModel file = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(fileDownloadEvent.getItemIdentifier()); + // + // if(file!=null){ //FILE CAN NOT LOADED IN TREE + // file.setMarkAsRead(true); + // } + notifySubscriber(fileDownloadEvent); } - + } }); - - + + + eventBus.addHandler(FileUploadEvent.TYPE, new FileUploadEventHandler() { - + @Override public void onFileUploadEvent(FileUploadEvent fileUploadEvent) { doFileUploadEvent(fileUploadEvent); @@ -942,144 +951,229 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt private void doFileUploadEvent(FileUploadEvent fileUploadEvent) { FileModel folder = fileUploadEvent.getTargetFolderModel(); - + if(folder == null) folder = explorerPanel.getAsycTreePanel().getRootItem(); -// folder = getSelectedFolderInTree(); - if(fileUploadEvent.getUploadTypeToString().equals(UploadType.ARCHIVE.toString())) - new DialogUpload(ConstantsExplorer.ARCHIVEUPLOADHEADER, folder.getName(), folder, ConstantsExplorer.ARCHIVE); + if(fileUploadEvent.getUploadTypeToString().equals(UploadType.ARCHIVE.toString())){ +// new DialogUpload(ConstantsExplorer.ARCHIVEUPLOADHEADER, folder.getName(), folder, ConstantsExplorer.ARCHIVE); + fileUploader = new FileUploader(eventBus, folder, ConstantsExplorer.ARCHIVE); + } else - new DialogUpload(ConstantsExplorer.FILEUPLOADHEADER, folder.getName(), folder, ConstantsExplorer.FILE); + fileUploader = new FileUploader(eventBus, folder, ConstantsExplorer.FILE); -// notifySubscriber(fileUploadEvent); +// new DialogUpload(ConstantsExplorer.FILEUPLOADHEADER, folder.getName(), folder, ConstantsExplorer.FILE); + +// if(fileUploadEvent.getUploadTypeToString().equals(UploadType.ARCHIVE.toString())) +// new DialogUpload(ConstantsExplorer.ARCHIVEUPLOADHEADER, folder.getName(), folder, ConstantsExplorer.ARCHIVE); +// else +// new DialogUpload(ConstantsExplorer.FILEUPLOADHEADER, folder.getName(), folder, ConstantsExplorer.FILE); + } }); + eventBus.addHandler(FileUploadSelectedEvent.TYPE, new FileUploadSelectedEventHandler() { + + @Override + public void onFileSelected(FileUploadSelectedEvent event) { + String fileName = event.getSelectedFileName(); + GWT.log("selected file name: " + fileName); + + try { + + String normalizedFileName = fileName; + +// com.google.gwt.user.client.Window.alert("fileUploadField.getValue() "+fileUploadField.getValue()); + if (normalizedFileName.contains("\\")) { + normalizedFileName = normalizedFileName.substring(normalizedFileName.lastIndexOf("\\")+1); //remove C:\fakepath\ if exists +// com.google.gwt.user.client.Window.alert("normalizedFileName= "+normalizedFileName); + } + + final String label = normalizedFileName; + + GWT.log("normalizedFileName file name: "+normalizedFileName); + + AppControllerExplorer.rpcWorkspaceService.itemExistsInWorkpaceFolder(fileUploader.getFolderParent().getIdentifier(), normalizedFileName, new AsyncCallback() { + + @Override + public void onSuccess(final String itemId) { + + if(itemId!=null){ + + boolean result = Window.confirm(label + " exists in folder "+fileUploader.getFolderParent().getName() + ". Overwrite?"); + + if(result){ + + fileUploader.overwrite(); + fileUploader.submitForm(); + } + + }else + fileUploader.submitForm(); //ITEM does NOT EXIST SO SUBMIT FORM; + + } + + + + @Override + public void onFailure(Throwable caught) { + Info.display("Error", "Sorry an error occurred on the server "+caught.getLocalizedMessage() + ". Please try again later"); + caught.printStackTrace(); + } + + }); + + } catch (Exception e) { + Info.display("Error", "Sorry an error occurred on the server "+e.getLocalizedMessage() + ". Please try again later"); + e.printStackTrace(); + } + + + } + }); + + /** + * get the uploaded file result + */ + eventBus.addHandler(FileUploadCompleteEvent.TYPE, new FileUploadCompleteEventHandler() { + + @Override + public void onUploadComplete(FileUploadCompleteEvent event) { + + //the filename and its path on server are returned to the client + String fileName = event.getUploadedFileInfo().getFilename(); + String absolutePathOnServer = event.getUploadedFileInfo().getAbsolutePath(); + GWT.log(fileName + " uploaded on Server here: " + absolutePathOnServer); + + fileUploader.submitServletForm(absolutePathOnServer); + } + }); + + eventBus.addHandler(CompletedFileUploadEvent.TYPE, new CompletedFileUploadEventHandler() { - + @Override public void onCompletedFileUploadEvent(CompletedFileUploadEvent completedFileUploadEvent) { doCompletedFileUploadEvent(completedFileUploadEvent); } private void doCompletedFileUploadEvent(CompletedFileUploadEvent completedFileUploadEvent) { - -// explorerPanel.getAsycTreePanel().reloadAndSelectTreeLevelFromWorkspaceForUplaod(completedFileUploadEvent.getParentFileModel().getIdentifier()); + + // explorerPanel.getAsycTreePanel().reloadAndSelectTreeLevelFromWorkspaceForUplaod(completedFileUploadEvent.getParentFileModel().getIdentifier()); boolean isLevelExpanded = treeLevelIsExpanded(completedFileUploadEvent.getTargetFolderModel().getIdentifier()); //REFRESH TREE ONLY IF FOLDER PARENT EXISTS IN TREE if(explorerPanel.getAsycTreePanel().getFileModelByIdentifier(completedFileUploadEvent.getTargetFolderModel().getIdentifier())!=null){ explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder(completedFileUploadEvent.getTargetFolderModel().getIdentifier(), isLevelExpanded); } - + notifySubscriber(completedFileUploadEvent); - + } }); - - + + eventBus.addHandler(DeleteSmartFolderEvent.TYPE, new DeleteSmartFolderEventHandler() { - + @Override public void onDeleteItem(DeleteSmartFolderEvent deleteSmartFolderEvent) { doDeleteSmartFolder(deleteSmartFolderEvent); - + } private void doDeleteSmartFolder(DeleteSmartFolderEvent deleteSmartFolderEvent) { final String smartIdentifier = deleteSmartFolderEvent.getSmartIdentifier(); final String smartName = deleteSmartFolderEvent.getSmartName(); - MessageBoxConfirm mbc = new MessageBoxConfirm(ConstantsExplorer.MESSAGE_DELETE, ConstantsExplorer.MESSAGE_CONFIRM_DELETE_SMART_FOLDER + " "+ smartName +"?"); + MessageBoxConfirm mbc = new MessageBoxConfirm(ConstantsExplorer.MESSAGE_DELETE, ConstantsExplorer.MESSAGE_CONFIRM_DELETE_SMART_FOLDER + " "+ smartName +"?"); 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)){ - - rpcWorkspaceService.removeSmartFolder(smartIdentifier, smartName, new AsyncCallback() { - + + public void handleEvent(MessageBoxEvent be) { + + // eventBus.fireEvent(new DeleteItemEvent(sel)); + + //IF NOT CANCELLED + String clickedButton = be.getButtonClicked().getItemId(); + if(clickedButton.equals(Dialog.YES)){ + + rpcWorkspaceService.removeSmartFolder(smartIdentifier, smartName, new AsyncCallback() { + @Override public void onSuccess(Boolean result) { if(result) explorerPanel.getSmartFolderPanel().removeSmartFolder(smartIdentifier); } - + @Override public void onFailure(Throwable caught) { -// explorerPanel.getAsycTreePanel().unmask(); + // explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " deleting smart folder.", null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); - + } }); - - } - } - }); + + } + } + }); } }); - - + + eventBus.addHandler(AddSmartFolderEvent.TYPE, new AddSmartFolderEventHandler() { - - + + @Override public void onSaveSmartFolder(AddSmartFolderEvent saveSmartFolderEvent) { doSaveSmartFolder(saveSmartFolderEvent); - - + + } private void doSaveSmartFolder(final AddSmartFolderEvent saveSmartFolderEvent) { - + final String query = saveSmartFolderEvent.getSearchText(); - - + + final DialogAddFolderAndSmart dialogAddSmartFolder = new DialogAddFolderAndSmart("", AddType.SMARTFOLDER); - + dialogAddSmartFolder.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { - + if(dialogAddSmartFolder.isValidForm()) - + rpcWorkspaceService.createSmartFolder(dialogAddSmartFolder.getName(), dialogAddSmartFolder.getDescription(), query, new AsyncCallback() { - + @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " saving smart folder.", null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); - + } @Override public void onSuccess(SmartFolderModel smart) { - + System.out.println("In client: " + smart.getIdentifier()); - + explorerPanel.getShortuctsPanel().loadSmartFolder(smart); } - + }); } - - + + }); } }); - + eventBus.addHandler(SmartFolderSelectedEvent.TYPE, new SmartFolderSelectedEventHandler() { - + @Override public void onSmartFolderSelected(SmartFolderSelectedEvent smartFolderSelectedEvent) { searching(true); @@ -1092,168 +1186,168 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt 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()); - - dgt.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { + final DialogText dgt = new DialogText(ConstantsExplorer.MESSAGE_RENAME, ConstantsExplorer.MESSAGE_ITEM_NAME, event.getFileTarget().getName()); + + dgt.getButtonById(Dialog.OK).addListener(Events.Select, new Listener() { @Override public void handleEvent(BaseEvent be) { final String newName = dgt.getTxtValue(); - + if(dgt.isValidForm()){ - + rpcWorkspaceService.renameItem(target.getIdentifier(), newName, target.getName(), 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) { explorerPanel.getAsycTreePanel().renameItem(target.getIdentifier(), newName, null); event.setNewName(newName); -// event.setExtension(extension); + // event.setExtension(extension); 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) { - -// eventBus.fireEvent(new DeleteItemEvent(sel)); - - //IF NOT CANCELLED - String clickedButton = be.getButtonClicked().getItemId(); - if(clickedButton.equals(Dialog.YES)){ - - rpcWorkspaceService.removeItem(event.getFileTarget().getIdentifier(), new AsyncCallback(){ + + 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) { + + // eventBus.fireEvent(new DeleteItemEvent(sel)); + + //IF NOT CANCELLED + String clickedButton = be.getButtonClicked().getItemId(); + if(clickedButton.equals(Dialog.YES)){ + + rpcWorkspaceService.removeItem(event.getFileTarget().getIdentifier(), new AsyncCallback(){ @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", caught.getMessage(), null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); - + } @Override public void onSuccess(Boolean result) { - + //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); - } - }; + public void run() { - // Schedule the timer to run after 250 ms. + FileModel fileModel = event.getFileTarget(); + if(explorerPanel.getAsycTreePanel().deleteItem(fileModel.getIdentifier())){ + explorerPanel.getAsycTreePanel().selectItem(fileModel.getParentFileModel().getIdentifier()); //Select parent of item deleted + } + + notifySubscriber(event); + } + }; + + // 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 @@ -1262,10 +1356,10 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } private void doAddItem(final AddFolderEvent event) { - + final FileModel sourceFileModel = event.getFileSourceModel(); final FileModel parentFileModel= event.getParentFileModel(); - + String directory = null; if(sourceFileModel.isDirectory()){ @@ -1276,88 +1370,88 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt 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()){ -// - + // + //TODO REMOVE -// System.out.println("description folder: "+dialogAddFolder.getDescription()); - + // System.out.println("description folder: "+dialogAddFolder.getDescription()); + rpcWorkspaceService.createFolder(dialogAddFolder.getName(), dialogAddFolder.getDescription(), sourceFileModel, new AsyncCallback(){ @Override public void onFailure(Throwable caught) { explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR +" adding item. " + ConstantsExplorer.TRY_AGAIN, null); -// explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); + // explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); } @Override public void onSuccess(FolderModel child) { - - explorerPanel.getAsycTreePanel().addItem(sourceFileModel.getIdentifier(), child, false); - event.setNewFolder(child); - notifySubscriber(event); + + 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", ConstantsExplorer.SERVER_ERROR + " creating folder." + ConstantsExplorer.TRY_AGAIN, null); -// explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); - + // explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); + } @Override public void onSuccess(FolderModel child) { - - explorerPanel.getAsycTreePanel().addItem(parentFileModel.getIdentifier(), child, false); - event.setNewFolder(child); - notifySubscriber(event); + + explorerPanel.getAsycTreePanel().addItem(parentFileModel.getIdentifier(), child, false); + event.setNewFolder(child); + notifySubscriber(event); } - + }); } } - + } }); - + } }); - - + + eventBus.addHandler(MoveItemEvent.TYPE, new MoveItemEventHandler() { - + @Override public void onMoveItem(final MoveItemEvent event) { - + rpcWorkspaceService.moveItem(event.getFileSourceModel().getIdentifier(), event.getTargetParentFileModel().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", caught.getMessage()+"." , null); System.out.println(caught.getMessage()); explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder(event.getTargetParentFileModel().getIdentifier(), false); @@ -1370,43 +1464,43 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt explorerPanel.getAsycTreePanel().reloadTreeLevelAndExpandFolder(event.getTargetParentFileModel().getIdentifier(), true); notifySubscriber(event); - -// explorerPanel.getAsycTreePanel().setExpandTreeLevel(event.getTargetParentFileModel(), true); //Expand level drop + + // explorerPanel.getAsycTreePanel().setExpandTreeLevel(event.getTargetParentFileModel(), true); //Expand level drop } } }); - + } }); - + eventBus.addHandler(ImagePreviewEvent.TYPE, new ImagePreviewEventHandler() { - + @Override public void onClickPreview(ImagePreviewEvent imagePreviewEvent) { - -// System.out.println("x e y " + imagePreviewEvent.getClientX() + " e " + imagePreviewEvent.getClientY()); - + + // System.out.println("x e y " + imagePreviewEvent.getClientX() + " e " + imagePreviewEvent.getClientY()); + 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 - + markItemInTreeAsRead(imagePreviewEvent.getSourceFileModel().getIdentifier(), true); -// imagePreviewEvent.getSourceFileModel().setMarkAsRead(true); + // imagePreviewEvent.getSourceFileModel().setMarkAsRead(true); notifySubscriber(new FileDownloadEvent(imagePreviewEvent.getSourceFileModel().getIdentifier(), imagePreviewEvent.getSourceFileModel().getName(), FileDownloadEvent.DownloadType.SHOW)); } - + } 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 @@ -1414,38 +1508,38 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt explorerPanel.getAsycTreePanel().unmask(); new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " imaging preview.", null); explorerPanel.getAsycTreePanel().removeAllAndRecoveryRoot(); - + } @Override public void onSuccess(GWTWorkspaceItem item) { - + if(fileModel.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.IMAGE_DOCUMENT)) new WindowImagePreview(fileModel.getName(), (GWTImageDocument) item, positionX, positionY); else new WindowImagePreview(fileModel.getName(), (GWTExternalImage) item, positionX, positionY); - + } }); } }); - + eventBus.addHandler(OpenUrlEvent.TYPE, new OpenUrlEventHandler() { - + @Override public void onClickUrl(OpenUrlEvent openUrlEvent) { doClickUrl(openUrlEvent); - + } private void doClickUrl(OpenUrlEvent openUrlEvent) { - + final FileModel fileModel = openUrlEvent.getSourceFileModel(); - + if(fileModel==null) return; - + rpcWorkspaceService.getUrlById(fileModel.getIdentifier(), fileModel.getGXTFolderItemType().equals(GXTFolderItemTypeEnum.URL_DOCUMENT), false, new AsyncCallback() { @Override @@ -1453,13 +1547,13 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt 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)){ new WindowOpenUrl(((GWTUrlDocument) result).getUrl(), "_blank", ""); GWT.log("URL_DOCUMENT Open " + ((GWTUrlDocument) result).getUrl()); @@ -1468,31 +1562,31 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt new WindowOpenUrl(((GWTExternalUrl) result).getUrl(), "_blank", ""); 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(), ""); - + + // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+"?id="+fileModel.getIdentifier()+"&viewContent=true", fileModel.getName(), ""); + } }); - - + + 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 @@ -1500,21 +1594,21 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt if(dgu.isValidForm()){ explorerPanel.getAsycTreePanel().mask(ConstantsExplorer.VALIDATINGOPERATION,ConstantsExplorer.LOADINGSTYLE); - - + + rpcWorkspaceService.createExternalUrl(parent, 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().addItem(parent.getIdentifier(), child, false); explorerPanel.getAsycTreePanel().unmask(); notifySubscriber(createUrlEvent); @@ -1525,41 +1619,41 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt }); } }); - - - + + + eventBus.addHandler(OpenReportsEvent.TYPE, new OpenReportsEventHandler() { - + @Override public void onClickOpenReports(OpenReportsEvent openReportsEvent) { - + if(openReportsEvent.getSourceFileModel().getGXTFolderItemType().equals(GXTFolderItemTypeEnum.REPORT_TEMPLATE)) doClickOpenReportTemplate(openReportsEvent); else doClickOpenReport(openReportsEvent); - + } - - + + public void doClickOpenReport(OpenReportsEvent openReportsEvent) { - + rpcWorkspaceService.getURLFromApplicationProfile(openReportsEvent.getSourceFileModel().getIdentifier(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting application profile - attribute idreport", null); - + } @Override public void onSuccess(String url) { - + if(url==null || url.isEmpty()){ - + String currentUrl = portalURL(); int last = currentUrl.lastIndexOf("/"); String reportUrl = currentUrl.substring(0,last+1) + ConstantsExplorer.REPORTGENERATION; -// Log.trace("Url: "+reportUrl); + // Log.trace("Url: "+reportUrl); System.out.println("currentUrl " +currentUrl); System.out.println("reportUrl " +reportUrl); new WindowOpenUrl(reportUrl, "_self", ""); @@ -1569,210 +1663,210 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt System.out.println("reportUrl " +reportUrl); new WindowOpenUrl(reportUrl, "_self", ""); } - + } }); - + } private void doClickOpenReportTemplate(OpenReportsEvent openReportTemplateEvent) { - -// System.out.println("IDTEMPLATE " + ConstantsExplorer.IDTEMPLATE); -// System.out.println("id " +openReportTemplateEvent.getSourceFileModel().getIdentifier()); -// System.out.println("name " +openReportTemplateEvent.getSourceFileModel().getName()); - + + // System.out.println("IDTEMPLATE " + ConstantsExplorer.IDTEMPLATE); + // System.out.println("id " +openReportTemplateEvent.getSourceFileModel().getIdentifier()); + // System.out.println("name " +openReportTemplateEvent.getSourceFileModel().getName()); + rpcWorkspaceService.getURLFromApplicationProfile(openReportTemplateEvent.getSourceFileModel().getIdentifier(), new AsyncCallback() { @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting application profile - attribute idreport", null); - + } @Override public void onSuccess(String url) { - + if(url==null || url.isEmpty()){ - - + + String currentUrl = portalURL(); int last = currentUrl.lastIndexOf("/"); String templateUrl = currentUrl.substring(0,last+1) + ConstantsExplorer.TEMPLATECREATION; -// Log.trace("Url: "+templateUrl); + // Log.trace("Url: "+templateUrl); System.out.println("currentUrl " +currentUrl); System.out.println("reportUrl " +templateUrl); new WindowOpenUrl(templateUrl, "_self", ""); - - + + }else{ - + String templateUrl = url; new WindowOpenUrl(templateUrl, "_self", ""); } - + } }); } }); - + } - - + + public static native String portalURL()/*-{ return $wnd.location.href; }-*/; - + //********END EVENTS TO NOTIFY SUBSCRIBERS - + //Method Notify Subscriber - 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; - - sub.deleteItem(deleteEvent.getFileTarget().getIdentifier()); - - }else if(event instanceof SelectedItemEvent){ - - SelectedItemEvent selectedEvent = (SelectedItemEvent) event; - -// ArrayList listFileModel = getListParentsByIdentifier(selectedEvent.getFileTarget().getIdentifier()); - - 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){ - - 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.getIdSmartFolder(), 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.getTargetFolderModel()); - - }else if(event instanceof CreateUrlEvent){ - - CreateUrlEvent createUrlEvent = (CreateUrlEvent) event; - - sub.addedFile(createUrlEvent.getItemIdentifier(), createUrlEvent.getParentFileModel()); - - }else if(event instanceof MoveItemEvent){ - - MoveItemEvent moveItemEvent = (MoveItemEvent) 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()); - - }else if(event instanceof SendMessageEvent){ - - SendMessageEvent messageEvent = (SendMessageEvent) event; + public void notifySubscriber(GuiEventInterface event) + { + if (subscribers.containsKey(event.getKey())) + for (SubscriberInterface sub : subscribers.get(event.getKey())){ -// sub.updatePrevieMessage(messageEvent.getMessage().getFromLogin(), messageEvent.getMessage().getSubject(), messageEvent.getMessage().getDate(), messageEvent.getMessage().getTextMessage(), messageEvent.getMessage().getListAttachments()); - - HashMap hashFiles = new HashMap(); - - if(messageEvent.getListFileModelSelected()!=null){ - for (FileModel fileModel : messageEvent.getListFileModelSelected()) { - hashFiles.put(fileModel.getIdentifier(), fileModel.getName()); + 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; + + sub.deleteItem(deleteEvent.getFileTarget().getIdentifier()); + + }else if(event instanceof SelectedItemEvent){ + + SelectedItemEvent selectedEvent = (SelectedItemEvent) event; + + // ArrayList listFileModel = getListParentsByIdentifier(selectedEvent.getFileTarget().getIdentifier()); + + 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){ + + 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.getIdSmartFolder(), 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.getTargetFolderModel()); + + }else if(event instanceof CreateUrlEvent){ + + CreateUrlEvent createUrlEvent = (CreateUrlEvent) event; + + sub.addedFile(createUrlEvent.getItemIdentifier(), createUrlEvent.getParentFileModel()); + + }else if(event instanceof MoveItemEvent){ + + MoveItemEvent moveItemEvent = (MoveItemEvent) 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()); + + }else if(event instanceof SendMessageEvent){ + + SendMessageEvent messageEvent = (SendMessageEvent) event; + + // sub.updatePrevieMessage(messageEvent.getMessage().getFromLogin(), messageEvent.getMessage().getSubject(), messageEvent.getMessage().getDate(), messageEvent.getMessage().getTextMessage(), messageEvent.getMessage().getListAttachments()); + + HashMap hashFiles = new HashMap(); + + if(messageEvent.getListFileModelSelected()!=null){ + for (FileModel fileModel : messageEvent.getListFileModelSelected()) { + hashFiles.put(fileModel.getIdentifier(), fileModel.getName()); } - } - - sub.createNewMessage(hashFiles); - }else if(event instanceof OpenMessageEvent){ - - OpenMessageEvent messageEvent = (OpenMessageEvent) event; - - // sub.updatePrevieMessage(messageEvent.getMessage().getFromLogin(), messageEvent.getMessage().getSubject(), messageEvent.getMessage().getDate(), messageEvent.getMessage().getTextMessage(), messageEvent.getMessage().getListAttachments()); - - MessageModel message = messageEvent.getMessage(); - + } + + sub.createNewMessage(hashFiles); + }else if(event instanceof OpenMessageEvent){ + + OpenMessageEvent messageEvent = (OpenMessageEvent) event; + + // sub.updatePrevieMessage(messageEvent.getMessage().getFromLogin(), messageEvent.getMessage().getSubject(), messageEvent.getMessage().getDate(), messageEvent.getMessage().getTextMessage(), messageEvent.getMessage().getListAttachments()); + + MessageModel message = messageEvent.getMessage(); + + + }else if(event instanceof FileDownloadEvent){ + + FileDownloadEvent messageEvent = (FileDownloadEvent) event; + + sub.fileDownloaded(messageEvent.getItemIdentifier()); + + }else if(event instanceof SessionExpiredEvent){ + + sub.viewSessionExpiredPanel(); + + }else if(event instanceof PasteItemEvent){ + + sub.pasteEventIsCompleted(); + + }else if(event instanceof CopytemEvent){ + + sub.copyEventIsCompleted(); + + }else if(event instanceof TrashEvent){ + TrashEvent trashEvent = (TrashEvent) event; + sub.trashEvent(trashEvent.getTrashOperation(), trashEvent.getTargetFileModel()); + } + } + + } - }else if(event instanceof FileDownloadEvent){ - - FileDownloadEvent messageEvent = (FileDownloadEvent) event; - - sub.fileDownloaded(messageEvent.getItemIdentifier()); - - }else if(event instanceof SessionExpiredEvent){ - - sub.viewSessionExpiredPanel(); - - }else if(event instanceof PasteItemEvent){ - - sub.pasteEventIsCompleted(); - - }else if(event instanceof CopytemEvent){ - - sub.copyEventIsCompleted(); - - }else if(event instanceof TrashEvent){ - TrashEvent trashEvent = (TrashEvent) event; - sub.trashEvent(trashEvent.getTrashOperation(), trashEvent.getTargetFileModel()); - } - } - - } - /** * * @param folderId @@ -1781,53 +1875,53 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt public boolean treeLevelIsExpanded(String folderId){ return explorerPanel.getAsycTreePanel().isExpanded(folderId); } - + private List getListParents(List listParentModel, FileModel item){ - + getParents(listParentModel, item); - + Collections.reverse(listParentModel); - + return listParentModel; - + } - private void getParents(List listParents, FileModel item){ - - if(item==null || item.getParentFileModel()==null){ -// listParents.add(item); - return; - } - - listParents.add(item.getParentFileModel()); - - getParents(listParents, item.getParentFileModel()); - - } + private void getParents(List listParents, FileModel item){ + + if(item==null || item.getParentFileModel()==null){ + // listParents.add(item); + return; + } + + listParents.add(item.getParentFileModel()); + + getParents(listParents, item.getParentFileModel()); + + } public void subscribe(SubscriberInterface subscriber, EventsTypeEnum[] keys) - { - for (EventsTypeEnum m : keys) - subscribe(subscriber, m); - } + { + for (EventsTypeEnum m : keys) + subscribe(subscriber, m); + } - 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); - } - } + 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); + } + } - public void unsubscribe(SubscriberInterface subscriber, EventsTypeEnum key) - { - if (subscribers.containsKey(key)) - subscribers.get(key).remove(subscriber); - } + public void unsubscribe(SubscriberInterface subscriber, EventsTypeEnum key) + { + if (subscribers.containsKey(key)) + subscribers.get(key).remove(subscriber); + } public void go(final HasWidgets rootPanel, boolean onlyTree, boolean instancingSmartFolder, boolean instancingMessages, boolean selectRootItem) { @@ -1837,44 +1931,44 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt 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 */ public ExplorerPanel getTreePanel(){ - + this.explorerPanel = getPanel(); return this.explorerPanel; } - + /** * Instance only Async Tree with specific width - height - select by default the root item . * @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(); } - + public void hideSharingFacilities() { explorerPanel.getAsycTreePanel().getContextMenuTree().setHideSharing(); } - + /** * * @param selectRootItem @@ -1883,24 +1977,24 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt 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); - -// PollingWorkspace.pollReceivedMessages(-1, 20000); //the parameter -1 force (first) synchronization with HL - -// PollingWorkspace.pollBulkCreator(15000); - + + // PollingWorkspace.pollReceivedMessages(-1, 20000); //the parameter -1 force (first) synchronization with HL + + // PollingWorkspace.pollBulkCreator(15000); + return this.explorerPanel; } - - + + /** * Instance by default asyncronus Tree while Smart Folders and Messages was instanced as input value * @param instancingSmartFolder @@ -1908,107 +2002,107 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt * @return ExplorerPanel */ public ExplorerPanel getPanel(boolean instancingSmartFolder, boolean instancingMessages, boolean selectRootItem){ - + this.explorerPanel = new ExplorerPanel(instancingSmartFolder, instancingMessages, selectRootItem); - + this.selectRootItem=selectRootItem; - - -// if(instancingMessages) -// PollingWorkspace.pollReceivedMessages(-1, 20000); //the parameter -1 force (first) synchronization with HL - - -// PollingWorkspace.pollBulkCreator(ConstantsExplorer.TIME_BULK_CREATOR_POLLING); - + + + // if(instancingMessages) + // PollingWorkspace.pollReceivedMessages(-1, 20000); //the parameter -1 force (first) synchronization with HL + + + // PollingWorkspace.pollBulkCreator(ConstantsExplorer.TIME_BULK_CREATOR_POLLING); + return this.explorerPanel; } - - + + 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 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 pathParentsList = (ArrayList) getListParentsByIdentifierFromTree(itemIdentifier); + + // FileModel fileModel = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); + // if(fileModel != null && !fileModel.isDirectory()) + // explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); + + selectItemInTree(itemIdentifier); + + explorerPanel.getAsycTreePanel().setSubTreeLoaded(false); + + explorerPanel.getAsycTreePanel().unmask(); + eventBus.fireEvent(new SubTreeLoadedEvent(pathParentsList)); + + } } - @Override - public void onSuccess(ArrayList result) { + catch (Exception e) { - boolean foundAncestor = false; - // int index = 0; - int i = 0; - - try{ - - while (!foundAncestor) { - - if(i pathParentsList = (ArrayList) getListParentsByIdentifierFromTree(itemIdentifier); - - // FileModel fileModel = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); - // if(fileModel != null && !fileModel.isDirectory()) - // explorerPanel.getAsycTreePanel().selectItem(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); - } + new MessageBoxAlert("Error", "Sorry, e "+e.getMessage(), null); } + } - }); + }); } - + private void deselecteCurrentSelection(){ FileModel fileModelSelected = explorerPanel.getAsycTreePanel().getSelectedFileModelItem(); if(fileModelSelected!=null) @@ -2017,22 +2111,22 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt //********METHODS TO NOTIFY TREE @Override - public List getListParentsByIdentifierFromTree(String itemIdentifier) { - + public List getListParentsByIdentifierFromTree(String itemIdentifier) { + List listParentModel = new ArrayList(); - + FileModel item = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); - + if(item==null){ -// System.out.println(" LOAD****"); -// selectedItemInTree(itemIdentifier); //Load from HL + // System.out.println(" LOAD****"); + // selectedItemInTree(itemIdentifier); //Load from HL return null; } else{ return getListParents(listParentModel,item); } } - + @Override public boolean renameItem(String itemIdentifier, String newName, String extension) { return this.explorerPanel.getAsycTreePanel().renameItem(itemIdentifier, newName, extension); @@ -2073,7 +2167,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @Override public void setVisualizationType(VisualizationType type) { } - + @Override public void selectRootItem(){ this.explorerPanel.getAsycTreePanel().selectRootItem(); @@ -2085,9 +2179,9 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt */ @Override public FileModel getSelectedFolderInTree(){ - + FileModel fileModel = this.explorerPanel.getAsycTreePanel().getSelectedFileModelItem(); - + if(fileModel.isDirectory()) return fileModel; else @@ -2098,47 +2192,47 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt public void findItemAndSelectItemInTree(String itemIdentifier) { FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); - + if(fileModel==null) { //Loading item by RPC - + loadItemFromWorkspace(itemIdentifier); } else{ - + selectItemInTree(itemIdentifier); } } - + private void selectItemInTree(String itemIdentifier){ - + FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); - + if(fileModel!=null){ - + if(explorerPanel.getAsycTreePanel().isSearch()) deselecteCurrentSelection(); - + 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 } } - + private void markItemInTreeAsRead(String itemId, boolean bool){ - + FileModel file = explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemId); - + if(file!=null){ //FILE CAN NOT LOADED IN TREE file.setMarkAsRead(bool); } } - + public AsyncCallback downloadHandlerCallback = new AsyncCallback() { @Override @@ -2151,16 +2245,16 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @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); - - -// com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+params, windowOpenParam.getOption(), ""); + + + // com.google.gwt.user.client.Window.open(ConstantsExplorer.DOWNLOAD_WORKSPACE_SERVICE+params, windowOpenParam.getOption(), ""); } }; @@ -2170,7 +2264,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt */ public void expandFolder(final String itemIdentifier){ searching(false); - + FileModel fileModel = this.explorerPanel.getAsycTreePanel().getFileModelByIdentifier(itemIdentifier); if(fileModel==null) { //Loading by RPC @@ -2181,11 +2275,11 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt this.explorerPanel.getAsycTreePanel().selectItem(itemIdentifier); //select item } } - + @Override public void searching(boolean isSearch){ -// deselecteCurrentSelection(); + // deselecteCurrentSelection(); explorerPanel.getAsycTreePanel().setSearch(isSearch); } - + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java index 5cde389..058cf16 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java @@ -15,6 +15,7 @@ public class ConstantsExplorer { // public static final String FILE_SERVICE = GWT.getModuleBaseURL() + "fileservice"; public static final String RPC_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "rpcWorkspace"; public static final String UPLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "UploadService"; + public static final String LOCAL_UPLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "LocalUploadService"; public static final String DOWNLOAD_WORKSPACE_SERVICE = GWT.getModuleBaseURL() + "DownloadService"; public static final String SERVER_ERROR = "Sorry, an error has occurred on the server when"; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java index ad68bc6..f36c738 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogUpload.java @@ -170,7 +170,7 @@ public class DialogUpload extends Window { this.setAutoWidth(true); this.setAutoHeight(true); - this.show(); +// this.show(); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/FileUploader.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/FileUploader.java new file mode 100644 index 0000000..5e1b181 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/FileUploader.java @@ -0,0 +1,93 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.client.view.windows; + +import org.gcube.portlets.user.workspace.client.model.FileModel; +import org.gcube.portlets.widgets.fileupload.client.view.UploadProgressDialog; + +import com.extjs.gxt.ui.client.widget.Info; +import com.google.gwt.event.shared.HandlerManager; + +/** + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jan 20, 2014 + * + * This class calls the widget file uploader + */ +public class FileUploader { + + + private final UploadProgressDialog dlg; + private FileModel folderParent; + private UpdateServiceUploader updateServiceUploader; + private FileUploader INSTANCE = this; + private String uploadType; + + /** + * + */ + public FileUploader(HandlerManager eventBus, FileModel folderParent, String uploadType) { + this.folderParent = folderParent; + this.uploadType = uploadType; + + /** + * Prepare new servlet uploader + */ + updateServiceUploader = new UpdateServiceUploader(INSTANCE, folderParent, uploadType); + + this.dlg = new UploadProgressDialog("Upload File in: "+folderParent.getName(), eventBus, true); + dlg.center(); + dlg.show(); + } + + + public void submitForm() { + + try { + + dlg.submitForm(); + + } catch (Exception e) { + Info.display("Error", "Sorry an error occurred on the server "+e.getLocalizedMessage() + ". Please try again later"); + e.printStackTrace(); + } + + } + + public void overwrite(){ + updateServiceUploader.setOverwrite(); + } + + public void submitServletForm(String absolutePathOnServer){ + + updateServiceUploader.setFileName(absolutePathOnServer); + + try { + + updateServiceUploader.submitForm(); + + } catch (Exception e) { + + dlg.showRegisteringResult(false); + } + + } + + public FileModel getFolderParent() { + return folderParent; + } + + public String getUploadType() { + return uploadType; + } + + public UpdateServiceUploader getUpdateServiceUploader() { + return updateServiceUploader; + } + + public UploadProgressDialog getDlg() { + return dlg; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java new file mode 100644 index 0000000..21805b0 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/UpdateServiceUploader.java @@ -0,0 +1,166 @@ +package org.gcube.portlets.user.workspace.client.view.windows; + + +import org.gcube.portlets.user.workspace.client.AppControllerExplorer; +import org.gcube.portlets.user.workspace.client.ConstantsExplorer; +import org.gcube.portlets.user.workspace.client.event.CompletedFileUploadEvent; +import org.gcube.portlets.user.workspace.client.model.FileModel; +import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; + +import com.extjs.gxt.ui.client.widget.Window; +import com.google.gwt.core.client.GWT; +import com.google.gwt.http.client.Request; +import com.google.gwt.http.client.RequestBuilder; +import com.google.gwt.http.client.RequestCallback; +import com.google.gwt.http.client.RequestException; +import com.google.gwt.http.client.Response; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.ui.HTML; + + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jan 20, 2014 + * + */ +public class UpdateServiceUploader extends Window{ + + private FileUploader fileUploaderDlg = null; + private String fileName = ""; + private boolean overwrite = false; + private FileModel parent; + private String uploadType; + + + /** + * + * @param fileUploader + * @param parent + * @param uploadType + * + * By default overwrite paramameter is false + */ + public UpdateServiceUploader(final FileUploader fileUploader, final FileModel parent, String uploadType){ + + this.fileUploaderDlg = fileUploader; + this.parent = parent; + this.uploadType = uploadType; + + } + + + public void submitForm() throws Exception{ + + if(fileName == null || fileName.isEmpty()) + throw new Exception("File absolute path on server is null"); + + String parameters = ""; + + parameters+=ConstantsExplorer.UPLOAD_FORM_ELEMENT+"="+fileName+"&"; + + + if(parent.getIdentifier()!=null && !parent.getIdentifier().isEmpty()) + parameters+=ConstantsExplorer.ID_FOLDER+"="+parent.getIdentifier()+"&"; + else + throw new Exception("Parent Folder ID parameter is null or empty"); + + if(uploadType!=null && !uploadType.isEmpty()) + parameters+=ConstantsExplorer.UPLOAD_TYPE+"="+uploadType+"&"; + else + throw new Exception("UploadType parameter is null or empty"); + + parameters+=ConstantsExplorer.IS_OVERWRITE+"="+overwrite; + +// String urlRequest = ConstantsExplorer.LOCAL_UPLOAD_WORKSPACE_SERVICE+"?"+URL.encodeQueryString(parameters); + + String urlRequest = ConstantsExplorer.LOCAL_UPLOAD_WORKSPACE_SERVICE+"?"+parameters; + + GWT.log("Encoded url request is: "+urlRequest); + + + RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, urlRequest); +// requestBuilder.setHeader("Content-Type", "application/x-www-form-urlencoded"); + try { + + requestBuilder.sendRequest("", new RequestCallback() { + + @Override + public void onResponseReceived(Request request, Response response) { + +// int status = response.getStatusCode(); + + //expected
200:Upload complete
+ /*we strip tags added by webserver, + * + * Massi fix because webkit returns + *
OK:File france_flag.png(0) imported correctly in /Workspace
+ * + * TODO: recall it next time + */ + //String strippedResult = result.replace("
", "").replace("
", ""); //this won't work for webkit + //replaced by new HTML(result).getText() + String strippedResult = new HTML(response.getText()).getText(); + + final HandlerResultMessage resultMessage = HandlerResultMessage.parseResult(strippedResult); + + switch (resultMessage.getStatus()) { + case ERROR: +// new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null); + GWT.log("Error during upload: "+resultMessage.getMessage()); + fileUploaderDlg.getDlg().showRegisteringResult(false); + break; + case UNKNOWN: +// new MessageBoxAlert("Error during upload", resultMessage.getMessage(), null); + GWT.log("Error during upload: "+resultMessage.getMessage()); + fileUploaderDlg.getDlg().showRegisteringResult(false); + break; + case WARN: { +// new MessageBoxAlert("Upload completed with warnings", resultMessage.getMessage(), null); + GWT.log("Upload completed with warnings: "+resultMessage.getMessage()); + fileUploaderDlg.getDlg().showRegisteringResult(false); + break; + } + case OK: { + Timer t = new Timer() { + public void run() { + AppControllerExplorer.getEventBus().fireEvent(new CompletedFileUploadEvent(parent, null)); + fileUploaderDlg.getDlg().showRegisteringResult(true); +// new InfoDisplayMessage("Upload completed successfully", resultMessage.getMessage()); + } + }; + + t.schedule(250); + + } + } + } + + @Override + public void onError(Request request, Throwable exception) { + // MessageUtil.showErrorMessage("Error during upload", "An error occurred during file upload."); + + fileUploaderDlg.getDlg().showRegisteringResult(false); +// new MessageBoxAlert("Error during upload", "An error occurred during file upload.", null); + return; + } + }); + + } catch (RequestException e) { + + } + } + + public void setOverwrite(){ + overwrite = true; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} + diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java new file mode 100644 index 0000000..0a24cc9 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/server/LocalUploadServlet.java @@ -0,0 +1,474 @@ +/** + * + */ +package org.gcube.portlets.user.workspace.server; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URLDecoder; +import java.util.Calendar; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.log4j.Logger; +import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; +import org.gcube.common.homelibrary.home.workspace.Workspace; +import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; +import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; +import org.gcube.common.homelibrary.home.workspace.WorkspaceItemType; +import org.gcube.common.homelibrary.home.workspace.exceptions.InsufficientPrivilegesException; +import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException; +import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; +import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; +import org.gcube.common.homelibrary.home.workspace.exceptions.WrongDestinationException; +import org.gcube.common.homelibrary.home.workspace.exceptions.WrongItemTypeException; +import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; +import org.gcube.common.homelibrary.home.workspace.folder.items.Report; +import org.gcube.common.homelibrary.home.workspace.folder.items.ReportTemplate; +import org.gcube.common.homelibrary.util.Extensions; +import org.gcube.common.homelibrary.util.MimeTypeUtil; +import org.gcube.common.homelibrary.util.WorkspaceUtil; +import org.gcube.common.homelibrary.util.zip.UnzipUtil; +import org.gcube.portlets.user.workspace.client.ConstantsExplorer; +import org.gcube.portlets.user.workspace.server.notifications.NotificationsUtil; +import org.gcube.portlets.user.workspace.server.util.WsUtil; +import org.gcube.portlets.user.workspace.shared.HandlerResultMessage; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jan 21, 2014 + * + */ +public class LocalUploadServlet extends HttpServlet { + + /** + * + */ + protected static final String UTF_8 = "UTF-8"; + + public static final String UPLOAD_TYPE = ConstantsExplorer.UPLOAD_TYPE; + + public static final String ID_FOLDER = ConstantsExplorer.ID_FOLDER; + + public static final String UPLOAD_FORM_ELEMENT = ConstantsExplorer.UPLOAD_FORM_ELEMENT; + + public static final String IS_OVERWRITE = ConstantsExplorer.IS_OVERWRITE; + + public static final String FILE = "File"; + + protected static Logger logger = Logger.getLogger(LocalUploadServlet.class); + + public static final String D4ST = Extensions.REPORT_TEMPLATE.getName(); //extension of Report Template type + public static final String D4SR = Extensions.REPORT.getName(); //extension of Report type + /** + * + */ + private static final long serialVersionUID = -4197748678713054285L; + + + /** + * {@inheritDoc} + */ + @Override + public void init() throws ServletException { + super.init(); + + logger.trace("Workspace "+LocalUploadServlet.class+" ready."); + } + + /** + * {@inheritDoc} + */ + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// System.out.println("GET on LocalUploadServlet"); + logger.trace("GET on LocalUploadServlet"); + String absolutePathFile = URLDecoder.decode(request.getParameter(UPLOAD_FORM_ELEMENT), UTF_8); + String destinationId = URLDecoder.decode(request.getParameter(ID_FOLDER), UTF_8); + String uploadType = URLDecoder.decode(request.getParameter(UPLOAD_TYPE), UTF_8); + boolean isOverwrite = Boolean.parseBoolean(URLDecoder.decode(request.getParameter(IS_OVERWRITE), UTF_8)); + uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite); + } + + /** + * {@inheritDoc} + */ + @SuppressWarnings("rawtypes") + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { +// System.out.println("POST on LocalUploadServlet"); + logger.trace("POST on LocalUploadServlet"); + String absolutePathFile = request.getParameter(UPLOAD_FORM_ELEMENT); + String destinationId = request.getParameter(ID_FOLDER); + String uploadType = request.getParameter(UPLOAD_TYPE); + boolean isOverwrite = Boolean.parseBoolean(request.getParameter(IS_OVERWRITE)); + uploadData(request, response, absolutePathFile, destinationId, uploadType, isOverwrite); + } + + + + private void uploadData(HttpServletRequest request, HttpServletResponse response, String absolutePathFile,String destinationId,String uploadType,boolean isOverwrite) throws ServletException, IOException{ + + File file = null; + InputStream fileUploadIS = null; + + try { + + if(absolutePathFile==null || absolutePathFile.isEmpty()) + throw new FileUploadException("Absolute path is null or empty"); + + + file = new File(absolutePathFile); + + if(!file.exists()) + throw new FileUploadException("File dosn't exists"); + + fileUploadIS = FileUtils.openInputStream(file); + + logger.trace("Upload servlet parameters: [uploadItem: "+file.getAbsolutePath() +", destinationId: "+destinationId +", uploadType: "+uploadType+", isOverwrite: "+isOverwrite+"]"); + } catch (Exception e) { + logger.error("Error processing request in upload servlet", e); + sendError(response, "Internal error: Error during request processing"); + return; + } + + /* + if (file == null) { + logger.error("Error processing request in upload servlet: No file to upload"); + sendError(response, "Internal error: No file to upload"); + return; + }*/ + + if (destinationId == null) { + logger.error("Error processing request in upload servlet: No destination folder id found"); + sendError(response, "Internal error: No destination folder id found"); + return; + } + + logger.trace("destination folder id: "+destinationId); + logger.trace("uploadType: "+uploadType); + + Workspace wa = null; + try { + wa = WsUtil.getWorkspace(request.getSession()); + } catch (Exception e) { + logger.error("Error during workspace retrieving", e); + response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Error processing request in upload servlet"); + return; + } + + if (wa == null) { + logger.error("Now workspace found in session"); + sendError(response, "Internal error: No workspace in session"); + return; + } + + WorkspaceItem item; + try { + item = wa.getItem(destinationId); + } catch (ItemNotFoundException e) { + logger.error("Error, no destination folder found", e); + sendError(response, "Internal error: No destination folder found"); + return; + } + + if (item.getType() != WorkspaceItemType.FOLDER && item.getType() != WorkspaceItemType.SHARED_FOLDER) { + logger.error("Error processing request in upload servlet: Wrong destination item"); + sendError(response, "Internal error: Wrong destination item"); + return; + } + + WorkspaceFolder destinationFolder = (WorkspaceFolder) item; + + try { + //we calculate an unique name for the current destination + String itemName = ""; + + if(!isOverwrite) + itemName = WorkspaceUtil.getUniqueName(file.getName(), destinationFolder); + else + itemName = file.getName(); + + String contentType = MimeTypeUtil.getMimeType(new BufferedInputStream(fileUploadIS)); + logger.trace("Content type (mime type): "+contentType + " unique name: "+itemName); + +// System.out.println("Content type: "+contentType + " unique name: "+itemName); + + String extension = FilenameUtils.getExtension(itemName); + logger.trace("extension: "+extension); + +// System.out.println("extension: "+extension); + + if(uploadType.compareTo(FILE)==0) {//IS FILE UPLOAD + + boolean isZipFile = MimeTypeUtil.isZipContentType(contentType); + + if(isZipFile && (extension.compareToIgnoreCase(D4ST)==0)){ //Create REPORT TEMPLATE + +// String newItemName = ""; +// +// if(!isOverwrite) +// newItemName = itemName.substring(0,itemName.lastIndexOf(D4ST)-1); //remove extension +// else +// newItemName = item.getName(); + +// System.out.println("itemwithoutext " +itemwithoutext); + + String newItemName = itemName; + + logger.trace("createTemplate: "+newItemName); + createTemplate(request.getSession(), wa, newItemName, FileUtils.openInputStream(file), destinationFolder, response, isOverwrite); + + }else if(isZipFile && (extension.compareToIgnoreCase(D4SR)==0)){ //Create REPORT + +// String newItemName = ""; +// +// if(!isOverwrite) +// newItemName = itemName.substring(0,itemName.lastIndexOf(D4SR)-1); //remove extension +// else +// newItemName = item.getName(); + +// System.out.println("itemwithoutext " +itemwithoutext); + String newItemName = itemName; + logger.trace("createReport: "+newItemName); + createReport(request.getSession(), wa, newItemName, FileUtils.openInputStream(file), destinationFolder, response, isOverwrite); + + }else{ //CREATE AN EXTERNAL FILE + + createExternalFile(request.getSession(), wa, itemName, FileUtils.openInputStream(file), destinationFolder, contentType, response, isOverwrite); + } + + }else {//IS ARCHIVE UPLOAD + + if (MimeTypeUtil.isZipContentType(contentType)){ + logger.trace("Unziping content"); + UnzipUtil.unzip(destinationFolder, FileUtils.openInputStream(file), itemName); + + //TODO NOTIFY UPLOAD ARCHIVE + sendMessage(response, "Archive "+absolutePathFile+" imported correctly in "+destinationFolder.getPath()); + } else + createExternalFile(request.getSession(), wa, itemName, FileUtils.openInputStream(file), destinationFolder, contentType, response, isOverwrite); + } + + file.delete(); + } catch (InsufficientPrivilegesException e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: Insufficient privileges"); + return; + } catch (InternalErrorException e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: "+e.getMessage()); + return; + } catch (ItemAlreadyExistException e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: An item with that name already exists"); + return; + }catch (Exception e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: An error occurred on uploading the file, try again later"); + return; + } + + } + + + + /** + * + * @param httpSession + * @param workspace + * @param itemId + * @param destinationFolderId + */ + private void notifyUploadInSharedFolder(final HttpSession httpSession, final Workspace workspace, final String itemId, final String destinationFolderId, final boolean isOverwrite){ + + new Thread(){ + + public void run() { + + WorkspaceItem sourceItem; + try { + sourceItem = workspace.getItem(itemId); + String sourceSharedId = sourceItem.getIdSharedFolder(); + WorkspaceItem folderDestinationItem = workspace.getItem(destinationFolderId); + + NotificationsUtil.checkSendNotifyChangedItemToShare(httpSession, sourceItem, sourceSharedId, folderDestinationItem,isOverwrite); + + + } catch (Exception e) { + logger.error("Error in notifyUploadInSharedFolder", e); + + } + + }; + + }.start(); + } + + private void createExternalFile(HttpSession httpSession, Workspace wa, String itemName, InputStream uploadItem, WorkspaceFolder destinationFolder, String contentType, HttpServletResponse response, boolean isOverwrite) throws InternalErrorException, InsufficientPrivilegesException, ItemAlreadyExistException, IOException { + + FolderItem createdItem = null; + + if(!isOverwrite){ + //we need to recalculate the item name + itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); + createdItem = WorkspaceUtil.createExternalFile(destinationFolder, itemName, "", contentType, uploadItem); + } + else + createdItem = overwriteItem(wa, itemName, uploadItem, destinationFolder); //CASE OVERWRITE + + if(createdItem!=null){ + notifyUploadInSharedFolder(httpSession,wa,createdItem.getId(),destinationFolder.getId(), isOverwrite); + + sendMessage(response, "File "+createdItem.getName()+" imported correctly in "+destinationFolder.getPath()); + } + else + sendError(response,"Internal error: Workspace Item Not Found"); + } + + + private FolderItem overwriteItem(Workspace wa, String itemName, InputStream fileData, WorkspaceFolder destinationFolder){ + + FolderItem overwriteItem = null; + + try { + logger.trace("case overwriting item.. "+itemName); + overwriteItem = (FolderItem) wa.find(itemName, destinationFolder.getId()); + logger.trace("overwriteItem item was found, id is: "+overwriteItem.getId()); + wa.updateItem(overwriteItem.getId(), fileData); + logger.trace("updateItem with id: "+overwriteItem.getId()+ ", is completed"); + } catch (ItemNotFoundException e) { + logger.error("Error in createExternalFile, ItemNotFoundException", e); + } catch (WrongItemTypeException e) { + logger.error("Error in createExternalFile, WrongItemTypeException", e); + } catch (WorkspaceFolderNotFoundException e) { + logger.error("Error in createExternalFile, WorkspaceFolderNotFoundException", e); + } catch (WrongDestinationException e) { + logger.error("Error in createExternalFile, WrongDestinationException", e); + } catch (InsufficientPrivilegesException e) { + logger.error("Error in createExternalFile, InsufficientPrivilegesException", e); + } catch (ItemAlreadyExistException e) { + logger.error("Error in createExternalFile, ItemAlreadyExistException", e); + } catch (InternalErrorException e) { + logger.error("Error in createExternalFile, InternalErrorException", e); + }catch (Exception e) { + logger.error("Error in createExternalFile, Exception", e); + } + + return overwriteItem; + + } + + + private void createReport(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ + + try { + + Report report = null; + + if(!isOverwrite){ + itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); + report = wa.createReport(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", "", 0, "", stream, destinationFolder.getId()); + + notifyUploadInSharedFolder(httpSession,wa,report.getId(),destinationFolder.getId(), isOverwrite); + + sendMessage(response, "File "+report.getName()+" imported correctly in "+destinationFolder.getPath()); + } + else{ //CASE OVERWRITE + FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder); + + if(rep!=null){ + + notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); + + sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); + } + else + sendError(response,"Internal error: Workspace Item Not Found"); + + } + } catch (WrongDestinationException e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: Wrong Destination"); + } catch (WorkspaceFolderNotFoundException e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: Workspace Folder Not Found"); + } + + } + + private void createTemplate(HttpSession httpSession, Workspace wa, String itemName, InputStream stream, WorkspaceFolder destinationFolder, HttpServletResponse response, boolean isOverwrite) throws InsufficientPrivilegesException, ItemAlreadyExistException, InternalErrorException, IOException{ + + try { + + ReportTemplate template = null; + + if(!isOverwrite){ + itemName = WorkspaceUtil.getUniqueName(itemName, destinationFolder); + template = wa.createReportTemplate(itemName, "", Calendar.getInstance(), Calendar.getInstance(), "", "", 0, "", stream, destinationFolder.getId()); + + notifyUploadInSharedFolder(httpSession,wa,template.getId(),destinationFolder.getId(), isOverwrite); + + sendMessage(response, "File "+template.getName()+" imported correctly in "+destinationFolder.getPath()); + + }else{ //CASE OVERWRITE + FolderItem rep = overwriteItem(wa, itemName, stream, destinationFolder); + + if(rep!=null){ + + notifyUploadInSharedFolder(httpSession,wa,rep.getId(),destinationFolder.getId(), isOverwrite); + + sendMessage(response, "File "+rep.getName()+" imported correctly in "+destinationFolder.getPath()); + } + else + sendError(response,"Internal error: Workspace Item Not Found"); + + } + + } catch (WrongDestinationException e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: Wrong Destination"); + } catch (WorkspaceFolderNotFoundException e) { + logger.error("Error creating elements", e); + sendError(response, "Internal error: Workspace Folder Not Found"); + } + + } + + + protected void sendError(HttpServletResponse response, String message) throws IOException + { + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + HandlerResultMessage resultMessage = HandlerResultMessage.errorResult(message); + response.getWriter().write(resultMessage.toString()); + response.flushBuffer(); + } + + protected void sendMessage(HttpServletResponse response, String message) throws IOException + { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + HandlerResultMessage resultMessage = HandlerResultMessage.okResult(message); + response.getWriter().write(resultMessage.toString()); + response.flushBuffer(); + } + + protected void sendWarnMessage(HttpServletResponse response, String message) throws IOException + { + response.setStatus(HttpServletResponse.SC_ACCEPTED); + HandlerResultMessage resultMessage = HandlerResultMessage.warnResult(message); + response.getWriter().write(resultMessage.toString()); + response.flushBuffer(); + } + + +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java index 7b09daf..aa1fefd 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/UploadServlet.java @@ -116,7 +116,7 @@ public class UploadServlet extends HttpServlet { while (it.hasNext()) { FileItem item = (FileItem) it.next(); - if (!item.isFormField() && UPLOAD_FORM_ELEMENT.equals(item.getFieldName())) { + if (UPLOAD_FORM_ELEMENT.equals(item.getFieldName())) { uploadItem = item; } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java b/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java index 1d80e86..dac3ead 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/util/WsUtil.java @@ -74,10 +74,10 @@ public class WsUtil { /*USE ANOTHER ACCOUNT (OTHERWHISE BY TEST_USER) FOR RUNNING * COMMENT THIS IN DEVELOP ENVIROMENT (UNCOMMENT IN PRODUCTION)*/ - user=TEST_USER; +// user=TEST_USER; //UNCOMMENT THIS IN DEVELOP ENVIROMENT -// user = "francesco.mangiacrapa"; + user = "francesco.mangiacrapa"; logger.warn("WORKSPACE PORTLET STARTING IN TEST MODE - NO USER FOUND - PORTLETS STARTING WITH FOLLOWING SETTINGS:"); logger.warn("session id: "+sessionID);