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
This commit is contained in:
Loredana Liccardo 2014-07-28 15:57:06 +00:00
parent e219cfcb11
commit 4a6d76af4e
2 changed files with 377 additions and 126 deletions

View File

@ -11,7 +11,7 @@ public class FileModel extends BaseModelData implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static int ID = 0; private static int ID = 1;
// private int id; // private int id;
private boolean isExpanded = true; private boolean isExpanded = true;
@ -24,6 +24,8 @@ public class FileModel extends BaseModelData implements Serializable {
private boolean isSchema = false; private boolean isSchema = false;
// set if the object is a database // set if the object is a database
private boolean isDatabase = false; private boolean isDatabase = false;
// set if the node in the tree is collapsed
private boolean isCollapsed = false;
// to keep track information about the database // to keep track information about the database
private List<Result> DBInfo = null; private List<Result> DBInfo = null;
@ -50,6 +52,13 @@ public class FileModel extends BaseModelData implements Serializable {
setId(); setId();
} }
//constructor for the root element in the tree
public FileModel(String name, int id) {
setName(name);
set("ID", id);
}
public void setId() { public void setId() {
set("ID", ID++); 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 @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if (obj != null && obj instanceof FileModel) { if (obj != null && obj instanceof FileModel) {

View File

@ -53,6 +53,7 @@ public class GxtTreePanel extends LayoutContainer {
// to keep track of information associated to the selected item // to keep track of information associated to the selected item
private LinkedHashMap<String, String> infoOnSelectedItem; private LinkedHashMap<String, String> infoOnSelectedItem;
private FileModel currentSelectedItem=null;
// the GWT logger // the GWT logger
private static Logger rootLogger = Logger.getLogger("GxtTreePanel"); private static Logger rootLogger = Logger.getLogger("GxtTreePanel");
@ -152,6 +153,8 @@ public class GxtTreePanel extends LayoutContainer {
// select root item // select root item
treePanel.getSelectionModel().select(store.getRootItems().get(0), true); treePanel.getSelectionModel().select(store.getRootItems().get(0), true);
currentSelectedItem = store.getRootItems().get(0);
// previousSelectedItem = store.getRootItems().get(0);
// expand level 1 // expand level 1
treePanel.setExpanded(store.getRootItems().get(0), true); treePanel.setExpanded(store.getRootItems().get(0), true);
@ -164,71 +167,128 @@ public class GxtTreePanel extends LayoutContainer {
private void addListeners() { private void addListeners() {
// to manage the selection item event in the tree // to manage item click event
treePanel.getSelectionModel().addSelectionChangedListener( treePanel.addListener(Events.OnClick,
new SelectionChangedListener<FileModel>() { new Listener<TreePanelEvent<FileModel>>() {
@Override @Override
public void selectionChanged( public void handleEvent(TreePanelEvent<FileModel> be) {
SelectionChangedEvent<FileModel> se) { // TODO Auto-generated method stub
// the selected element // get the selected item
List<FileModel> data = treePanel.getSelectionModel() FileModel selectedItem = (FileModel) be.getNode()
.getSelectedItems(); .getModel();
FileModel selectedItem = data.get(0); // System.out.println("ID: " + selectedItem.getId());
value = data.get(0).get("name"); // System.out.println("ID: "
// + currentSelectedItem.getId());
// System.out.println("GxtTreePanel Value: " //update the current selected item considering the id
// + data.get(0).get("name")); if (selectedItem.getId() != currentSelectedItem
.getId()) {
// print check System.out.println("item changed");
// System.out.println("GxtTreePanel--> selected item: "
// + value); currentSelectedItem = selectedItem;
rootLogger.log(Level.INFO, // deselect the previous item
"GxtTreePanel-> selected item: " + value); 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 // get the depth level
treeDepthSelectedItem = store.getDepth(data.get(0)); treeDepthSelectedItem = store.getDepth(selectedItem);
rootLogger.log(Level.INFO, "selectedItem level depth: " rootLogger.log(Level.INFO, "selectedItem level depth: "
+ treeDepthSelectedItem); + treeDepthSelectedItem);
// get children number for the selected item // // get children number for the selected item
int numChildrenFolder = store.getChildCount(data.get(0)); // int numChildrenFolder = store
// .getChildCount(selectedItem);
// recover the appropriate information whenever an // recover the appropriate information whenever an
// element is selected // element is selected
// setInfoOnSelectedItem(data.get(0)); // 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 if (!(selectedItem.getIsCollapsed())) {
// level of
// the if (!(be.getNode().isExpanded())) {
// element
// selected treePanel.setExpanded(selectedItem, true); // expand
// level of
// the
// element
// selected
}
}
// do not make a rpc call if it has already been called // do not make a rpc call if it has already been called
if ((data.get(0).isLoaded() == true)) { if ((selectedItem.isLoaded() == true)) {
// set information // set information
setInfoOnSelectedItem(data.get(0)); setInfoOnSelectedItem(selectedItem);
// fire event when an item has been selected in the // fire event when an item has been selected in the
// tree // tree
eventBus.fireEvent(new SelectedItemEvent()); 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 // fire event when an item has been selected in the
// tree // tree
eventBus.fireEvent(new SelectedItemEvent()); 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 // fire event when an item has been selected in the
// tree // 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 { // // to manage the selection item event in the tree
// //if the selected item has already been been loaded // treePanel.getSelectionModel().addSelectionChangedListener(
// // new SelectionChangedListener<FileModel>() {
// setInfoOnSelectedItem(data.get(0)); //
// } // @Override
// public void selectionChanged(
// SelectionChangedEvent<FileModel> se) {
//
// // the selected element
// List<FileModel> 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 treePanel.addListener(Events.Collapse,
// tree new Listener<TreePanelEvent<FileModel>>() {
// eventBus.fireEvent(new SelectedItemEvent()); public void handleEvent(final TreePanelEvent<FileModel> 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"); // rootLogger.log(Level.INFO, "Expand event");
// get the selected item
FileModel selectedItem = (FileModel) (be.getNode() FileModel selectedItem = (FileModel) (be.getNode()
.getModel()); .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 // print check
// System.out.println("GxtTreePanel--> expanded item: " // System.out.println("GxtTreePanel--> expanded item: "
// + value); // + value);
rootLogger.log(Level.INFO, "expanded item: " rootLogger.log(Level.INFO, "expanded item: "
+ selectedItem.getName()); + selectedItem.getName());
// select the expanded item
treePanel.getSelectionModel()
.select(selectedItem, true);
int numChildrenFolder = store int numChildrenFolder = store
.getChildCount(selectedItem); .getChildCount(selectedItem);
// set information
setInfoOnSelectedItem(selectedItem);
// get the depth level // get the depth level
treeDepthSelectedItem = store.getDepth(selectedItem); treeDepthSelectedItem = store.getDepth(selectedItem);
rootLogger.log(Level.INFO, "selectedItem level depth: " rootLogger.log(Level.INFO, "selectedItem level depth: "
+ treeDepthSelectedItem); + treeDepthSelectedItem);
// set information
setInfoOnSelectedItem(selectedItem);
// check to make the RPC call only one time. The // check to make the RPC call only one time. The
// selected item has not loaded // selected item has not loaded
@ -385,7 +607,7 @@ public class GxtTreePanel extends LayoutContainer {
this.mask("Loading", "x-mask-loading"); 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.insert(root, 0, true);
// store.add(root, true); // store.add(root, true);
@ -411,7 +633,7 @@ public class GxtTreePanel extends LayoutContainer {
// System.out.println("FAILURE"); // System.out.println("FAILURE");
// print check // print check
// System.out.println("GxtTreePanel--> FAILURE RPC getResource"); // System.out.println("GxtTreePanel--> FAILURE RPC getResource");
rootLogger.log(Level.SEVERE, "FAILURE RPC getResource"); rootLogger.log(Level.SEVERE, "FAILURE RPC getResource");
@ -428,7 +650,7 @@ public class GxtTreePanel extends LayoutContainer {
public void onSuccess(List<FileModel> result) { public void onSuccess(List<FileModel> result) {
// print check // print check
// System.out.println("GxtTreePanel--> SUCCESS RPC getResource"); // System.out.println("GxtTreePanel--> SUCCESS RPC getResource");
rootLogger.log(Level.SEVERE, "SUCCESS RPC getResource"); rootLogger.log(Level.SEVERE, "SUCCESS RPC getResource");
@ -474,8 +696,8 @@ public class GxtTreePanel extends LayoutContainer {
// System.out.println("FAILURE"); // System.out.println("FAILURE");
// print check // print check
// System.out // System.out
// .println("GxtTreePanel--> FAILURE RPC getDBInfo"); // .println("GxtTreePanel--> FAILURE RPC getDBInfo");
rootLogger.log(Level.SEVERE, "FAILURE RPC getDBInfo"); rootLogger.log(Level.SEVERE, "FAILURE RPC getDBInfo");
@ -494,8 +716,8 @@ public class GxtTreePanel extends LayoutContainer {
LinkedHashMap<String, FileModel> result) { LinkedHashMap<String, FileModel> result) {
// print check // print check
// System.out // System.out
// .println("GxtTreePanel--> SUCCESS RPC getDBInfo"); // .println("GxtTreePanel--> SUCCESS RPC getDBInfo");
rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBInfo"); rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBInfo");
@ -519,6 +741,8 @@ public class GxtTreePanel extends LayoutContainer {
String DBName = null; String DBName = null;
List<Result> DBInfo = new ArrayList<Result>(); List<Result> DBInfo = new ArrayList<Result>();
FileModel child=null;;
for (j = (i * 5); j < (i + 1) * 5; j++) { for (j = (i * 5); j < (i + 1) * 5; j++) {
@ -535,6 +759,9 @@ public class GxtTreePanel extends LayoutContainer {
"Database Name", result.get( "Database Name", result.get(
array[j].toString()) array[j].toString())
.getName()); .getName());
child = result.get(
array[j].toString());
DBInfo.add(row); 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 if (child!=null){
child.setIsDatabase(true);
child.setDBInfo(DBInfo); // set that the item is a database
child.setIsDatabase(true);
child.setDBInfo(DBInfo);
// check print // check print
// rootLogger.log(Level.INFO, "DatabaseType: " + // rootLogger.log(Level.INFO, "DatabaseType: " +
// DatabaseType); // DatabaseType);
// set the database type considering the driver // set the database type considering the driver
// infromation // infromation
child.setDatabaseType(DatabaseType); child.setDatabaseType(DatabaseType);
if (DatabaseType.equals(ConstantsPortlet.MYSQL)) { if (DatabaseType.equals(ConstantsPortlet.MYSQL)) {
child.setIsExpanded(false); child.setIsExpanded(false);
treePanel.setExpanded(child, false); treePanel.setExpanded(child, false);
}
children.add(child);
} }
children.add(child);
} }
addChildren(element, children); addChildren(element, children);
} }
@ -664,7 +897,7 @@ public class GxtTreePanel extends LayoutContainer {
// "GxtTreePanel-> FAILURE RPC getDBSchema"); // "GxtTreePanel-> FAILURE RPC getDBSchema");
// print check // print check
// System.out.println("GxtTreePanel--> FAILURE RPC getDBSchema"); // System.out.println("GxtTreePanel--> FAILURE RPC getDBSchema");
rootLogger.log(Level.SEVERE, "FAILURE RPC getDBSchema"); rootLogger.log(Level.SEVERE, "FAILURE RPC getDBSchema");
@ -679,9 +912,9 @@ public class GxtTreePanel extends LayoutContainer {
@Override @Override
public void onSuccess(List<FileModel> result) { public void onSuccess(List<FileModel> result) {
// print check // print check
// System.out.println("GxtTreePanel--> SUCCESS RPC getDBSchema"); // System.out.println("GxtTreePanel--> SUCCESS RPC getDBSchema");
rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBSchema"); rootLogger.log(Level.SEVERE, "SUCCESS RPC getDBSchema");
@ -758,6 +991,7 @@ public class GxtTreePanel extends LayoutContainer {
element.setResourceName(ResourceName); element.setResourceName(ResourceName);
element.setDatabaseName(DatabaseName); element.setDatabaseName(DatabaseName);
} }
else if ((treeDepthSelectedItem == 4) && (element.isSchema() == false)) { // the else if ((treeDepthSelectedItem == 4) && (element.isSchema() == false)) { // the