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 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<Result> 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) {

View File

@ -53,6 +53,7 @@ public class GxtTreePanel extends LayoutContainer {
// to keep track of information associated to the selected item
private LinkedHashMap<String, String> 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<FileModel>() {
// to manage item click event
treePanel.addListener(Events.OnClick,
new Listener<TreePanelEvent<FileModel>>() {
@Override
public void selectionChanged(
SelectionChangedEvent<FileModel> se) {
public void handleEvent(TreePanelEvent<FileModel> be) {
// TODO Auto-generated method stub
// the selected element
List<FileModel> 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<FileModel>() {
//
// @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
// tree
// eventBus.fireEvent(new SelectedItemEvent());
treePanel.addListener(Events.Collapse,
new Listener<TreePanelEvent<FileModel>>() {
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");
// 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<FileModel> 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<String, FileModel> 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<Result> DBInfo = new ArrayList<Result>();
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<FileModel> 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