From 4a6d76af4e18dec7a6a0819fc37ae3e8f0a3dfb5 Mon Sep 17 00:00:00 2001 From: Loredana Liccardo Date: Mon, 28 Jul 2014 15:57:06 +0000 Subject: [PATCH] bug fixed related to the item selection in the tree. Bug Fixed adding the selection based on the id (associated to each item). Corrections in class FileModel e GxtTreePanel. git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet@99044 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/datamodel/FileModel.java | 19 +- .../client/panels/GxtTreePanel.java | 484 +++++++++++++----- 2 files changed, 377 insertions(+), 126 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/FileModel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/FileModel.java index 459e4c3..27ae503 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/FileModel.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/datamodel/FileModel.java @@ -11,7 +11,7 @@ public class FileModel extends BaseModelData implements Serializable { private static final long serialVersionUID = 1L; - private static int ID = 0; + private static int ID = 1; // private int id; private boolean isExpanded = true; @@ -24,6 +24,8 @@ public class FileModel extends BaseModelData implements Serializable { private boolean isSchema = false; // set if the object is a database private boolean isDatabase = false; + // set if the node in the tree is collapsed + private boolean isCollapsed = false; // to keep track information about the database private List DBInfo = null; @@ -50,6 +52,13 @@ public class FileModel extends BaseModelData implements Serializable { setId(); } + + //constructor for the root element in the tree + public FileModel(String name, int id) { + setName(name); + set("ID", id); + + } public void setId() { set("ID", ID++); @@ -212,6 +221,14 @@ public class FileModel extends BaseModelData implements Serializable { } + public void setIsCollapsed(boolean value) { + isCollapsed = true; + } + + public boolean getIsCollapsed() { + return isCollapsed; + } + @Override public boolean equals(Object obj) { if (obj != null && obj instanceof FileModel) { diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java index 57c3cc8..3fe5a5b 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtTreePanel.java @@ -53,6 +53,7 @@ public class GxtTreePanel extends LayoutContainer { // to keep track of information associated to the selected item private LinkedHashMap infoOnSelectedItem; + private FileModel currentSelectedItem=null; // the GWT logger private static Logger rootLogger = Logger.getLogger("GxtTreePanel"); @@ -152,6 +153,8 @@ public class GxtTreePanel extends LayoutContainer { // select root item treePanel.getSelectionModel().select(store.getRootItems().get(0), true); + currentSelectedItem = store.getRootItems().get(0); +// previousSelectedItem = store.getRootItems().get(0); // expand level 1 treePanel.setExpanded(store.getRootItems().get(0), true); @@ -164,71 +167,128 @@ public class GxtTreePanel extends LayoutContainer { private void addListeners() { - // to manage the selection item event in the tree - treePanel.getSelectionModel().addSelectionChangedListener( - new SelectionChangedListener() { + // to manage item click event + treePanel.addListener(Events.OnClick, + new Listener>() { @Override - public void selectionChanged( - SelectionChangedEvent se) { + public void handleEvent(TreePanelEvent be) { + // TODO Auto-generated method stub - // the selected element - List data = treePanel.getSelectionModel() - .getSelectedItems(); + // get the selected item + FileModel selectedItem = (FileModel) be.getNode() + .getModel(); - FileModel selectedItem = data.get(0); - value = data.get(0).get("name"); +// System.out.println("ID: " + selectedItem.getId()); +// System.out.println("ID: " +// + currentSelectedItem.getId()); - // System.out.println("GxtTreePanel Value: " - // + data.get(0).get("name")); + //update the current selected item considering the id + if (selectedItem.getId() != currentSelectedItem + .getId()) { - // print check -// System.out.println("GxtTreePanel--> selected item: " -// + value); + System.out.println("item changed"); + + currentSelectedItem = selectedItem; - rootLogger.log(Level.INFO, - "GxtTreePanel-> selected item: " + value); + // deselect the previous item + treePanel.getSelectionModel().deselectAll(); + + //select the current item + treePanel.getSelectionModel().select( + currentSelectedItem, true); + + } + // else if + // ((currentSelectedItem.getId()==previousSelectedItem + // .getId())&&(currentSelectedItem.getId()!=1)){ + // + // previousSelectedItem = currentSelectedItem; + // + // currentSelectedItem = selectedItem; + // + // // select the expanded item + // treePanel.getSelectionModel().deselectAll(); + // + // treePanel.getSelectionModel().select( + // currentSelectedItem, true); + // + // } + // else if ((currentSelectedItem.getId() == + // previousSelectedItem + // .getId()) && (currentSelectedItem.getId() != 1)) { + // + // } + + // // select the clicked item + // if + // (!(treePanel.getSelectionModel().isSelected(selectedItem))){ + + // System.out.println("isSelected: " + // + treePanel.getSelectionModel().isSelected( + // selectedItem)); + + // } + + rootLogger.log( + Level.INFO, + "GxtTreePanel-> item clicked: " + + selectedItem.getName()); // get the depth level - treeDepthSelectedItem = store.getDepth(data.get(0)); + treeDepthSelectedItem = store.getDepth(selectedItem); rootLogger.log(Level.INFO, "selectedItem level depth: " + treeDepthSelectedItem); - // get children number for the selected item - int numChildrenFolder = store.getChildCount(data.get(0)); + // // get children number for the selected item + // int numChildrenFolder = store + // .getChildCount(selectedItem); // recover the appropriate information whenever an // element is selected // setInfoOnSelectedItem(data.get(0)); + + //if the the selected item was collapsed, it should not expanded otherwise it is expanded - treePanel.setExpanded(data.get(0), true); // expand - // level of - // the - // element - // selected + if (!(selectedItem.getIsCollapsed())) { + + if (!(be.getNode().isExpanded())) { + + treePanel.setExpanded(selectedItem, true); // expand + // level of + // the + // element + // selected + } + + } // do not make a rpc call if it has already been called - if ((data.get(0).isLoaded() == true)) { + if ((selectedItem.isLoaded() == true)) { // set information - setInfoOnSelectedItem(data.get(0)); + setInfoOnSelectedItem(selectedItem); // fire event when an item has been selected in the // tree eventBus.fireEvent(new SelectedItemEvent()); - } else if (data.get(0).isDatabase()) { + } else if (selectedItem.isDatabase()) { - setInfoOnSelectedItem(data.get(0)); + setInfoOnSelectedItem(selectedItem); // fire event when an item has been selected in the // tree eventBus.fireEvent(new SelectedItemEvent()); - } else if (data.get(0).isSchema()) { + } else if (selectedItem.isSchema()) { - setInfoOnSelectedItem(data.get(0)); + setInfoOnSelectedItem(selectedItem); + + // // select the clicked item + // treePanel.getSelectionModel() + // .select(selectedItem, true); // fire event when an item has been selected in the // tree @@ -236,70 +296,181 @@ public class GxtTreePanel extends LayoutContainer { } - // // check to make the RPC call only one time. The - // // selected item has not loaded - // if ((numChildrenFolder == 0) - // && (data.get(0).isLoaded() != true)) { - // - // // treePanel.disableEvents(true); - // - // // selectedItem.setIsSchema(false); - // - // switch (treeDepthSelectedItem) { - // // case 1: - // // - // // loadResources(data.get(0)); - // // break; - // - // case 2: // the selected item is the resource - // // selectedItem.setIsSchema(false); - // - // // to mask the tree panel - // treePanel.mask("Loading", "x-mask-loading"); - // - // loadDBInfo(data.get(0), treePanel); - // // loadDBInfo(data.get(0)); - // break; - // - // case 3: // the selected item is a database - // - // if (selectedItem.getDatabaseType().equals( - // ConstantsPortlet.POSTGRES)) { - // - // // to mask the tree panel - // treePanel.mask("Loading", "x-mask-loading"); - // // load schema for postgres database - // - // // selectedItem.setIsSchema(false); - // loadSchema(data.get(0)); - // } - // // else { - // // // System.out.println("database mysql: " + - // // // data.get(0).getName() + - // // // data.get(0).getDatabaseType()); - // // - // // // load tables for mysql database - // // loadTables(data.get(0)); - // // } - // break; - // - // // case 4: // load tables for postgres database - // // // selectedItem.setIsSchema(false); - // // loadTables(data.get(0)); - // // break; - // - // } - // } + } + }); - // else { - // //if the selected item has already been been loaded - // - // setInfoOnSelectedItem(data.get(0)); - // } + // // to manage the selection item event in the tree + // treePanel.getSelectionModel().addSelectionChangedListener( + // new SelectionChangedListener() { + // + // @Override + // public void selectionChanged( + // SelectionChangedEvent se) { + // + // // the selected element + // List data = treePanel.getSelectionModel() + // .getSelectedItems(); + // + // FileModel selectedItem = data.get(0); + // value = data.get(0).get("name"); + // + // // System.out.println("GxtTreePanel Value: " + // // + data.get(0).get("name")); + // + // // print check + // // System.out.println("GxtTreePanel--> selected item: " + // // + value); + // + // rootLogger.log(Level.INFO, + // "GxtTreePanel-> selected item: " + value); + // + // // get the depth level + // treeDepthSelectedItem = store.getDepth(data.get(0)); + // + // rootLogger.log(Level.INFO, "selectedItem level depth: " + // + treeDepthSelectedItem); + // + // // get children number for the selected item + // int numChildrenFolder = store.getChildCount(data.get(0)); + // + // // recover the appropriate information whenever an + // // element is selected + // + // // setInfoOnSelectedItem(data.get(0)); + // + // treePanel.setExpanded(data.get(0), true); // expand + // // level of + // // the + // // element + // // selected + // + // // do not make a rpc call if it has already been called + // if ((data.get(0).isLoaded() == true)) { + // // set information + // setInfoOnSelectedItem(data.get(0)); + // + // // fire event when an item has been selected in the + // // tree + // eventBus.fireEvent(new SelectedItemEvent()); + // + // } else if (data.get(0).isDatabase()) { + // + // setInfoOnSelectedItem(data.get(0)); + // + // // fire event when an item has been selected in the + // // tree + // eventBus.fireEvent(new SelectedItemEvent()); + // + // } else if (data.get(0).isSchema()) { + // + // setInfoOnSelectedItem(data.get(0)); + // + // // fire event when an item has been selected in the + // // tree + // eventBus.fireEvent(new SelectedItemEvent()); + // + // } + // + // // // check to make the RPC call only one time. The + // // // selected item has not loaded + // // if ((numChildrenFolder == 0) + // // && (data.get(0).isLoaded() != true)) { + // // + // // // treePanel.disableEvents(true); + // // + // // // selectedItem.setIsSchema(false); + // // + // // switch (treeDepthSelectedItem) { + // // // case 1: + // // // + // // // loadResources(data.get(0)); + // // // break; + // // + // // case 2: // the selected item is the resource + // // // selectedItem.setIsSchema(false); + // // + // // // to mask the tree panel + // // treePanel.mask("Loading", "x-mask-loading"); + // // + // // loadDBInfo(data.get(0), treePanel); + // // // loadDBInfo(data.get(0)); + // // break; + // // + // // case 3: // the selected item is a database + // // + // // if (selectedItem.getDatabaseType().equals( + // // ConstantsPortlet.POSTGRES)) { + // // + // // // to mask the tree panel + // // treePanel.mask("Loading", "x-mask-loading"); + // // // load schema for postgres database + // // + // // // selectedItem.setIsSchema(false); + // // loadSchema(data.get(0)); + // // } + // // // else {type filter text + // // // // System.out.println("database mysql: " + + // // // // data.get(0).getName() + + // // // // data.get(0).getDatabaseType()); + // // // + // // // // load tables for mysql database + // // // loadTables(data.get(0)); + // // // } + // // break; + // // + // // // case 4: // load tables for postgres database + // // // // selectedItem.setIsSchema(false); + // // // loadTables(data.get(0)); + // // // break; + // // + // // } + // // } + // + // // else { + // // //if the selected item has already been been loaded + // // + // // setInfoOnSelectedItem(data.get(0)); + // // } + // + // // // fire event when an item has been selected in the + // // tree + // // eventBus.fireEvent(new SelectedItemEvent()); + // + // } + // }); - // // fire event when an item has been selected in the - // tree - // eventBus.fireEvent(new SelectedItemEvent()); + treePanel.addListener(Events.Collapse, + new Listener>() { + public void handleEvent(final TreePanelEvent be) { + + //get the item + FileModel selectedItem = (FileModel) (be.getNode() + .getModel()); + + //set the collapsed state to true value + selectedItem.setIsCollapsed(true); + + rootLogger.log(Level.INFO, "collapsed item: " + + selectedItem.getName()); +// +// if (selectedItem.getId() != currentSelectedItem +// .getId()) { +// +//// previousSelectedItem = currentSelectedItem; +// +// currentSelectedItem = selectedItem; +// +// // select the expanded item +// treePanel.getSelectionModel().deselectAll(); +// +// treePanel.getSelectionModel().select( +// currentSelectedItem, true); +// +// } + + + +// System.out.println("ID: " + selectedItem.getId()); } }); @@ -310,30 +481,81 @@ public class GxtTreePanel extends LayoutContainer { // rootLogger.log(Level.INFO, "Expand event"); + // get the selected item FileModel selectedItem = (FileModel) (be.getNode() .getModel()); + //set the collapsed state of the item to false value + selectedItem.setIsCollapsed(false); + +// System.out.println("ID: " + selectedItem.getId()); +// +// System.out.println("ID: " +// + currentSelectedItem.getId()); + + //update the current selected item considering the id + if (selectedItem.getId() != currentSelectedItem + .getId()) { + + currentSelectedItem = selectedItem; + + // deselect the previous item + treePanel.getSelectionModel().deselectAll(); + //select the current item + treePanel.getSelectionModel().select( + currentSelectedItem, true); + + } + + // if (currentSelectedItem.getId() != + // previousSelectedItem + // .getId()) { + // + // previousSelectedItem = currentSelectedItem; + // + // currentSelectedItem = selectedItem; + // + // // select the expanded item + // treePanel.getSelectionModel().deselectAll(); + // + // treePanel.getSelectionModel().select( + // currentSelectedItem, true); + // + // } + + // else if (currentSelectedItem.getId()==1){ + // + // previousSelectedItem = currentSelectedItem; + // + // currentSelectedItem = selectedItem; + // + // // select the expanded item + // treePanel.getSelectionModel().deselectAll(); + // + // treePanel.getSelectionModel().select( + // currentSelectedItem, true); + // + // } + // print check -// System.out.println("GxtTreePanel--> expanded item: " -// + value); + // System.out.println("GxtTreePanel--> expanded item: " + // + value); rootLogger.log(Level.INFO, "expanded item: " + selectedItem.getName()); - // select the expanded item - treePanel.getSelectionModel() - .select(selectedItem, true); - int numChildrenFolder = store .getChildCount(selectedItem); - // set information - setInfoOnSelectedItem(selectedItem); + // get the depth level treeDepthSelectedItem = store.getDepth(selectedItem); rootLogger.log(Level.INFO, "selectedItem level depth: " + treeDepthSelectedItem); + + // set information + setInfoOnSelectedItem(selectedItem); // check to make the RPC call only one time. The // selected item has not loaded @@ -385,7 +607,7 @@ public class GxtTreePanel extends LayoutContainer { this.mask("Loading", "x-mask-loading"); - final FileModel root = new FileModel("Resources"); + final FileModel root = new FileModel("Resources", 0); store.insert(root, 0, true); // store.add(root, true); @@ -411,7 +633,7 @@ public class GxtTreePanel extends LayoutContainer { // System.out.println("FAILURE"); // print check -// System.out.println("GxtTreePanel--> FAILURE RPC getResource"); + // System.out.println("GxtTreePanel--> FAILURE RPC getResource"); rootLogger.log(Level.SEVERE, "FAILURE RPC getResource"); @@ -428,7 +650,7 @@ public class GxtTreePanel extends LayoutContainer { public void onSuccess(List result) { // print check -// System.out.println("GxtTreePanel--> SUCCESS RPC getResource"); + // System.out.println("GxtTreePanel--> SUCCESS RPC getResource"); rootLogger.log(Level.SEVERE, "SUCCESS RPC getResource"); @@ -474,8 +696,8 @@ public class GxtTreePanel extends LayoutContainer { // System.out.println("FAILURE"); // print check -// System.out -// .println("GxtTreePanel--> FAILURE RPC getDBInfo"); + // System.out + // .println("GxtTreePanel--> FAILURE RPC getDBInfo"); rootLogger.log(Level.SEVERE, "FAILURE RPC getDBInfo"); @@ -494,8 +716,8 @@ public class GxtTreePanel extends LayoutContainer { LinkedHashMap result) { // print check -// System.out -// .println("GxtTreePanel--> SUCCESS RPC getDBInfo"); + // System.out + // .println("GxtTreePanel--> SUCCESS RPC getDBInfo"); rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBInfo"); @@ -519,6 +741,8 @@ public class GxtTreePanel extends LayoutContainer { String DBName = null; List DBInfo = new ArrayList(); + + FileModel child=null;; for (j = (i * 5); j < (i + 1) * 5; j++) { @@ -535,6 +759,9 @@ public class GxtTreePanel extends LayoutContainer { "Database Name", result.get( array[j].toString()) .getName()); + child = result.get( + array[j].toString()); + DBInfo.add(row); } @@ -594,25 +821,31 @@ public class GxtTreePanel extends LayoutContainer { } - FileModel child = new FileModel(DBName); +// FileModel child = new FileModel(DBName); - // set that the item is a database - child.setIsDatabase(true); - child.setDBInfo(DBInfo); + if (child!=null){ + + // set that the item is a database + child.setIsDatabase(true); + child.setDBInfo(DBInfo); - // check print - // rootLogger.log(Level.INFO, "DatabaseType: " + - // DatabaseType); + // check print + // rootLogger.log(Level.INFO, "DatabaseType: " + + // DatabaseType); - // set the database type considering the driver - // infromation - child.setDatabaseType(DatabaseType); + // set the database type considering the driver + // infromation + child.setDatabaseType(DatabaseType); - if (DatabaseType.equals(ConstantsPortlet.MYSQL)) { - child.setIsExpanded(false); - treePanel.setExpanded(child, false); + if (DatabaseType.equals(ConstantsPortlet.MYSQL)) { + child.setIsExpanded(false); + treePanel.setExpanded(child, false); + } + children.add(child); + } - children.add(child); + + } addChildren(element, children); } @@ -664,7 +897,7 @@ public class GxtTreePanel extends LayoutContainer { // "GxtTreePanel-> FAILURE RPC getDBSchema"); // print check -// System.out.println("GxtTreePanel--> FAILURE RPC getDBSchema"); + // System.out.println("GxtTreePanel--> FAILURE RPC getDBSchema"); rootLogger.log(Level.SEVERE, "FAILURE RPC getDBSchema"); @@ -679,9 +912,9 @@ public class GxtTreePanel extends LayoutContainer { @Override public void onSuccess(List result) { - + // print check -// System.out.println("GxtTreePanel--> SUCCESS RPC getDBSchema"); + // System.out.println("GxtTreePanel--> SUCCESS RPC getDBSchema"); rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBSchema"); @@ -758,6 +991,7 @@ public class GxtTreePanel extends LayoutContainer { element.setResourceName(ResourceName); element.setDatabaseName(DatabaseName); + } else if ((treeDepthSelectedItem == 4) && (element.isSchema() == false)) { // the