show create table implemented and grid component made editable for tabledetails and dbinfo panels.

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet@98414 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Loredana Liccardo 2014-07-04 09:07:19 +00:00
parent b3ff8e2c8d
commit 6807afaf2c
9 changed files with 464 additions and 68 deletions

View File

@ -37,5 +37,8 @@ public interface GWTdbManagerService extends RemoteService {
List<Row> parseCVSString(List<Result> result, List<String> attrNames)
throws Exception;
LinkedHashMap<String, FileModel> getTableDetails(LinkedHashMap<String, String> dataInput) throws Exception;
}

View File

@ -36,4 +36,7 @@ public interface GWTdbManagerServiceAsync {
void sample(LinkedHashMap<String, String> dataInput,
AsyncCallback<List<Result>> callback);
void getTableDetails(LinkedHashMap<String, String> dataInput,
AsyncCallback<LinkedHashMap<String, FileModel>> callback);
}

View File

@ -20,6 +20,8 @@ public class FileModel extends BaseModelData implements Serializable {
private List<Result> DBInfo = null;
private boolean isDBInfoDisplayed = false;
private List<Result> TableDetails = null;
private boolean isTableDetailsDisplayed = false;
public FileModel() {
setId();
@ -108,6 +110,14 @@ public class FileModel extends BaseModelData implements Serializable {
public List<Result> getDBInfo() {
return DBInfo;
}
public void setTableDetails(List<Result> data) {
TableDetails = data;
}
public List<Result> getTableDetails() {
return TableDetails;
}
public void setIsDBInfoDisplayed(boolean value) {
isDBInfoDisplayed = value;
@ -116,6 +126,14 @@ public class FileModel extends BaseModelData implements Serializable {
public boolean isDBInfoDisplayed() {
return isDBInfoDisplayed;
}
public void setTableDetailsDisplayed(boolean value) {
isTableDetailsDisplayed = value;
}
public boolean isTableDetailsDisplayed() {
return isTableDetailsDisplayed;
}
@Override
public boolean equals(Object obj) {

View File

@ -0,0 +1,31 @@
package org.gcube.portlets.user.databasesmanager.client.events;
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.ShowCreateTableEventHandler;
import com.google.gwt.event.shared.GwtEvent;
public class ShowCreateTableEvent extends GwtEvent<ShowCreateTableEventHandler> {
public static Type<ShowCreateTableEventHandler> TYPE = new Type<ShowCreateTableEventHandler>();
@Override
protected void dispatch(ShowCreateTableEventHandler handler) {
// TODO Auto-generated method stub
handler.onShowCreateTable(this);
}
@Override
public Type<ShowCreateTableEventHandler> getAssociatedType() {
// TODO Auto-generated method stub
return TYPE;
}
public EventsTypeEnum getKey() {
// TODO Auto-generated method stub
return EventsTypeEnum.SHOW_CREATE_TABLE_EVENT;
}
}

View File

@ -0,0 +1,11 @@
package org.gcube.portlets.user.databasesmanager.client.events.interfaces;
import org.gcube.portlets.user.databasesmanager.client.events.ShowCreateTableEvent;
import com.google.gwt.event.shared.EventHandler;
public interface ShowCreateTableEventHandler extends EventHandler{
public void onShowCreateTable(ShowCreateTableEvent showCreateTableEvent);
}

View File

@ -3,6 +3,7 @@ package org.gcube.portlets.user.databasesmanager.client.panels;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@ -13,9 +14,11 @@ import org.gcube.portlets.user.databasesmanager.client.datamodel.Row;
import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData;
import org.gcube.portlets.user.databasesmanager.client.events.SamplingEvent;
import org.gcube.portlets.user.databasesmanager.client.events.SelectedItemEvent;
import org.gcube.portlets.user.databasesmanager.client.events.ShowCreateTableEvent;
import org.gcube.portlets.user.databasesmanager.client.events.SubmitQueryEvent;
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SamplingEventHandler;
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SelectedItemEventHandler;
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.ShowCreateTableEventHandler;
import org.gcube.portlets.user.databasesmanager.client.events.interfaces.SubmitQueryEventHandler;
import org.gcube.portlets.user.databasesmanager.client.toolbar.GxtToolbarFunctionality;
import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet;
@ -40,8 +43,11 @@ import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.grid.CellEditor;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.EditorGrid;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
@ -99,8 +105,6 @@ public class GxtBorderLayoutPanel extends ContentPanel {
}
private void initLayout() {
north.setLayout(new FitLayout());
north.setTopComponent(toolbar.getToolBar());
@ -160,7 +164,7 @@ public class GxtBorderLayoutPanel extends ContentPanel {
centerBottom = new ContentPanel();
centerBottom.setLayout(new FitLayout());
centerBottom.setHeading("Information Details");
centerBottom.setScrollMode(Scroll.AUTO);
centerBottom.setScrollMode(Scroll.NONE);
BorderLayoutData centerUpperData = new BorderLayoutData(
LayoutRegion.NORTH, 250, 100, 250);
@ -310,20 +314,29 @@ public class GxtBorderLayoutPanel extends ContentPanel {
});
eventBus.addHandler(SamplingEvent.TYPE, new SamplingEventHandler() {
@Override
public void onSampling(SamplingEvent samplingEvent) {
// TODO Auto-generated method stub
sample();
}
});
eventBus.addHandler(ShowCreateTableEvent.TYPE,
new ShowCreateTableEventHandler() {
@Override
public void onShowCreateTable(
ShowCreateTableEvent showCreateTableEvent) {
// TODO Auto-generated method stub
getTableDetails();
}
});
}
private void submitQuery() {
@ -507,7 +520,7 @@ public class GxtBorderLayoutPanel extends ContentPanel {
}
private void sample() {
this.mask("Loading", "x-mask-loading");
// System.out.println("Start RPC - submitQuery");
@ -571,7 +584,7 @@ public class GxtBorderLayoutPanel extends ContentPanel {
@Override
public void onFailure(Throwable caught) {
// Window.alert(caught.getMessage());
// Window.alert(caught.getMessage());
// System.out.println("FAILURE");
rootLogger.log(Level.SEVERE, "FAILURE RPC sample");
@ -584,8 +597,6 @@ public class GxtBorderLayoutPanel extends ContentPanel {
public void onSuccess(List<Result> result) {
rootLogger.log(Level.SEVERE, "SUCCESS RPC sample");
rows = new ArrayList<Row>();
@ -610,8 +621,8 @@ public class GxtBorderLayoutPanel extends ContentPanel {
// start the parsing of the submit result in order to obtain a table
private void parseResult(List<Result> result) {
if (this.isMasked()){
if (this.isMasked()) {
this.unmask();
}
@ -631,8 +642,6 @@ public class GxtBorderLayoutPanel extends ContentPanel {
@Override
public void onSuccess(List<Row> rows) {
// System.out.println("Success StartParse");
@ -646,67 +655,64 @@ public class GxtBorderLayoutPanel extends ContentPanel {
form.unmask();
form.hide();
}
// else {
}
if (rows != null) {
// else {
// Dialog form = toolbar.getDialogForm();
//
// if (form.isMasked())
// form.unmask();
//
// form.hide();
if (rows != null) {
// Display the submit query result as a table
Dialog submitResult = new Dialog();
submitResult.setLayout(new FitLayout());
submitResult.setHeading("Result");
// Dialog form = toolbar.getDialogForm();
//
// if (form.isMasked())
// form.unmask();
//
// form.hide();
submitResult.setResizable(false);
// submitResult.setHeading("Submit Query");
// submitResult.setWidth(290);
// submitResult.setHeight(250);
// Display the submit query result as a table
Dialog submitResult = new Dialog();
submitResult.setLayout(new FitLayout());
submitResult.setHeading("Result");
submitResult.setModal(true);
submitResult.setBlinkModal(true);
submitResult.setResizable(false);
// submitResult.setHeading("Submit Query");
// submitResult.setWidth(290);
// submitResult.setHeight(250);
// submitResult.setBodyStyle("padding:9px;");
submitResult.setSize(600, 400);
// submitResult.setScrollMode(Scroll.AUTO);
submitResult.setScrollMode(Scroll.NONE);
submitResult.setHideOnButtonClick(true);
submitResult.setModal(true);
submitResult.setBlinkModal(true);
submitResult.setMaximizable(true);
// submitResult.addText("Result Table");
// submitResult.setBodyStyle("padding:9px;");
submitResult.setSize(600, 400);
// submitResult.setScrollMode(Scroll.AUTO);
submitResult.setScrollMode(Scroll.NONE);
submitResult.setHideOnButtonClick(true);
ListStore<Row> store = new ListStore<Row>();
store.add(rows);
submitResult.setMaximizable(true);
// submitResult.addText("Result Table");
Grid<Row> grid;
ListStore<Row> store = new ListStore<Row>();
store.add(rows);
grid = new Grid<Row>(store, createColumnModel());
Grid<Row> grid;
// grid.setAutoExpandColumn("value");
grid.setBorders(true);
grid = new Grid<Row>(store, createColumnModel());
// grid.setAutoWidth(true);
// grid.setAutoExpandColumn("value");
grid.setBorders(true);
RowData data = new RowData(.5, 1);
data.setMargins(new Margins(6));
// grid.setAutoWidth(true);
submitResult.add(grid, data);
RowData data = new RowData(.5, 1);
data.setMargins(new Margins(6));
submitResult.show();
submitResult.add(grid, data);
submitResult.show();
}
// }
}
// }
}
});
@ -776,6 +782,7 @@ public class GxtBorderLayoutPanel extends ContentPanel {
column.setHeader("Index");
column.setWidth(100);
column.setSortable(false);
configs.add(column);
@ -831,13 +838,20 @@ public class GxtBorderLayoutPanel extends ContentPanel {
}
private ColumnModel createColumnModelForDBInfo(List<Result> result) {
List<ColumnConfig> configs = new ArrayList<ColumnConfig>();
ColumnConfig column = new ColumnConfig();
column.setId("index");
column.setHeader("Property");
column.setWidth(100);
column.setSortable(false);
// column1.setSortable(false);
TextField<String> textProperty = new TextField<String>();
// text.setAllowBlank(false);
column.setEditor(new CellEditor(textProperty));
configs.add(column);
@ -845,8 +859,12 @@ public class GxtBorderLayoutPanel extends ContentPanel {
column.setId("value");
column.setHeader("Value");
column.setWidth(600);
column.setSortable(false);
// column2.setSortable(false);
TextField<String> textValue = new TextField<String>();
// text.setAllowBlank(false);
column.setEditor(new CellEditor(textValue));
configs.add(column);
@ -873,22 +891,226 @@ public class GxtBorderLayoutPanel extends ContentPanel {
ListStore<Result> store = new ListStore<Result>();
store.add(dataDB);
Grid<Result> grid = new Grid<Result>(store,
createColumnModelForDBInfo(dataDB));
// Grid<Result> grid = new Grid<Result>(store,
// createColumnModelForDBInfo(dataDB));
EditorGrid<Result> grid = new EditorGrid<Result>(store,
createColumnModelForDBInfo(dataDB));
// grid.setAutoExpandColumn("name");
grid.setBorders(true);
// grid.setAutoWidth(true);
RowData data = new RowData(.5, 1);
data.setMargins(new Margins(6));
// RowData data = new RowData(.5, 1);
// data.setMargins(new Margins(6));
centerUpper.removeAll();
centerUpper.add(grid, data);
// centerUpper.add(grid, data);
centerUpper.add(grid);
centerUpper.layout(true);
}
private void getTableDetails() {
this.mask("Loading", "x-mask-loading");
// System.out.println("Start RPC - submitQuery");
rootLogger.log(Level.SEVERE, "Start RPC - getTableDetails");
// get the selected table
List<FileModel> data = treePanel.getTreePanel().getSelectionModel()
.getSelectedItems();
// the selected item is a table
final FileModel selectedTable = data.get(0);
rootLogger.log(Level.INFO, "the selected table is: " + selectedTable);
// recover data inputs
LinkedHashMap<String, String> dataInput = new LinkedHashMap<String, String>();
// check if the table has an associated schema
FileModel schema;
FileModel database;
FileModel resource;
if (treePanel.getTreeStore().getParent(selectedTable).isSchema()) {
schema = treePanel.getTreeStore().getParent(selectedTable);
database = treePanel.getTreeStore().getParent(schema);
resource = treePanel.getTreeStore().getParent(database);
dataInput.put("ResourceName", resource.getName());
dataInput.put("DatabaseName", database.getName());
dataInput.put("SchemaName", schema.getName());
dataInput.put("TableName", selectedTable.getName());
rootLogger.log(Level.INFO, "ResourceName: " + resource.getName());
rootLogger.log(Level.INFO, "DatabaseName: " + database.getName());
rootLogger.log(Level.INFO, "SchemaName: " + schema.getName());
rootLogger
.log(Level.INFO, "SchemaName: " + selectedTable.getName());
} else {
// the table has not a schema
database = treePanel.getTreeStore().getParent(selectedTable);
resource = treePanel.getTreeStore().getParent(database);
dataInput.put("ResourceName", resource.getName());
dataInput.put("DatabaseName", database.getName());
dataInput.put("SchemaName", "");
dataInput.put("TableName", selectedTable.getName());
rootLogger.log(Level.INFO, "ResourceName: " + resource.getName());
rootLogger.log(Level.INFO, "DatabaseName: " + database.getName());
rootLogger.log(Level.INFO, "SchemaName: " + "");
rootLogger
.log(Level.INFO, "SchemaName: " + selectedTable.getName());
}
// call remote service
RPCservice.getTableDetails(dataInput,
new AsyncCallback<LinkedHashMap<String, FileModel>>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
rootLogger.log(Level.SEVERE,
"FAILURE RPC getTableDetails");
MessageBox.alert("Error ",
"<br/>Message:" + caught.getMessage(), null);
}
@Override
public void onSuccess(
LinkedHashMap<String, FileModel> result) {
// TODO Auto-generated method stub
rootLogger.log(Level.SEVERE,
"SUCCESS RPC getTableDetails");
// details are recovered about the selected table
if (result.size() != 0) {
// recover keys from the result
Set<String> keys = result.keySet();
Object[] array = keys.toArray();
// System.out.println("array size: " +
// array.length);
// recover details
List<Result> TableDetails = new ArrayList<Result>();
for (int i = 0; i < result.size(); i++) {
if (array[i].toString().contains("CreateTable")) {
// recover the showCreateTable statement
Result row = new Result("CreateTable",
result.get(array[i].toString())
.getName());
TableDetails.add(row);
}
if (array[i].toString()
.contains("Column Names")) {
// recover the column names
Result row = new Result("Column Names",
result.get(array[i].toString())
.getName());
TableDetails.add(row);
}
if (array[i].toString().contains("NumberRows")) {
// recover the column names
Result row = new Result("NumberRows",
result.get(array[i].toString())
.getName());
TableDetails.add(row);
}
}
selectedTable.setTableDetails(TableDetails);
displayTableDetails(selectedTable);
}
}
});
}
private void displayTableDetails(FileModel table) {
rootLogger.log(Level.INFO, "displaying table details");
List<Result> tableDetails = table.getTableDetails();
// System.out.println("GxtBorderLayout->size info: " + dataDB.size());
rootLogger.log(Level.INFO, "details size: " + tableDetails.size());
ListStore<Result> store = new ListStore<Result>();
store.add(tableDetails);
// Grid<Result> grid = new Grid<Result>(store,
// createColumnModelForDBInfo(tableDetails));
EditorGrid<Result> grid = new EditorGrid<Result>(store,
createColumnModelForDBInfo(tableDetails));
// grid.setAutoExpandColumn("name");
grid.setBorders(true);
// grid.setAutoWidth(true);
// RowData data = new RowData(.5, .1);
// data.setMargins(new Margins(6));
centerBottom.removeAll();
// centerBottom.add(grid, data);
centerBottom.add(grid);
centerBottom.layout(true);
if (this.isMasked()) {
this.unmask();
}
}
}

View File

@ -670,7 +670,7 @@ public class GxtTreePanel extends LayoutContainer {
dataInput.put("DatabaseName", database.getName());
dataInput.put("SchemaName", element.getName());
System.out.println("schema name: " + element.getName());
// System.out.println("schema name: " + element.getName());
rootLogger.log(Level.INFO, "ResourceName: " + resource.getName());
rootLogger.log(Level.INFO, "DatabaseName: " + database.getName());

View File

@ -6,6 +6,7 @@ import java.util.logging.Logger;
import org.gcube.portlets.user.databasesmanager.client.GWTdbManagerServiceAsync;
import org.gcube.portlets.user.databasesmanager.client.datamodel.SubmitQueryData;
import org.gcube.portlets.user.databasesmanager.client.events.SamplingEvent;
import org.gcube.portlets.user.databasesmanager.client.events.ShowCreateTableEvent;
import org.gcube.portlets.user.databasesmanager.client.events.SubmitQueryEvent;
import org.gcube.portlets.user.databasesmanager.client.form.GxtFormSubmitQuery;
import org.gcube.portlets.user.databasesmanager.client.utils.ConstantsPortlet;
@ -333,6 +334,21 @@ public class GxtToolbarFunctionality {
}
});
btnShowCreateTable.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
// TODO Auto-generated method stub
//fire event
eventBus.fireEvent(new ShowCreateTableEvent());
}
});
}
public void disableButtonOnToolbar(int infoTreeDepthSelectedItem,

View File

@ -576,6 +576,98 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements
return output;
}
@Override
public LinkedHashMap<String, FileModel> getTableDetails(
LinkedHashMap<String, String> dataInput) throws Exception {
// TODO Auto-generated method stub
List<Parameter> inputParameters = new ArrayList<Parameter>();
LinkedHashMap<String, FileModel> outputParameters = new LinkedHashMap<String, FileModel>();
// get list of algorithms
List<String> algorithms = new ArrayList<String>();
algorithms = getDatabaseManagerAlgorithms();
// get algorithmId
String algorithmId = null;
for (int i = 0; i < algorithms.size(); i++) {
if (algorithms.get(i).equals("GETTABLEDETAILS")) {
algorithmId = algorithms.get(i);
// System.out.println("algorithmId: " + algorithmId);
rootLogger.log(Level.SEVERE, "algorithmId: " + algorithmId);
}
}
// get input parameters of the algorithm
rootLogger.log(Level.SEVERE, "getting input parameters");
inputParameters = getParameters(algorithmId);
for (int i = 0; i < inputParameters.size(); i++) {
// System.out.println(inputParameters.get(i).getName());
rootLogger.log(Level.INFO, inputParameters.get(i).getName());
}
inputParameters.get(0).setValue(dataInput.get("ResourceName"));
inputParameters.get(1).setValue(dataInput.get("DatabaseName"));
inputParameters.get(2).setValue(dataInput.get("SchemaName"));
inputParameters.get(3).setValue(dataInput.get("TableName"));
// System.out.println("size outputMap pre computation: "
// + outputMap.size());
String computationId = startComputation(algorithmId, inputParameters);
// retrieve data
// System.out.println("output data retrieved");
// System.out.println("size outputMap: " + outputMap.size());
rootLogger.log(Level.SEVERE, "output data retrieved");
rootLogger.log(Level.SEVERE, "output data size: " + outputMap.size());
for (int i = 0; i < outputMap.size(); i++) {
// outputParameters.add(outputKey.get(String.valueOf(i)) + " "
// + outputMap.get(String.valueOf(i)));
FileModel obj = new FileModel(outputMap.get(String.valueOf(i)));
// obj.setIsLoaded(true);
// outputParameters.add(obj);
// System.out.println("value: " + outputMap.get(String.valueOf(i)));
// System.out.println("key: " + outputKey.get(String.valueOf(i)));
outputParameters.put(outputKey.get(String.valueOf(i)), obj);
}
return outputParameters;
}
public List<Row> parseCVSString(List<Result> result, List<String> attrNames)
throws Exception {