From f29b443fd5f7c4bda4f018471e3934e6a78ae92a Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Mon, 29 Aug 2016 13:39:13 +0000 Subject: [PATCH] Updated pom version at 6.13.1 Fixed incident: https://support.d4science.org/issues/4878 git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@131030 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/AppControllerExplorer.java | 33 +- .../workspace/client/ConstantsExplorer.java | 5 + .../client/rpc/GWTWorkspaceService.java | 11 +- .../client/rpc/GWTWorkspaceServiceAsync.java | 4 +- .../client/view/tree/AsyncTreePanel.java | 725 ++++++++++++------ .../workspace/server/GWTWorkspaceBuilder.java | 1 + .../server/GWTWorkspaceServiceImpl.java | 33 +- .../user/workspace/shared/UserBean.java | 159 +++- 8 files changed, 684 insertions(+), 287 deletions(-) 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 df6db4d..063d578 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 @@ -184,7 +184,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt // private FileUploader fileUploader; public static String myLogin; public static String myLoginFirstName; - public static boolean ckanEditorOrAdmin; + public static Boolean ckanEditorOrAdmin; //PRE-LOAD LIST OF USER FORM LIFERAY private UserStore userStore = new UserStore(); @@ -257,10 +257,10 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt modal.add(new CreateDatasetForm(folderId, username, eventBus)); modal.setCloseVisible(true); modal.show(); - + // hide any popup panel opened modal.addHideHandler(new HideHandler() { - + @Override public void onHide(HideEvent hideEvent) { eventBus.fireEvent(new CloseCreationFormEvent()); @@ -2013,6 +2013,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt public ExplorerPanel getPanel(){ this.explorerPanel = new ExplorerPanel(true, true); loadMyLogin(); + loadMyFirstName(); return this.explorerPanel; } @@ -2030,6 +2031,7 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt this.explorerPanel = new ExplorerPanel(instancingSmartFolder, instancingMessages, selectRootItem); this.selectRootItem=selectRootItem; loadMyLogin(); + loadMyFirstName(); return this.explorerPanel; } @@ -2281,12 +2283,13 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt @Override public void onFailure(Throwable caught) { GWT.log("Error on loading my login is empty"); + ConstantsExplorer.log("Error on loading my login is empty"); myLogin = ""; - } @Override public void onSuccess(UserBean user) { + ConstantsExplorer.log("UserBean is: "+user.toString()); GWT.log("My login is: "+user.getUsername()); myLogin = user.getUsername(); myLoginFirstName = user.getFirstName(); @@ -2296,6 +2299,28 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt } + /** + * Load my first name. + */ + private void loadMyFirstName(){ + + rpcWorkspaceService.getMyFirstName(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + ConstantsExplorer.log("Error on loading my first name"); + myLoginFirstName = ""; + } + + @Override + public void onSuccess(String firstName) { + ConstantsExplorer.log("getMyFirstName is: "+firstName); + myLoginFirstName = firstName; + } + }); + } + + /** * Load item from workspace. * 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 a0003ef..8ae734f 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 @@ -228,4 +228,9 @@ public class ConstantsExplorer { public static final int HEIGHT_DIALOG_SHARE_FOLDER = 445; + + public static native void log(String txt) /*-{ + console.log(txt) + }-*/; + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java index 81dfe68..4bb2970 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java @@ -693,17 +693,22 @@ public interface GWTWorkspaceService extends RemoteService{ void setGcubeItemProperties(String itemId, Map properties) throws Exception; FileModel getItemForFileTree(String itemId) throws Exception; - + /** - * Allows the user to public onto the data catalogue if he has at least + * Allows the user to public onto the data catalogue if he has at least * the role admin somewhere. * @return true if he can publish, false otherwise */ boolean hasUserRoleAdmin(); - + /** * Retrieve the username of the user into the session * @return the username of the current user */ String getUser(); + + /** + * @return + */ + String getMyFirstName(); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java index 90aa006..eb8a9c1 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java @@ -684,7 +684,7 @@ public interface GWTWorkspaceServiceAsync { AsyncCallback callback); /** - * Allows the user to public onto the data catalogue if he has at least + * Allows the user to public onto the data catalogue if he has at least * the role admin somewhere. * @return true if he can publish, false otherwise */ @@ -696,4 +696,6 @@ public interface GWTWorkspaceServiceAsync { */ void getUser(AsyncCallback callback); + void getMyFirstName(AsyncCallback callback); + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java index 62a5466..2e7fd82 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java @@ -54,15 +54,19 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; + /** - * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * The Class AsyncTreePanel. * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Aug 29, 2016 */ public class AsyncTreePanel extends LayoutContainer { private static final String TREE_MESSAGE_PANEL_ASYNC = "treeMessagePanelAsync"; - + private static final String ROOT_SUFFIX = "'s workspace"; + private String myRootDisplayName = null; // private TreeLoader loader; private TreePanel treePanel; private TreeStore store; @@ -72,21 +76,31 @@ public class AsyncTreePanel extends LayoutContainer { private boolean isSubTreeLoaded = false; private boolean isSearch = false; private String scopeId = null; + + /** + * The Enum DragType. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Aug 29, 2016 + */ private enum DragType {INSERT, APPEND}; // private int contextMenuPosX = -1; // private int contextMenuPosY = -1; - + private boolean rightClick = false; + /** + * Instantiates a new async tree panel. + */ public AsyncTreePanel() { //Init Store store = new TreeStore(); - + //Load Root Item // this.loadRootItem(); - - treePanel = new TreePanel(store){ + + treePanel = new TreePanel(store){ @Override public boolean hasChildren(FileModel parent) { if (parent instanceof FolderModel) { @@ -101,16 +115,16 @@ public class AsyncTreePanel extends LayoutContainer { super.onComponentEvent(ce); TreePanelEvent tpe = (TreePanelEvent) ce; EventType typeEvent = tpe.getType(); - + rightClick = false; - + if (typeEvent == Events.OnMouseDown) { - + if (ce.isRightClick()){ rightClick = true; } } - + int type = ce.getEventTypeInt(); switch (type) { case Event.ONCLICK: @@ -126,43 +140,68 @@ public class AsyncTreePanel extends LayoutContainer { onFocus(ce); break; } - + view.onEvent(tpe); } }; - + treePanel.setStateful(false); treePanel.setDisplayProperty(ConstantsExplorer.NAME); - + // statefull components need a defined id treePanel.setId(TREE_MESSAGE_PANEL_ASYNC); // SET icons in tree panel treePanel.setIconProvider(new ModelIconProvider() { - public AbstractImagePrototype getIcon(FileModel model) { + public AbstractImagePrototype getIcon(final FileModel model) { // model.setIcon(); + ConstantsExplorer.log("getIcon Model is root?: "+model.isRoot() + " name: "+model.getName()); if (!model.isDirectory()) { if(model.getType()!=null) return Resources.getIconByType(model.getName(), model.getType()); - + return Resources.getIconByFolderItemType(model.getGXTFolderItemType()); } if (model.isRoot()) { - model.setName(AppControllerExplorer.myLoginFirstName+ROOT_SUFFIX); + //ConstantsExplorer.log("getIcon isRoot Model is: "+model); + + if(AppControllerExplorer.myLoginFirstName==null || AppControllerExplorer.myLoginFirstName.isEmpty()){ + ConstantsExplorer.log("Getting My First Name from server, into myLoginFirstName call is null yet"); + AppControllerExplorer.rpcWorkspaceService.getMyFirstName(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + GWT.log("Error on re-loading my login is empty"); + ConstantsExplorer.log("Error on re-loading my first name is empty"); + + } + + @Override + public void onSuccess(String firstName) { + if(firstName==null || firstName.isEmpty()) + model.setName("My Workspace"); + else + setRootDisplayName(model, AppControllerExplorer.myLoginFirstName+ROOT_SUFFIX, true); + } + }); + }else{ + setRootDisplayName(model, AppControllerExplorer.myLoginFirstName+ROOT_SUFFIX, false); + } + return Resources.getCloudDriveIcon(); } if(model.getStatus() == ConstantsExplorer.FOLDERNOTLOAD) return Resources.getIconLoading2(); - + if(model.isVreFolder()) return Resources.getIconVREFolder(); - + if(model.isSpecialFolder()) return Resources.getIconSpecialFolder(); - + //SHARE ICON if(model.isShared()){ if(model.isShareable()) @@ -173,35 +212,35 @@ public class AsyncTreePanel extends LayoutContainer { return null; //Set default folder icon } }); - + contextMenuTree = new ContextMenuTree(); - + treePanel.setContextMenu(contextMenuTree.getContextMenu()); - + //Single selection Mode treePanel.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); - + this.addListners(); this.addDragAndDrop(); this.setAlphanumericStoreSorter(); - + cp.setHeading(ConstantsExplorer.TREEVIEW); cp.setHeaderVisible(false); - + // //BULK // Header headerCp = cp.getHeader(); // buttBulk.setIcon(Resources.getIconBulkUpdate()); // headerCp.addTool(buttBulk); - + cp.setBodyBorder(false); cp.setBodyStyle("padding: 5px"); cp.setLayout(new FitLayout()); - //***For Debug the store + //***For Debug the store Button butt = new Button(); butt.setText("Print Store"); butt.setVisible(false); - + butt.addListener(Events.OnClick, new Listener() { @Override @@ -211,88 +250,113 @@ public class AsyncTreePanel extends LayoutContainer { for (FileModel item : listFileModel) { System.out.println(item.getName() + " ID " + item.getIdentifier() + " isDirectory " + item.isDirectory()); - + // eventBus.fireEvent(new SelectedItemEvent(treePanel.getStore().getRootItems().get(0))); printingTreeLevel(item); } } - + }); - + // cp.add(butt); - - //***End Debug the store - + + //***End Debug the store + cp.add(treePanel); - + add(cp); - + + } + + + /** + * Sets the root display name. + * + * @param model the model + * @param name the name + * @param forceOverwrite the force overwrite + */ + private void setRootDisplayName(FileModel root, String name, boolean forceOverwrite){ + if(myRootDisplayName==null || forceOverwrite){ + myRootDisplayName = name; + root.setName(myRootDisplayName); + } } /** - * - * * Status values * ConstantsExplorer.FOLDERNOTLOAD = "notload"; * ConstantsExplorer.FOLDERLOADED = "loaded"; - * - * @param itemIdentifier - * @param status + * + * @param itemIdentifier the item identifier + * @param status the status */ public void changeFolderIconStatus(String itemIdentifier, String status){ - + FileModel fileModel = getFileModelByIdentifier(itemIdentifier); fileModel.setStatus(status); } - + + /** + * Load root item. + * + * @param scopeId the scope id + * @param selectRoot the select root + */ public void loadRootItem(String scopeId, final boolean selectRoot){ - + this.scopeId = scopeId; System.out.println("***Start Root load with scopeid: " + scopeId); - - + + if(this.scopeId !=null){ //Load Root with specific scope id AppControllerExplorer.rpcWorkspaceService.getRootForTree(scopeId, new AsyncCallback() { - + @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting root item. " +ConstantsExplorer.TRY_AGAIN, null); - + } - + @Override public void onSuccess(FolderModel result) { loadRootInStore(result, selectRoot); - + } }); } - + else{ //Load Root without filtering on scope id AppControllerExplorer.rpcWorkspaceService.getRootForTree(new AsyncCallback() { - + @Override public void onFailure(Throwable caught) { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting root item. " +ConstantsExplorer.TRY_AGAIN, null); - + } - + @Override public void onSuccess(FolderModel result) { loadRootInStore(result, selectRoot); } }); - } + } } - - + + + /** + * Load root in store. + * + * @param root the root + * @param selectRootOnLoad the select root on load + */ private void loadRootInStore(FolderModel root, boolean selectRootOnLoad){ - + if(root!=null){ store.removeAll(); store.insert(root, 0, false); @@ -300,44 +364,47 @@ public class AsyncTreePanel extends LayoutContainer { treePanel.setExpanded(store.getRootItems().get(0),true); //expand level 1 if(selectRootOnLoad) selectRootItem(); //select root item - + System.out.println("***End Root load "); } else new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting root item. Root item is null " +ConstantsExplorer.TRY_AGAIN, null); - + } - + + /** + * Adds the drag and drop. + */ private void addDragAndDrop() { - + //Drag & Drop Event TreePanelDragSource source = new TreePanelDragSource(treePanel); source.addDNDListener(new DNDListener() { @Override public void dragStart(DNDEvent event) { - + GWT.log("***Event Start drag"); FileModel sel = treePanel.getSelectionModel().getSelectedItem(); - + if (sel != null && sel == treePanel.getStore().getRootItems().get(0)) { event.setCancelled(true); event.getStatus().setStatus(false); return; } - + if(sel.isVreFolder() || sel.isSpecialFolder()){ event.setCancelled(true); event.getStatus().setStatus(false); return; } - + if(sel != null && sel.getName()!= null) GWT.log("Start drag of " + sel.getName()); - + super.dragStart(event); } }); - + TreePanelDropTarget targetTreePanel = new TreePanelDropTarget(treePanel){ // @Override @@ -345,14 +412,14 @@ public class AsyncTreePanel extends LayoutContainer { // System.out.println("on Drop"); // super.onDragDrop(event); // } - + // @Override // protected void showFeedback(DNDEvent event) { // // TODO Auto-generated method stub // super.showFeedback(event); -// +// // } - + @Override protected void showFeedback(DNDEvent event) { if (!isValidDropTarget(event)) { @@ -362,20 +429,20 @@ public class AsyncTreePanel extends LayoutContainer { } super.showFeedback(event); } - + @SuppressWarnings("unchecked") private boolean isValidDropTarget(DNDEvent event) { TreePanel target = (TreePanel) event.getDropTarget().getComponent(); TreePanel.TreeNode zone = target.findNode(event.getTarget()); - + if (zone == null) { return true; // let it check from super-class } - + Component com = event.getDragSource().getComponent(); - + if(com instanceof TreePanel){ - + TreePanel source = (TreePanel) event.getDragSource().getComponent(); List selection = source.getSelectionModel().getSelection(); @@ -383,12 +450,12 @@ public class AsyncTreePanel extends LayoutContainer { // check the "model" against "zone" and return false // if "zone" is not a valid drop target for "model", otherwise check the next "model" // example: - if (source.getStore().getParent(model) == zone.getModel()) + if (source.getStore().getParent(model) == zone.getModel()) return false; - + // if(source.getStore().getParent(model) == target.getModel()) // return false; - + if(zone.getModel().isSpecialFolder()) //NOT DROPPABLE INTO SPECIAL FOLDER return false; @@ -396,7 +463,7 @@ public class AsyncTreePanel extends LayoutContainer { return true; } return false; - + // TreePanel source = (TreePanel) event.getDragSource().getComponent(); // List selection = source.getSelectionModel().getSelection(); // @@ -404,9 +471,9 @@ public class AsyncTreePanel extends LayoutContainer { // // check the "model" against "zone" and return false // // if "zone" is not a valid drop target for "model", otherwise check the next "model" // // example: -// if (source.getStore().getParent(model) == zone.getModel()) +// if (source.getStore().getParent(model) == zone.getModel()) // return false; -// +// //// if(source.getStore().getParent(model) == target.getModel()) //// return false; // } @@ -418,40 +485,40 @@ public class AsyncTreePanel extends LayoutContainer { @Override protected void handleAppendDrop(DNDEvent event, @SuppressWarnings("rawtypes") TreeNode item) { super.handleAppendDrop(event, item); - + GWT.log("***Event move handleAppendDrop"); List listFileModel = getDragSource(event); - + if(listFileModel.size() == 1){ FileModel destination = getDragDestination(item, DragType.APPEND); if(destination != null){ //REMOVE THIS COMMENT TODO eventBus.fireEvent(new MoveItemEvent(listFileModel.get(0), (FolderModel) destination)); - System.out.println("Destination: " +destination.getName() + " id "+ destination.getIdentifier()); + System.out.println("Destination: " +destination.getName() + " id "+ destination.getIdentifier()); } }else{ //MULTIDRAG } GWT.log("***End Event move handleAppendDrop"); } - + // @Override // protected void onDragMove(DNDEvent event){ //// System.out.println("on Drag Move"); // super.onDragMove(event); // } - + //Called when drop between files @Override protected void handleInsertDrop(DNDEvent event, @SuppressWarnings("rawtypes") TreeNode item, int index) { super.handleInsertDrop(event, item, index); - + GWT.log("***Event move handleInsertDrop"); List listFileModel = getDragSource(event); if(listFileModel.size() == 1){ //one element dragged - + FileModel destination = getDragDestination(item, DragType.INSERT); - if(destination != null){ + if(destination != null){ GWT.log("Destination: " +destination.getName() + " id "+ destination.getIdentifier()); //REMOVE THIS COMMENT TODO eventBus.fireEvent(new MoveItemEvent(listFileModel.get(0), (FolderModel) destination)); @@ -459,11 +526,11 @@ public class AsyncTreePanel extends LayoutContainer { }else{ //multi drag } - GWT.log("***End Event move handleInsertDrop"); + GWT.log("***End Event move handleInsertDrop"); } - + private FileModel getDragDestination(@SuppressWarnings("rawtypes") TreeNode item, DragType insertType){ - + FileModel destination = null; if(item!=null){ destination = (FileModel) item.getModel(); @@ -476,31 +543,31 @@ public class AsyncTreePanel extends LayoutContainer { } return destination; } - + private List getDragSource(DNDEvent event){ - + List listDraggedFile = new ArrayList(); - + if(event.getData() != null){ List listItemsSource = event.getData(); GWT.log("Number of move " + listItemsSource.size()); FileModel sourceFileModel = null; //for print - + for(TreeStoreModel itemSource : listItemsSource){ - + listDraggedFile.add((FileModel) itemSource.getModel()); sourceFileModel = (FileModel) itemSource.getModel(); if(sourceFileModel.getParentFileModel()!=null) GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag " + " Parent Name: " + sourceFileModel.getParentFileModel().getName() + "id " + sourceFileModel.getParentFileModel().getIdentifier()); else GWT.log("Source Name " + sourceFileModel.getName() + " id " + sourceFileModel.getIdentifier() + " end drag "); - + GWT.log("Child count: " + itemSource.getChildCount()); } } return listDraggedFile; } - + // @Override // protected void handleInsert(DNDEvent event, TreeNode treeNode){ // super.handleAppend(event, treeNode); @@ -514,11 +581,14 @@ public class AsyncTreePanel extends LayoutContainer { // targetTreePanel.setAllowDropOnLeaf(true); } - + + /** + * Adds the listners. + */ private void addListners() { - + treePanel.getSelectionModel().addSelectionChangedListener(new SelectionChangedListener() { - + @Override public void selectionChanged(SelectionChangedEvent objEvent) { @@ -541,7 +611,7 @@ public class AsyncTreePanel extends LayoutContainer { type = fileModel.getType(); else type = "null"; - + //DEBUG // String folderItemType; // if(fileModel.getGXTFolderItemType()!=null) @@ -552,64 +622,64 @@ public class AsyncTreePanel extends LayoutContainer { // System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent " + fileModel.getParentFileModel().getName() + " with id " + fileModel.getParentFileModel().getIdentifier() + " IsDirectory " + ""+fileModel.isDirectory() + " type "+ type + " HLFolderItemType "+folderItemType); // else // System.out.println("Item selected " + fileModel.getName() + " Id " + fileModel.getIdentifier() + " Parent null " + " IsDirectory " + ""+fileModel.isDirectory()+ " type "+ type +" HLFolderItemType "+folderItemType ); - + System.out.println("Item selected" + fileModel); - + eventBus.fireEvent(new SelectedItemEvent(fileModel)); } - - + + System.out.println("***End Event selection change"); - } - + } + }); - + // // Listner on Click treePanel.addListener(Events.OnClick, new Listener>() { public void handleEvent(TreePanelEvent be) { - + if(be != null){ if(isSearch){ //TODO WORK AROUND - used after search setSearch(false); // FileModel fileModel = (FileModel) be.getNode().getModel(); // reSelectItem(fileModel.getIdentifier()); - + TreeNode node = be.getNode(); - + if(node!=null){ FileModel fileModel = (FileModel) be.getNode().getModel(); reSelectItem(fileModel.getIdentifier()); } } } - + }; }); - + // // Listner on Menu Hide treePanel.getContextMenu().addListener(Events.Hide, new Listener() { @Override public void handleEvent(MenuEvent be) { - + if(be!=null) deselectItem(treePanel.getSelectionModel().getSelectedItem()); } }); - - + + treePanel.addListener(Events.BeforeExpand, new Listener>() { public void handleEvent(final TreePanelEvent be) { - + if(be != null && !isSubTreeLoaded){ - + GWT.log("***Event beforeExpand Node"); GWT.log("Expand Folder Model: " + be.getNode().getModel().get(ConstantsExplorer.NAME)); final FolderModel folder = (FolderModel) be.getNode().getModel(); int numChildrenFolder = store.getChildCount(folder); - + if (folder!=null){ eventBus.fireEvent(new ExpandFolderEvent(folder)); if (numChildrenFolder==0) { @@ -619,9 +689,9 @@ public class AsyncTreePanel extends LayoutContainer { } GWT.log("***End Event beforeExpand Node"); } - } + } }); - + // Add lister to context menu treePanel.addListener(Events.ContextMenu, new Listener>() { @@ -641,26 +711,29 @@ public class AsyncTreePanel extends LayoutContainer { } List listSelected = treePanel.getSelectionModel().getSelectedItems(); // - if (listSelected != null && listSelected.size() > 0) { + if (listSelected != null && listSelected.size() > 0) { manageContextMenu(); } // } - + }); - - + + } - + + /** + * Manage context menu. + */ private void manageContextMenu(){ - + System.out.println("***Event Context Menu open"); - + contextMenuTree.setListSelectedItems(treePanel.getSelectionModel().getSelectedItems()); //Set items list selected in context menu tree - + FileModel selectedItem = treePanel.getSelectionModel().getSelectedItems().get(0); //get first element - + if (store.getRootItems().get(0).equals(selectedItem)) {//selected root item? setVisibleRenameAndRemoveContextMenu(false); setVisibileGetWebDavUrl(true); @@ -669,26 +742,39 @@ public class AsyncTreePanel extends LayoutContainer { setVisibleRenameAndRemoveContextMenu(true); setVisibileGetWebDavUrl(false); } - + contextMenuTree.contextMenuSwitch(selectedItem); System.out.println("***End Event Context Menu open"); } - - + + + /** + * Reload tree level and expand folder. + * + * @param folderIdentifier the folder identifier + * @param expandFolder the expand folder + */ public void reloadTreeLevelAndExpandFolder(String folderIdentifier, boolean expandFolder){ final FolderModel folder = (FolderModel) getFileModelByIdentifier(folderIdentifier); reloadTreeLevelAndExpandFolder(folder, expandFolder); } - + + /** + * Adds the item id and expand folder. + * + * @param parent the parent + * @param itemId the item id + * @param expandFolder the expand folder + */ public void addItemIdAndExpandFolder(final FileModel parent, String itemId, boolean expandFolder){ - + treePanel.mask(ConstantsExplorer.VALIDATINGOPERATION,ConstantsExplorer.LOADINGSTYLE); AppControllerExplorer.rpcWorkspaceService.getItemForFileTree(itemId, new AsyncCallback(){ @Override public void onFailure(Throwable caught) { - + if(caught instanceof SessionExpiredException){ GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); @@ -698,7 +784,7 @@ public class AsyncTreePanel extends LayoutContainer { new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting item from workspace." +ConstantsExplorer.TRY_AGAIN, null); removeAllAndRecoveryRoot(); } - + @Override public void onSuccess(FileModel result) { GWT.log("GetItemForFileTree adding: "+result); @@ -707,14 +793,20 @@ public class AsyncTreePanel extends LayoutContainer { } }); } - + + /** + * Reload tree level and expand folder. + * + * @param folder the folder + * @param expandFolder the expand folder + */ private void reloadTreeLevelAndExpandFolder(final FolderModel folder, final boolean expandFolder){ - + AppControllerExplorer.rpcWorkspaceService.getFolderChildren(folder, new AsyncCallback>(){ @Override public void onFailure(Throwable caught) { - + if(caught instanceof SessionExpiredException){ GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); @@ -735,25 +827,30 @@ public class AsyncTreePanel extends LayoutContainer { treePanel.unmask(); } }); - + } - + + /** + * Load tree level from workspace. + * + * @param folder the folder + */ private void loadTreeLevelFromWorkspace(final FolderModel folder){ - GWT.log("Start RPC - getFolderChildren"); -// Log.info("Start RPC - getFolderChildren"); + GWT.log("Start RPC - getFolderChildren"); +// Log.info("Start RPC - getFolderChildren"); // final CountTimer count = new CountTimer(1000); AppControllerExplorer.rpcWorkspaceService.getFolderChildren(folder, new AsyncCallback>(){ @Override public void onFailure(Throwable caught) { - + if(caught instanceof SessionExpiredException){ GWT.log("Session expired"); eventBus.fireEvent(new SessionExpiredEvent()); return; } - + new MessageBoxAlert("Error", ConstantsExplorer.SERVER_ERROR + " getting folder children items. " +ConstantsExplorer.TRY_AGAIN, null); removeAllAndRecoveryRoot(); } @@ -762,45 +859,70 @@ public class AsyncTreePanel extends LayoutContainer { public void onSuccess(List result) { if(treePanel.isMasked()) treePanel.unmask(); - + store.removeAll(folder); addChildrenToFolder(folder, result); GWT.log("End RPC - getFolderChildren"); } - + }); - + } - + + /** + * Adds the children to folder. + * + * @param idParent the id parent + * @param children the children + */ public void addChildrenToFolder(String idParent, List children){ - + FileModel parent = getFileModelByIdentifier(idParent); if(parent!=null) store.add(parent,children,false); - + } - + + /** + * Adds the children to folder. + * + * @param parent the parent + * @param children the children + */ private void addChildrenToFolder(FolderModel parent, List children){ - + if(parent!=null){ store.add(parent,children,false); System.out.println("Added children in store"); } } - + + /** + * Sets the visible rename and remove context menu. + * + * @param bool the new visible rename and remove context menu + */ private void setVisibleRenameAndRemoveContextMenu(boolean bool){ - + treePanel.getContextMenu().getItemByItemId(WorkspaceOperation.REMOVE.getId()).setVisible(bool); treePanel.getContextMenu().getItemByItemId(WorkspaceOperation.RENAME.getId()).setVisible(bool); - + } - + + /** + * Sets the visibile get web dav url. + * + * @param bool the new visibile get web dav url + */ private void setVisibileGetWebDavUrl(boolean bool){ treePanel.getContextMenu().getItemByItemId(WorkspaceOperation.WEBDAV_URL.getId()).setVisible(bool); } + /** + * Sets the alphanumeric store sorter. + */ private void setAlphanumericStoreSorter(){ - + // Sorting files store.setStoreSorter(new StoreSorter() { @@ -814,7 +936,7 @@ public class AsyncTreePanel extends LayoutContainer { } else if (!m1Folder && m2Folder) { return 1; } - + if(m1.isSpecialFolder() && !m2.isSpecialFolder()) return -1; else if(!m1.isSpecialFolder() && m2.isSpecialFolder()) @@ -826,12 +948,17 @@ public class AsyncTreePanel extends LayoutContainer { } //TODO for debug + /** + * Printing tree level. + * + * @param item the item + */ private void printingTreeLevel(FileModel item){ - + List children = treePanel.getStore().getChildren(item); - + if (children != null) { - + for (FileModel item2 : children) { System.out.println(" " + item2.getName() + " ID " + item2.getIdentifier() + " isDirectory " + item.isDirectory()); @@ -842,53 +969,69 @@ public class AsyncTreePanel extends LayoutContainer { System.out.println(" "); } } - + /** - * - * @param identifier - * @return + * Gets the file model by identifier. + * + * @param identifier the identifier + * @return the file model by identifier */ public FileModel getFileModelByIdentifier(String identifier){ - + return treePanel.getStore().findModel(ConstantsExplorer.IDENTIFIER, identifier); } - + + /** + * Gets the children number. + * + * @param identifier the identifier + * @return the children number + */ public int getChildrenNumber(String identifier){ - + FolderModel fileModel = (FolderModel) getFileModelByIdentifier(identifier); return getChildrenNumber(fileModel); } - + + /** + * Gets the children number. + * + * @param folder the folder + * @return the children number + */ private int getChildrenNumber(FolderModel folder){ - + return store.getChildCount(folder); } - - + + /** - * + * Delete item. + * * @param identifier (MANDATORY) - * @return + * @return true, if successful */ public boolean deleteItem(String identifier) { - + FileModel fileTarget = getFileModelByIdentifier(identifier); - + if(fileTarget!=null){ return deleteItem(fileTarget); } else System.out.println("Delete Error: file target with " + identifier + " identifier not exist in store" ); - + return false; } - - + + /** - * + * Rename item. + * * @param fileTarget (MANDATORY) * @param newName (MANDATORY) * @param extension OPTIONAL - string or null + * @return true, if successful */ private boolean renameItem(FileModel fileTarget, String newName, String extension) { @@ -899,7 +1042,7 @@ public class AsyncTreePanel extends LayoutContainer { record.set(ConstantsExplorer.NAME, newName+extension); else record.set(ConstantsExplorer.NAME, newName); - + return true; } else @@ -907,41 +1050,44 @@ public class AsyncTreePanel extends LayoutContainer { } else System.out.println("Rename Error: file target not exist in store" ); - + return false; } - - + + /** - * - * @param fileTarget (MANDATORY) + * Rename item. + * + * @param identifier the identifier * @param newName (MANDATORY) * @param extension OPTIONAL - string or null + * @return true, if successful */ public boolean renameItem(String identifier, String newName, String extension) { - + // FileModel fileTarget = treePanel.getStore().findModel(ConstantsExplorer.IDENTIFIER, identifier); - + FileModel fileTarget = getFileModelByIdentifier(identifier); - + return renameItem(fileTarget,newName,extension); - + } /** - * + * Delete item. + * * @param fileTarget (MANDATORY) - * @return + * @return true, if successful */ private boolean deleteItem(FileModel fileTarget) { Record record = treePanel.getStore().getRecord(fileTarget); - + if (record != null) { - + FileModel item = (FileModel) record.getModel(); treePanel.getStore().remove(item); - + return true; } else System.out.println("Record Error: file target with " @@ -951,59 +1097,82 @@ public class AsyncTreePanel extends LayoutContainer { return false; } - + + /** + * Adds the item. + * + * @param parentId the parent id + * @param child the child + * @param bool the bool + */ public void addItem(String parentId, FileModel child, boolean bool) { FileModel parent = getFileModelByIdentifier(parentId); if(parent!=null) addItem(parent,child,bool); } - + + /** + * Adds the item. + * + * @param parent the parent + * @param child the child + * @param bool the bool + */ private void addItem(FileModel parent, FileModel child, boolean bool) { - store.add(parent, child, bool); + store.add(parent, child, bool); } /** - * - * @param parent + * Sets the expand tree level. + * + * @param parent the parent * @param bool expand true/false */ private void setExpandTreeLevel(FileModel parent, boolean bool) { treePanel.setExpanded(parent, bool); } - + /** - * - * @param identifier - * @return + * Checks if is expanded. + * + * @param identifier the identifier + * @return true, if is expanded */ public boolean isExpanded(String identifier){ - + if(identifier==null) return false; - - + + FileModel fileTarget = getFileModelByIdentifier(identifier); - + if(fileTarget==null) return false; - + return treePanel.isExpanded(fileTarget); } - + + /** + * Sets the expand tree level. + * + * @param identifier the identifier + * @param bool the bool + */ public void setExpandTreeLevel(String identifier, boolean bool) { FileModel item = getFileModelByIdentifier(identifier); if(item!=null) - treePanel.setExpanded(item, bool); + treePanel.setExpanded(item, bool); } - + /** - * - * @param identifier - * @return + * Select item. + * + * @param identifier the identifier + * @return true, if successful */ public boolean selectItem(String identifier){ - + FileModel fileTarget = getFileModelByIdentifier(identifier); if(fileTarget!=null){ treePanel.getSelectionModel().select(fileTarget, true); //Select the item @@ -1011,9 +1180,15 @@ public class AsyncTreePanel extends LayoutContainer { } return false; } - + + /** + * Re select item. + * + * @param identifier the identifier + * @return true, if successful + */ public boolean reSelectItem(String identifier){ - + FileModel fileTarget = getFileModelByIdentifier(identifier); if(fileTarget!=null){ treePanel.getSelectionModel().deselect(fileTarget); @@ -1022,10 +1197,16 @@ public class AsyncTreePanel extends LayoutContainer { } return false; } - + + /** + * Select item. + * + * @param fileTarget the file target + * @return true, if successful + */ @SuppressWarnings("unused") private boolean selectItem(FileModel fileTarget){ - + if(fileTarget!=null){ treePanel.getSelectionModel().select(fileTarget, true); //Select the item return true; @@ -1033,78 +1214,142 @@ public class AsyncTreePanel extends LayoutContainer { return false; } + /** + * Checks if is sub tree loaded. + * + * @return true, if is sub tree loaded + */ public boolean isSubTreeLoaded() { return isSubTreeLoaded; } + /** + * Sets the sub tree loaded. + * + * @param isSubTreeLoaded the new sub tree loaded + */ public void setSubTreeLoaded(boolean isSubTreeLoaded) { this.isSubTreeLoaded = isSubTreeLoaded; } - + /** - * Select root by default + * Select root by default. */ public void removeAllAndRecoveryRoot(){ store.removeAll(); - loadRootItem(scopeId,true); + loadRootItem(scopeId,true); } - + + /** + * Removes the all and recovery root. + * + * @param selectRoot the select root + */ public void removeAllAndRecoveryRoot(boolean selectRoot){ store.removeAll(); - loadRootItem(scopeId,selectRoot); + loadRootItem(scopeId,selectRoot); } - + + /** + * Select root item. + */ public void selectRootItem(){ FileModel selectedItem = treePanel.getSelectionModel().getSelectedItem(); if(selectedItem!=null) treePanel.getSelectionModel().deselect(selectedItem); - + treePanel.getSelectionModel().select(store.getRootItems().get(0), true); //select root item } - + + /** + * Deselect item. + * + * @param identifier the identifier + */ public void deselectItem(String identifier){ FileModel fileTarget = getFileModelByIdentifier(identifier); if(fileTarget!=null) treePanel.getSelectionModel().deselect(fileTarget); } - + + /** + * Deselect item. + * + * @param fileTarget the file target + */ public void deselectItem(FileModel fileTarget){ if(fileTarget!=null) treePanel.getSelectionModel().deselect(fileTarget); } - + + /** + * Gets the selected file model item. + * + * @return the selected file model item + */ public FileModel getSelectedFileModelItem(){ FileModel selectedItem = treePanel.getSelectionModel().getSelectedItem(); if(selectedItem!=null) return selectedItem; - + return store.getRootItems().get(0); //return root item } + /** + * Checks if is search. + * + * @return true, if is search + */ public boolean isSearch() { return isSearch; } + /** + * Sets the search. + * + * @param isSearch the new search + */ public void setSearch(boolean isSearch) { System.out.println("***Set Search: " + isSearch); this.isSearch = isSearch; } - + + /** + * Sets the size tree panel. + * + * @param width the width + * @param height the height + */ public void setSizeTreePanel(int width, int height){ treePanel.setSize(width, height); } + /** + * Gets the context menu tree. + * + * @return the context menu tree + */ public ContextMenuTree getContextMenuTree() { return contextMenuTree; } - + + /** + * Sets the header tree visible. + * + * @param bool the new header tree visible + */ public void setHeaderTreeVisible(boolean bool){ cp.setHeaderVisible(bool); } - + + /** + * Gets the root item. + * + * @return the root item + */ public FileModel getRootItem(){ return treePanel.getStore().getRootItems().get(0); } - + } \ No newline at end of file diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java index e26e686..4e8d36d 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java @@ -542,6 +542,7 @@ public class GWTWorkspaceBuilder { // startTime = System.currentTimeMillis(); for (WorkspaceItem item : listItems){ + logger.debug("item: "+item.getName()+ "is root? " +item.isRoot()); listFileModel.add(buildGXTFileModelItem(item,parentFolderModel)); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java index 5613ea0..2edbd12 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java @@ -2672,7 +2672,6 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT try { LiferayUserManager l = new LiferayUserManager(); GCubeUser user = l.getUserByUsername(username); - workspaceLogger.info("My login first name is: "+user.getFirstName()); firstName = user.getFirstName(); lastName = user.getLastName(); email = user.getEmail(); @@ -2687,9 +2686,39 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT } } - return new UserBean(username, firstName, lastName, email, publishRights); + + UserBean us = new UserBean(username, firstName, lastName, email, publishRights); + workspaceLogger.info("Returning myLogin: "+us); + + return us; } + /* (non-Javadoc) + * @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService#getMyLogin() + */ + @Override + public String getMyFirstName(){ + ASLSession asl = WsUtil.getAslSession(this.getThreadLocalRequest().getSession()); + String username = asl.getUsername(); + String firstName = ""; + if (isWithinPortal() && username.compareTo(WsUtil.TEST_USER) != 0) { + try { + LiferayUserManager l = new LiferayUserManager(); + GCubeUser user = l.getUserByUsername(username); + workspaceLogger.info("My login first name is: "+user.getFirstName()); + firstName = user.getFirstName(); + }catch (UserManagementSystemException e) { + workspaceLogger.error("UserManagementSystemException for username: "+username); + } + catch (UserRetrievalFault e) { + workspaceLogger.error("UserRetrievalFault for username: "+username); + } + + } + return firstName; + } + + /** * Update acl for vr eby group name. * diff --git a/src/main/java/org/gcube/portlets/user/workspace/shared/UserBean.java b/src/main/java/org/gcube/portlets/user/workspace/shared/UserBean.java index 8a4b11f..0405d3f 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/shared/UserBean.java +++ b/src/main/java/org/gcube/portlets/user/workspace/shared/UserBean.java @@ -2,60 +2,145 @@ package org.gcube.portlets.user.workspace.shared; import java.io.Serializable; -@SuppressWarnings("serial") public class UserBean implements Serializable { + + /** + * + */ + private static final long serialVersionUID = 6779963164440480883L; + private String username; private String firstName; private String lastName; private String email; private Boolean cataloguePermission; - public UserBean(String username, String firstName, String lastName, - String email, Boolean cataloguePermission) { - super(); - this.cataloguePermission = cataloguePermission; - this.username = username; - this.firstName = firstName; - this.lastName = lastName; - this.email = email; - } public UserBean() { } - public String getUsername() { - return username; - } - public void setUsername(String username) { + + public UserBean(String username, String firstName, String lastName, String email, Boolean cataloguePermission) { this.username = username; - } - public String getFirstName() { - return firstName; - } - public void setFirstName(String firstName) { this.firstName = firstName; - } - public String getLastName() { - return lastName; - } - public void setLastName(String lastName) { this.lastName = lastName; - } - public String getEmail() { - return email; - } - public void setEmail(String email) { this.email = email; - } - public Boolean hasCataloguePermission() { - return cataloguePermission; - } - public void setCataloguePermission(Boolean cataloguePermission) { this.cataloguePermission = cataloguePermission; } + + /** + * @return the username + */ + public String getUsername() { + + return username; + } + + + /** + * @return the firstName + */ + public String getFirstName() { + + return firstName; + } + + + /** + * @return the lastName + */ + public String getLastName() { + + return lastName; + } + + + /** + * @return the email + */ + public String getEmail() { + + return email; + } + + + /** + * @return the cataloguePermission + */ + public Boolean getCataloguePermission() { + + return cataloguePermission; + } + + + /** + * @param username the username to set + */ + public void setUsername(String username) { + + this.username = username; + } + + + /** + * @param firstName the firstName to set + */ + public void setFirstName(String firstName) { + + this.firstName = firstName; + } + + + /** + * @param lastName the lastName to set + */ + public void setLastName(String lastName) { + + this.lastName = lastName; + } + + + /** + * @param email the email to set + */ + public void setEmail(String email) { + + this.email = email; + } + + + /** + * @param cataloguePermission the cataloguePermission to set + */ + public void setCataloguePermission(Boolean cataloguePermission) { + + this.cataloguePermission = cataloguePermission; + } + + public Boolean hasCataloguePermission() { + return cataloguePermission; + } + + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ @Override public String toString() { - return "UserBean [username=" + username + ", firstName=" + firstName - + ", lastName=" + lastName + ", email=" + email - + ", cataloguePermission=" + cataloguePermission + "]"; + + StringBuilder builder = new StringBuilder(); + builder.append("UserBean [username="); + builder.append(username); + builder.append(", firstName="); + builder.append(firstName); + builder.append(", lastName="); + builder.append(lastName); + builder.append(", email="); + builder.append(email); + builder.append(", cataloguePermission="); + builder.append(cataloguePermission); + builder.append("]"); + return builder.toString(); } + + }