X-Git-Url: https://code.grnet.gr/git/pithos/blobdiff_plain/16baf609bb746ccbc6cd8da7213ee74cf474f2a9..69e3e8896fe8ad5f93cab8f13764906b35517974:/src/gr/ebs/gss/client/Groups.java diff --git a/src/gr/ebs/gss/client/Groups.java b/src/gr/ebs/gss/client/Groups.java index 411f37d..d59a7ae 100644 --- a/src/gr/ebs/gss/client/Groups.java +++ b/src/gr/ebs/gss/client/Groups.java @@ -27,27 +27,33 @@ import gr.ebs.gss.client.rest.resource.GroupsResource; import java.util.List; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.event.dom.client.ContextMenuEvent; +import com.google.gwt.event.dom.client.ContextMenuHandler; +import com.google.gwt.event.logical.shared.OpenEvent; +import com.google.gwt.event.logical.shared.OpenHandler; +import com.google.gwt.event.logical.shared.SelectionEvent; +import com.google.gwt.event.logical.shared.SelectionHandler; +import com.google.gwt.resources.client.ClientBundle; +import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.KeyboardListener; import com.google.gwt.user.client.ui.Tree; -import com.google.gwt.user.client.ui.TreeImages; import com.google.gwt.user.client.ui.TreeItem; -import com.google.gwt.user.client.ui.TreeListener; /** * A component that displays a list of the user's groups. */ -public class Groups extends Composite implements TreeListener { +public class Groups extends Composite implements SelectionHandler, OpenHandler { /** * An image bundle for this widget. */ - public interface Images extends TreeImages, FileMenu.Images, EditMenu.Images, GroupMenu.Images, MessagePanel.Images { + public interface Images extends Tree.Resources, ClientBundle, FileMenu.Images, EditMenu.Images, GroupMenu.Images, MessagePanel.Images { /** * Will bundle the file 'groupevent.png' residing in the package @@ -55,18 +61,19 @@ public class Groups extends Composite implements TreeListener { * * @return the image prototype */ - @Resource("gr/ebs/gss/resources/groupevent.png") - AbstractImagePrototype groupImage(); + @Source("gr/ebs/gss/resources/groupevent.png") + ImageResource groupImage(); - @Resource("gr/ebs/gss/resources/editdelete.png") - AbstractImagePrototype delete(); - } - private boolean ctrlKeyPressed = false; - - private boolean leftClicked = false; + @Override + @Source("gr/ebs/gss/resources/editdelete.png") + ImageResource delete(); - private boolean rightClicked = false; + } + /** + * cached latest group selection (for selecting and expanding on refresh) + */ + private String selectedGroup = null; /** * The tree widget that displays the groups. @@ -84,16 +91,12 @@ public class Groups extends Composite implements TreeListener { private TreeItem previous; /** - * A cached copy of the currently changed group widget. - */ - private TreeItem changed; - - /** * The widget's image bundle. */ private final Images images; private GroupContextMenu menu; + /** * Constructs a new groups widget with a bundle of images. * @@ -104,73 +107,60 @@ public class Groups extends Composite implements TreeListener { images = newImages; menu = new GroupContextMenu(images); tree = new Tree(newImages); - tree.addTreeListener(this); + this.addHandler(new ContextMenuHandler() { + + @Override + public void onContextMenu(ContextMenuEvent event) { + if(current==null) return; + int left = current.getAbsoluteLeft() + 40; + int top = current.getAbsoluteTop() + 20; + showPopup(left, top); + + } + }, ContextMenuEvent.getType()); + tree.addSelectionHandler(this); + tree.addOpenHandler(this); + tree.setAnimationEnabled(true); initWidget(tree); setStylePrimaryName("gss-Groups"); sinkEvents(Event.ONCONTEXTMENU); sinkEvents(Event.ONMOUSEUP); + sinkEvents(Event.ONDBLCLICK); } - public void onBrowserEvent(Event event) { - switch (DOM.eventGetType(event)) { - case Event.ONKEYDOWN: - int key = DOM.eventGetKeyCode(event); - if (key == KeyboardListener.KEY_CTRL) - ctrlKeyPressed = true; - break; - - case Event.ONKEYUP: - key = DOM.eventGetKeyCode(event); - if (key == KeyboardListener.KEY_CTRL) - ctrlKeyPressed = false; - break; - - case Event.ONMOUSEDOWN: - if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) - rightClicked = true; - else if (DOM.eventGetButton(event) == Event.BUTTON_LEFT) - leftClicked = true; - break; - - case Event.ONMOUSEUP: - if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) - rightClicked = false; - else if (DOM.eventGetButton(event) == Event.BUTTON_LEFT) - leftClicked = false; - break; - } - super.onBrowserEvent(event); - } /** * Make an RPC call to retrieve the groups that belong to the specified * user. - * - * @param userId the user ID */ public void updateGroups() { - GetCommand gg = new GetCommand(GroupsResource.class, GSS.get().getCurrentUserResource().getGroupsPath()){ + GetCommand gg = new GetCommand(GroupsResource.class, GSS.get().getCurrentUserResource().getGroupsPath(),null){ + @Override public void onComplete() { GroupsResource res = getResult(); - MultipleGetCommand ga = new MultipleGetCommand(GroupResource.class, res.getGroupPaths().toArray(new String[]{})){ + MultipleGetCommand ga = new MultipleGetCommand(GroupResource.class, res.getGroupPaths().toArray(new String[]{}), null){ + @Override public void onComplete() { List groupList = getResult(); tree.clear(); for (int i = 0; i < groupList.size(); i++) { - final TreeItem item = new TreeItem(imageItemHTML(images.groupImage(), groupList.get(i).getName())); - item.setUserObject(groupList.get(i)); + final TreeItem item = new TreeItem(); + item.setWidget(imageItemHTML(images.groupImage(), groupList.get(i).getName(),item)); + item.setUserObject(groupList.get(i)); +// item.getElement().setId("groupsList."+ groupList.get(i).getName()); tree.addItem(item); - updateUsers( item); + updateUsers(item); } } - + @Override public void onError(Throwable t) { GWT.log("", t); } + @Override public void onError(String p, Throwable throwable) { GWT.log("Path:"+p, throwable); } @@ -178,35 +168,12 @@ public class Groups extends Composite implements TreeListener { DeferredCommand.addCommand(ga); } - + @Override public void onError(Throwable t) { } }; DeferredCommand.addCommand(gg); - /* - GetGroupsCommand gg = new GetGroupsCommand(GSS.get().getCurrentUserResource().getGroupsPath()){ - - public void onComplete() { - GroupsResource res = getResource(); - GetAllGroupsCommand ga = new GetAllGroupsCommand(res.getGroupPaths().toArray(new String[]{})){ - - public void onComplete() { - List groupList = getList(); - tree.clear(); - for (int i = 0; i < groupList.size(); i++) { - final TreeItem item = new TreeItem(imageItemHTML(images.groupImage(), groupList.get(i).getName())); - item.setUserObject(groupList.get(i)); - tree.addItem(item); - updateUsers( item); - } - } - }; - DeferredCommand.addCommand(ga); - } - }; - DeferredCommand.addCommand(gg);*/ - } /** @@ -216,7 +183,6 @@ public class Groups extends Composite implements TreeListener { GSS.get().getStatusPanel().updateCurrentlyShowing(null); //clear stats - nothing to show for the groups tab } - /** * A helper method to simplify adding tree items that have attached images. * {@link #addImageItem(TreeItem, String) code} @@ -226,8 +192,9 @@ public class Groups extends Composite implements TreeListener { * @param imageProto * @return the new tree item */ - private TreeItem addImageItem(final TreeItem parent, final String title, final AbstractImagePrototype imageProto) { - final TreeItem item = new TreeItem(imageItemHTML(imageProto, title)); + private TreeItem addImageItem(final TreeItem parent, final String title, final ImageResource imageProto) { + final TreeItem item = new TreeItem(); + item.setWidget(imageItemHTML(imageProto, title,item)); parent.addItem(item); return item; } @@ -239,55 +206,38 @@ public class Groups extends Composite implements TreeListener { * @param title the title of the item * @return the resultant HTML */ - private HTML imageItemHTML(final AbstractImagePrototype imageProto, final String title) { - final HTML link = new HTML("" + "" + imageProto.getHTML() + " " + title + "" + ""); + private HTML imageItemHTML(final ImageResource imageProto, final String title,final TreeItem item) { + final HTML link = new HTML("" + "" + AbstractImagePrototype.create(imageProto).getHTML() + " " + title + "" + ""){ + @Override + public void onBrowserEvent(Event event) { + switch (DOM.eventGetType(event)) { + case Event.ONMOUSEDOWN: + if (DOM.eventGetButton(event) == NativeEvent.BUTTON_RIGHT || DOM.eventGetButton(event) == NativeEvent.BUTTON_LEFT) + onSelection(item); + break; + } + super.onBrowserEvent(event); + + } + }; + link.sinkEvents(Event.ONMOUSEDOWN); return link; } - /* - * (non-Javadoc) - * - * @see com.google.gwt.user.client.ui.TreeListener#onTreeItemSelected(com.google.gwt.user.client.ui.TreeItem) - */ - public void onTreeItemSelected(final TreeItem item) { - final Object selected = item.getUserObject(); - // Preserve the previously selected item, so that the current's - // onClick() method gets a chance to find it. - if (getPrevious() != null) - getPrevious().getWidget().removeStyleName("gss-SelectedRow"); - setCurrent(item); - getCurrent().getWidget().addStyleName("gss-SelectedRow"); - setPrevious(getCurrent()); - GSS.get().setCurrentSelection(selected); - if (rightClicked) { - int left = item.getAbsoluteLeft() + 40; - int top = item.getAbsoluteTop() + 20; - showPopup(left, top); - } - } + protected void showPopup(final int x, final int y) { - if (getCurrent() == null) + if (getCurrent() == null){ + GWT.log("[POPUP IS NULL]", null); return; + } menu.hide(); menu = new GroupContextMenu(images); menu.setPopupPosition(x, y); menu.show(); } - /* - * (non-Javadoc) - * - * @see com.google.gwt.user.client.ui.TreeListener#onTreeItemStateChanged(com.google.gwt.user.client.ui.TreeItem) - */ - public void onTreeItemStateChanged(final TreeItem item) { - // Ignore closed items. - if (!item.getState()) - return; - setChanged(item); - updateUsers( item); - } /** * Generate an RPC request to retrieve the users of the specified group for @@ -300,7 +250,8 @@ public class Groups extends Composite implements TreeListener { void updateUsers(final TreeItem groupItem) { if(groupItem.getUserObject() instanceof GroupResource){ GroupResource res = (GroupResource) groupItem.getUserObject(); - MultipleGetCommand gu = new MultipleGetCommand(GroupUserResource.class, res.getUserPaths().toArray(new String[]{})){ + MultipleGetCommand gu = new MultipleGetCommand(GroupUserResource.class, res.getUserPaths().toArray(new String[]{}), null){ + @Override public void onComplete() { List users = getResult(); groupItem.removeItems(); @@ -308,13 +259,19 @@ public class Groups extends Composite implements TreeListener { final TreeItem userItem = addImageItem(groupItem, users.get(i).getName() + " <" + users.get(i).getUsername() + ">", images.permUser()); userItem.setUserObject(users.get(i)); } + if (selectedGroup != null && groupItem.getText().equals(selectedGroup)) { + //SelectionEvent.fire(tree, groupItem);; + onSelection(groupItem); + groupItem.setState(true); + } } - + @Override public void onError(Throwable t) { GWT.log("", t); } + @Override public void onError(String p, Throwable throwable) { GWT.log("Path:"+p, throwable); } @@ -343,15 +300,6 @@ public class Groups extends Composite implements TreeListener { } /** - * Modify the changed. - * - * @param newChanged the changed to set - */ - private void setChanged(final TreeItem newChanged) { - changed = newChanged; - } - - /** * Retrieve the previous. * * @return the previous @@ -369,14 +317,40 @@ public class Groups extends Composite implements TreeListener { previous = newPrevious; } - /* - * (non-Javadoc) - * - * @see com.google.gwt.user.client.ui.UIObject#setVisible(boolean) - */ + @Override public void setVisible(final boolean visible) { super.setVisible(visible); if (visible) updateGroups(); } + + @Override + public void onSelection(SelectionEvent event) { + final TreeItem item = (TreeItem)event.getSelectedItem(); + onSelection(item); + + } + + private void onSelection(TreeItem item){ + final Object selected = item.getUserObject(); + // Preserve the previously selected item, so that the current's + // onClick() method gets a chance to find it. + if (getPrevious() != null) + getPrevious().getWidget().removeStyleName("gss-SelectedRow"); + setCurrent(item); + getCurrent().getWidget().addStyleName("gss-SelectedRow"); + setPrevious(getCurrent()); + GSS.get().setCurrentSelection(selected); + //cache the latest top level node (group) for selecting and expanding on refresh + if (item.getParentItem() == null) + selectedGroup = item.getText(); + else + selectedGroup = item.getParentItem().getText(); + } + + @Override + public void onOpen(OpenEvent event) { + final TreeItem item = (TreeItem) event.getTarget(); + updateUsers(item); + } }