From 8e641ab1170653ab7cca82fc123eb47ecc5686f5 Mon Sep 17 00:00:00 2001 From: Loredana Liccardo Date: Fri, 29 Aug 2014 13:39:04 +0000 Subject: [PATCH] the dialog that shows the submit query result has been realized with the pagination. Further, the two hashmap on the server are refreshed when this dialog is closed from the user removing the not useful data related to the submit query git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet@99351 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/GWTdbManagerService.java | 13 +- .../client/GWTdbManagerServiceAsync.java | 11 +- .../client/panels/GxtBorderLayoutPanel.java | 441 +++++++++++++----- .../toolbar/GxtToolbarFunctionality.java | 21 +- .../server/GWTdbManagerServiceImpl.java | 253 +++++++++- 5 files changed, 567 insertions(+), 172 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java index ff25423..dd964d7 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerService.java @@ -23,9 +23,10 @@ public interface GWTdbManagerService extends RemoteService { List getDBSchema(LinkedHashMap dataInput) throws Exception; - List submitQuery(LinkedHashMap dataDB, + List submitQuery(LinkedHashMap dataDB, String query, boolean valueReadOnlyQuery, - boolean smartCorrectionQuery, String language, String UID) throws Exception; + boolean smartCorrectionQuery, String language, String UID) + throws Exception; List sample(LinkedHashMap dataInput) throws Exception; @@ -45,9 +46,11 @@ public interface GWTdbManagerService extends RemoteService { PagingLoadResult LoadTables(PagingLoadConfig config, LinkedHashMap dataInput, boolean SearchTable, String keyword) throws Exception; - - Boolean removeComputation(String uidSubmitQuery) throws Exception; - + PagingLoadResult loadSubmitResult(PagingLoadConfig config, + List listAttributes, String UID) throws Exception; + Boolean removeComputation(String submitQueryUID) throws Exception; + + void refreshDataOnServer(String submitQueryUID); } diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java index 2d2678f..ee0d2a0 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/GWTdbManagerServiceAsync.java @@ -2,7 +2,6 @@ package org.gcube.portlets.user.databasesmanager.client; import java.util.LinkedHashMap; import java.util.List; -import java.util.UUID; import org.gcube.portlets.user.databasesmanager.client.datamodel.FileModel; import org.gcube.portlets.user.databasesmanager.client.datamodel.Result; @@ -23,7 +22,7 @@ public interface GWTdbManagerServiceAsync { void submitQuery(LinkedHashMap dataDB, String query, boolean valueReadOnlyQuery, boolean smartCorrectionQuery, - String language, String UID, AsyncCallback> callback); + String language, String UID, AsyncCallback> callback); void parseCVSString(List result, List attrNames, AsyncCallback> callback); @@ -43,7 +42,13 @@ public interface GWTdbManagerServiceAsync { void LoadTables(PagingLoadConfig config, LinkedHashMap dataInput, boolean SearchTable, String keyword, AsyncCallback> callback); - + void removeComputation(String uidSubmitQuery, AsyncCallback callback); + + void loadSubmitResult(PagingLoadConfig config, + List listAttributes, String UID, + AsyncCallback> callback); + + void refreshDataOnServer(String submitQueryUID, AsyncCallback callback); } diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java index b55c56d..080c935 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/panels/GxtBorderLayoutPanel.java @@ -89,7 +89,7 @@ public class GxtBorderLayoutPanel extends ContentPanel { // top toolbar that contains the buttons private GxtToolbarFunctionality toolbar; - private List listAttributes; + // private List listAttributes; // bus to manage events private HandlerManager eventBus = null; // RPC service @@ -114,8 +114,8 @@ public class GxtBorderLayoutPanel extends ContentPanel { west = new ContentPanel(); center = new LayoutContainer(); treePanel = new GxtTreePanel(eventBus, service); -// toolbar = new GxtToolbarFunctionality(eventBus); - toolbar = new GxtToolbarFunctionality(eventBus, RPCservice); + // toolbar = new GxtToolbarFunctionality(eventBus); + toolbar = new GxtToolbarFunctionality(eventBus, RPCservice); this.setHeaderVisible(false); // hide the header of the panel @@ -260,7 +260,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { }); eventBus.addHandler(LoadTablesEvent.TYPE, new LoadTablesEventHandler() { - @Override public void onLoadTables(LoadTablesEvent loadTablesEvent) { // load tables @@ -270,7 +269,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { eventBus.addHandler(SubmitQueryEvent.TYPE, new SubmitQueryEventHandler() { - @Override public void onSubmitQuery(SubmitQueryEvent submitQueryEvent) { Integer dialogID = new Integer(submitQueryEvent @@ -281,7 +279,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { }); eventBus.addHandler(SamplingEvent.TYPE, new SamplingEventHandler() { - @Override public void onSampling(SamplingEvent samplingEvent) { sample(); @@ -290,7 +287,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { eventBus.addHandler(SmartSamplingEvent.TYPE, new SmartSamplingEventHandler() { - @Override public void onSmartSampling( SmartSamplingEvent smartSamplingEvent) { @@ -300,7 +296,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { eventBus.addHandler(RandomSamplingEvent.TYPE, new RandomSamplingEventHandler() { - @Override public void onRandomSampling( RandomSamplingEvent randomSamplingEvent) { @@ -310,7 +305,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { eventBus.addHandler(ShowCreateTableEvent.TYPE, new ShowCreateTableEventHandler() { - @Override public void onShowCreateTable( ShowCreateTableEvent showCreateTableEvent) { @@ -363,7 +357,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { String schema = ""; if (element.isDatabase()) { // the selected item is a database - rootLogger.log(Level.INFO, "selected element is a database "); database = element.getName(); @@ -373,9 +366,7 @@ public class GxtBorderLayoutPanel extends ContentPanel { dataInput.put("ResourceName", resource); dataInput.put("DatabaseName", database); dataInput.put("SchemaName", ""); - } else { // the selected item is a schema - rootLogger.log(Level.INFO, "selected element is a schema "); FileModel db = treePanel.getTreeStore().getParent(element); @@ -388,7 +379,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { dataInput.put("ResourceName", resource); dataInput.put("DatabaseName", database); dataInput.put("SchemaName", schema); - } // print check @@ -402,8 +392,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { @Override protected void load(Object loadConfig, final AsyncCallback> callback) { - // TODO Auto-generated method stub - rootLogger.log(Level.SEVERE, "Start RPC - getTables"); rootLogger.log(Level.INFO, "keyword rpc: " + keyword); @@ -414,7 +402,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { RPCservice.LoadTables((PagingLoadConfig) loadConfig, dataInput, startSearchTable, keyword, new AsyncCallback>() { - @Override public void onFailure(Throwable caught) { rootLogger.log(Level.SEVERE, @@ -440,7 +427,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { startSearchTable = false; } } - @Override public void onSuccess( PagingLoadResult result) { @@ -531,7 +517,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { toolBarTop.add(cancel); searchButton.addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { // start search calling the rpc @@ -566,7 +551,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { }); cancel.addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { // clear variables @@ -596,7 +580,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { // listener to manage the table selection in the grid grid.getSelectionModel().addSelectionChangedListener( new SelectionChangedListener() { - @Override public void selectionChanged( SelectionChangedEvent se) { @@ -609,7 +592,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { // listener to manage the table selection in the grid grid.addListener(Events.RowClick, new Listener>() { - @Override public void handleEvent(final GridEvent be) { @@ -634,7 +616,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { }); grid.addListener(Events.BeforeEdit, new Listener>() { - @Override public void handleEvent(final GridEvent be) { rootLogger.log(Level.INFO, "table edited: " @@ -650,7 +631,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { grid.addListener(Events.Attach, new Listener>() { public void handleEvent(GridEvent be) { - rootLogger.log(Level.INFO, "event Attach handled"); // disable the top toolbar at the first tables loading in such a @@ -732,7 +712,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { @Override public void componentSelected(ButtonEvent ce) { - keyword = null; startSearchTable = false; @@ -746,10 +725,8 @@ public class GxtBorderLayoutPanel extends ContentPanel { }); canc.addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { - keyword = null; startSearchTable = false; // refresh the database information panel @@ -758,7 +735,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { tablesLoaded.hide(); } }); - tablesLoaded.add(grid); tablesLoaded.show(); } @@ -791,12 +767,11 @@ public class GxtBorderLayoutPanel extends ContentPanel { final Dialog form = dialogList.get(dialogID); // get the data form related to the ID final SubmitQueryData dataQuery = submitQueryDataList.get(dialogID); - - - //get the UID related to submitQuery operation - LinkedHashMap uidSubmitQueryList = toolbar.getUIDSubmitQueryList(); - String UID = uidSubmitQueryList.get(dialogID); - + + // get the UID related to submitQuery operation + LinkedHashMap uidSubmitQueryList = toolbar + .getUIDSubmitQueryList(); + final String UID = uidSubmitQueryList.get(dialogID); // rootLogger.log(Level.INFO, "query: "+ dataQuery.getQuery() + // "submitquery->dialogID: " @@ -849,22 +824,17 @@ public class GxtBorderLayoutPanel extends ContentPanel { if (dialect.toUpperCase().contains(ConstantsPortlet.POSTGRES)) { language = ConstantsPortlet.POSTGRES; } - if (dialect.toUpperCase().contains(ConstantsPortlet.MYSQL)) { language = ConstantsPortlet.MYSQL; } rootLogger.log(Level.INFO, "Dialect used for smart correction: " + language); - - - - // remote rpc RPCservice.submitQuery(dataForSubmitQuery, dataQuery.getQuery(), true, - dataQuery.getSmartCorrection(), language, UID, - new AsyncCallback>() { + dataQuery.getSmartCorrection(), language, UID, + new AsyncCallback>() { // TO REMOVE data "true" as input if you manage the // read-only query in the form @@ -886,51 +856,249 @@ public class GxtBorderLayoutPanel extends ContentPanel { form.getBody().unmask(); } }; - // MessageBox.alert("Error ","
Cause:"+caught.getCause()+"
Message:"+caught.getMessage(), - // l); + MessageBox.alert("Error ", "
Message:" + caught.getMessage(), l); } @Override - public void onSuccess(List result) { - - if (result == null){ - - if (form.getBody().isMasked()) - form.getBody().unmask(); - - rootLogger.log(Level.SEVERE, "No results have been returned"); + public void onSuccess(List listAttributes) { + + if (form.getBody().isMasked()) + form.getBody().unmask(); + + if ((listAttributes == null) + || (listAttributes.size() == 0)) { + + // if (form.getBody().isMasked()) + // form.getBody().unmask(); + + rootLogger.log(Level.SEVERE, + "No results have been returned"); return; } - + rootLogger.log(Level.SEVERE, "SUCCESS RPC submitQuery"); - rootLogger.log(Level.SEVERE, - "output size: " + result.size()); + rootLogger.log(Level.SEVERE, "output size: " + + listAttributes.size()); // recover query // Result query = result.remove(0); // recover converted query // Result convertedQuery; - if (dataQuery.getSmartCorrection() == true) { - result.remove(0); - // convertedQuery = result.get(1); - } + // if (dataQuery.getSmartCorrection() == true) { + // result.remove(0); + // // convertedQuery = result.get(1); + // } + + // get the attributes list for the result table + // List listAttributes = new + // ArrayList(); + // listAttributes = getListAttributes(result.get(0) + // .getValue()); + // // remove the header in order to parse only the + // result + // result.remove(0); - // get the attributes list for the result table - getListAttributes(result.get(0).getValue()); - // remove the header in order to parse only the result - result.remove(0); - // parse the result in order to obtain a table - boolean submitQueryEventManaged = true; - parseResult(result, form, dialogID, - submitQueryEventManaged); + // boolean submitQueryEventManaged = true; + // parseResult(result, form, dialogID, + // submitQueryEventManaged); + + // parseSubmitQueryResult(result, form, dialogID, + // listAttributes, dataQuery.getQuery()); + + parseSubmitQueryResult(form, dialogID, listAttributes, + UID); } }); } + // start the parsing of the submit result in order to obtain a table + private void parseSubmitQueryResult(Dialog dialog, final int dialogID, + final List listAttributes, final String UID) { + + final Dialog form = dialog; + + // define the proxy and create the grid to display in the dialog + // create RpcProxy object to use the load configuration + RpcProxy> proxy = new RpcProxy>() { + + @Override + protected void load(Object loadConfig, + final AsyncCallback> callback) { + + rootLogger.log(Level.SEVERE, + "Start RPC - loadSubmitQueryResult"); + + // remote rpc + RPCservice.loadSubmitResult((PagingLoadConfig) loadConfig, + listAttributes, UID, + new AsyncCallback>() { + @Override + public void onFailure(Throwable caught) { + rootLogger.log(Level.SEVERE, + "FAILURE RPC loadSubmitQueryResult"); + MessageBox.alert("Error ", "
Message:" + + caught.getMessage(), null); + callback.onFailure(caught); + } + @Override + public void onSuccess(PagingLoadResult result) { + rootLogger.log(Level.SEVERE, + "SUCCESS RPC loadSubmitQueryResult"); + callback.onSuccess(result); + List rows = result.getData(); + if (form.getBody().isMasked()) + form.getBody().unmask(); + + if ((rows == null) || (rows.size() == 0)) { + rootLogger.log(Level.SEVERE, + "No results have been returned"); + return; + } + // if (result != null) { + // rootLogger.log(Level.SEVERE, + // "rows not null"); + // } + } + }); + } + }; + + // loader to load page enabled set of data + final PagingLoader> loader = new BasePagingLoader>( + proxy); + + // to create the listStore using the loader + final ListStore store = new ListStore(loader); + + // bind the loader with a PagingToolBar. + final PagingToolBar toolBar = new PagingToolBar(100); + toolBar.bind(loader); + + // create the grid with a result list and the column model + + Grid grid; + grid = new Grid(store, createColumnModel(listAttributes)); + + grid.setLoadMask(true); + grid.setBorders(true); + grid.setStripeRows(true); + // to manage the table selection in the grid + grid.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); + + grid.addListener(Events.Attach, new Listener>() { + public void handleEvent(GridEvent be) { + + rootLogger.log(Level.INFO, "event Attach handled"); + + // disable the top toolbar at the first tables loading in such a + // way to disallow a user the search. It will be enabled in the + // rpc when the tables are retrieved. + // toolBarTop.disable(); + + PagingLoadConfig config = new BasePagingLoadConfig(); + // The offset for the first record to retrieve. + config.setOffset(0); + // The number of records being requested. + config.setLimit(100); + + // if (state.containsKey("offset")) { + // // rootLogger.log(Level.INFO, "state contains offset"); + // int offset = (Integer) state.get("offset"); + // rootLogger.log(Level.INFO, "offset: " + offset); + // int limit = (Integer) state.get("limit"); + // rootLogger.log(Level.INFO, "limit: " + limit); + // config.setOffset(offset); + // config.setLimit(limit); + // } + // if (state.containsKey("sortField")) { + // config.setSortField((String) state.get("sortField")); + // config.setSortDir(SortDir.valueOf((String) state + // .get("sortDir"))); + // } + loader.load(config); + } + }); + + // // Display the submit query result as a table + // Dialog submitResult = new Dialog(); + // submitResult.setLayout(new FitLayout()); + // + // //TODO DA MODIFICARE + // submitResult.setHeading("Result"); + // submitResult.setSize(600, 400); + // + // submitResult.add(grid); + // submitResult.show(); + + // Display the submit query result as a table + Dialog submitResult = new Dialog() { + // override the maximize event modifying it with + // a different behaviour if the mimimize event + // occurs + public void maximize() { + if (isCollapsed()) { + expand(); + } else { + super.maximize(); + } + } + }; + + submitResult.setLayout(new FitLayout()); + submitResult.setHeading("Result Query " + dialogID); + submitResult.setResizable(false); + submitResult.setSize(600, 400); + submitResult.setScrollMode(Scroll.NONE); + submitResult.setHideOnButtonClick(true); + submitResult.setMaximizable(true); + submitResult.setMinimizable(true); + submitResult.setBottomComponent(toolBar); + + // mimimize event handled + submitResult.addListener(Events.Minimize, new Listener() { + @Override + public void handleEvent(WindowEvent be) { + // collapse the dialog + be.getWindow().collapse(); + } + }); + // maximize event handled + submitResult.addListener(Events.Maximize, new Listener() { + @Override + public void handleEvent(WindowEvent be) { + // expand the dialog + if (be.getWindow().isCollapsed()) { + be.getWindow().expand(); + } + } + }); + + submitResult.addListener(Events.Hide, new Listener() { + @Override + public void handleEvent(WindowEvent be) { + // call rpc to remove the stored result + RPCservice.refreshDataOnServer(UID, new AsyncCallback() { + @Override + public void onFailure(Throwable caught) { + rootLogger.log(Level.SEVERE, + "FAILURE RPC refreshDataOnServer"); + } + @Override + public void onSuccess(Void result) { + rootLogger.log(Level.SEVERE, + "SUCCESS RPC refreshDataOnServer"); + } + }); + } + }); + submitResult.add(grid); + submitResult.show(); + } + // method to perform the sample table private void sample() { @@ -1008,13 +1176,14 @@ public class GxtBorderLayoutPanel extends ContentPanel { // get the attributes list for the result // table - getListAttributes(result.get(0).getValue()); + List listAttributes = new ArrayList(); + listAttributes = getListAttributes(result.get(0).getValue()); // remove the header in order to parse only // the result result.remove(0); // parse the result in order to obtain a // table - parseResult(result, null, 0, false); + parseResult(result, listAttributes); } }); } @@ -1090,13 +1259,14 @@ public class GxtBorderLayoutPanel extends ContentPanel { // get the attributes list for the result // table - getListAttributes(result.get(0).getValue()); + List listAttributes = new ArrayList(); + listAttributes = getListAttributes(result.get(0).getValue()); // remove the header in order to parse only // the result result.remove(0); // parse the result in order to obtain a // table - parseResult(result, null, 0, false); + parseResult(result, listAttributes); } }); } @@ -1155,7 +1325,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { // call remote service RPCservice.randomSample(dataInput, new AsyncCallback>() { - @Override public void onFailure(Throwable caught) { // Window.alert(caught.getMessage()); @@ -1166,7 +1335,6 @@ public class GxtBorderLayoutPanel extends ContentPanel { obj.unmask(); } } - @Override public void onSuccess(List result) { rootLogger.log(Level.SEVERE, "SUCCESS RPC randomSample"); @@ -1174,28 +1342,28 @@ public class GxtBorderLayoutPanel extends ContentPanel { // get the attributes list for the result // table - getListAttributes(result.get(0).getValue()); + List listAttributes = new ArrayList(); + listAttributes = getListAttributes(result.get(0).getValue()); // remove the header in order to parse only // the result result.remove(0); // parse the result in order to obtain a // table - parseResult(result, null, 0, false); + parseResult(result, listAttributes); } }); } // start the parsing of the submit result in order to obtain a table - private void parseResult(List result, Dialog dialog, - final int dialogID, final boolean submitQueryEventManaged) { + private void parseResult(List result, + final List listAttributes) { // to unmask the entire content panel final GxtBorderLayoutPanel obj = this; - final Dialog form = dialog; + // final Dialog form = dialog; RPCservice.parseCVSString(result, listAttributes, new AsyncCallback>() { - @Override public void onFailure(Throwable caught) { // Window.alert(caught.getMessage()); @@ -1206,24 +1374,26 @@ public class GxtBorderLayoutPanel extends ContentPanel { // if the submit query event has been performed the // dialog form is unmasked otherwise if a sampling // operation is performed the entire panel is masked. - if (submitQueryEventManaged == true) { - - if (form.getBody().isMasked()) - form.getBody().unmask(); - } else { - if (obj.isMasked()) { - obj.unmask(); - } + if (obj.isMasked()) { + obj.unmask(); } + // if (submitQueryEventManaged == true) { + // + // if (form.getBody().isMasked()) + // form.getBody().unmask(); + // } else { + // if (obj.isMasked()) { + // obj.unmask(); + // } + // } } - @Override public void onSuccess(List rows) { rootLogger.log(Level.SEVERE, "SUCCESS RPC parseResult"); if (rows != null) { // Display the submit query result as a table - Dialog submitResult = new Dialog() { + Dialog sampleResult = new Dialog() { // override the maximize event modifying it with // a different behaviour if the mimimize event // occurs @@ -1235,35 +1405,37 @@ public class GxtBorderLayoutPanel extends ContentPanel { } } }; - submitResult.setLayout(new FitLayout()); - if (submitQueryEventManaged == true) { - submitResult.setHeading("Result Query " - + dialogID); - } else { - submitResult.setHeading("Result"); - } + // if (submitQueryEventManaged == true) { + // submitResult.setHeading("Result Query " + // + dialogID); + // } else { + // submitResult.setHeading("Result"); + // } - submitResult.setResizable(false); + sampleResult.setLayout(new FitLayout()); + sampleResult.setHeading("Result"); + sampleResult.setResizable(false); // submitResult.setHeading("Submit Query"); // submitResult.setWidth(290); // submitResult.setHeight(250); // submitResult.setModal(true); // submitResult.setBlinkModal(true); // submitResult.setBodyStyle("padding:9px;"); - submitResult.setSize(600, 400); + sampleResult.setSize(600, 400); // submitResult.setScrollMode(Scroll.AUTO); - submitResult.setScrollMode(Scroll.NONE); - submitResult.setHideOnButtonClick(true); - submitResult.setMaximizable(true); - submitResult.setMinimizable(true); + sampleResult.setScrollMode(Scroll.NONE); + sampleResult.setHideOnButtonClick(true); + sampleResult.setMaximizable(true); + sampleResult.setMinimizable(true); // submitResult.addText("Result Table"); ListStore store = new ListStore(); store.add(rows); Grid grid; - grid = new Grid(store, createColumnModel()); + grid = new Grid(store, + createColumnModel(listAttributes)); // grid.setAutoExpandColumn("value"); grid.setBorders(true); @@ -1273,7 +1445,7 @@ public class GxtBorderLayoutPanel extends ContentPanel { data.setMargins(new Margins(6)); // mimimize event handled - submitResult.addListener(Events.Minimize, + sampleResult.addListener(Events.Minimize, new Listener() { @Override @@ -1283,7 +1455,7 @@ public class GxtBorderLayoutPanel extends ContentPanel { } }); // maximize event handled - submitResult.addListener(Events.Maximize, + sampleResult.addListener(Events.Maximize, new Listener() { @Override @@ -1295,30 +1467,38 @@ public class GxtBorderLayoutPanel extends ContentPanel { } }); - submitResult.add(grid, data); - submitResult.show(); + sampleResult.add(grid, data); + sampleResult.show(); // if the submit query event has been performed the // dialog form is unmasked otherwise if a sampling // operation is performed the entire panel is // masked. - if (submitQueryEventManaged == true) { - if (form.getBody().isMasked()) - form.getBody().unmask(); - } else { - if (obj.isMasked()) { - obj.unmask(); - } + // if (submitQueryEventManaged == true) { + // if (form.getBody().isMasked()) + // form.getBody().unmask(); + // } else { + // if (obj.isMasked()) { + // obj.unmask(); + // } + // } + + if (obj.isMasked()) { + obj.unmask(); } } else { - if (submitQueryEventManaged == true) { - if (form.getBody().isMasked()) - form.getBody().unmask(); - } else { - if (obj.isMasked()) { - obj.unmask(); - } + // if (submitQueryEventManaged == true) { + // if (form.getBody().isMasked()) + // form.getBody().unmask(); + // } else { + // if (obj.isMasked()) { + // obj.unmask(); + // } + // } + + if (obj.isMasked()) { + obj.unmask(); } } } @@ -1326,24 +1506,28 @@ public class GxtBorderLayoutPanel extends ContentPanel { } // get attributes list for display the result in a table - private void getListAttributes(String value) { + private List getListAttributes(String value) { + List listAttributes = new ArrayList(); // recover attribute fields for the result table String headers = value; - rootLogger.log(Level.INFO, "Headers fields table: " + headers); + // rootLogger.log(Level.INFO, "Headers fields table: " + headers); listAttributes = parseAttributesTableResult(headers); rootLogger.log(Level.INFO, "attributes number: " + listAttributes.size()); - rootLogger.log(Level.INFO, "attributes list: "); - for (int i = 0; i < listAttributes.size(); i++) { - rootLogger.log(Level.INFO, "attribute: " + listAttributes.get(i)); - } + // rootLogger.log(Level.INFO, "attributes list: "); + // print check + // for (int i = 0; i < listAttributes.size(); i++) { + // rootLogger.log(Level.INFO, "attribute: " + listAttributes.get(i)); + // } + + return listAttributes; } // create column configuration for the grid - private ColumnModel createColumnModel() { + private ColumnModel createColumnModel(List listAttributes) { List configs = new ArrayList(); ColumnConfig column; @@ -1357,7 +1541,8 @@ public class GxtBorderLayoutPanel extends ContentPanel { for (int i = 0; i < listAttributes.size(); i++) { - rootLogger.log(Level.INFO, "attribute: " + listAttributes.get(i)); + // rootLogger.log(Level.INFO, "attribute: " + + // listAttributes.get(i)); column = new ColumnConfig(); column.setId(listAttributes.get(i)); // column.setId("\"" + fields.get(i) + "\""); @@ -1640,7 +1825,7 @@ public class GxtBorderLayoutPanel extends ContentPanel { } private void displayTableName(String tableName) { - rootLogger.log(Level.INFO, "displaying table name" + tableName + rootLogger.log(Level.INFO, "displaying table name " + tableName + " in the panel"); Result table = new Result("Selected table", tableName); diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java b/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java index b322e6b..24b2503 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/client/toolbar/GxtToolbarFunctionality.java @@ -174,7 +174,6 @@ public class GxtToolbarFunctionality { btnSubmitQuery .addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { @@ -219,7 +218,6 @@ public class GxtToolbarFunctionality { // minimize event handled dialog.addListener(Events.Minimize, new Listener() { - @Override public void handleEvent(WindowEvent be) { // collapse the dialog @@ -230,7 +228,6 @@ public class GxtToolbarFunctionality { // override maximize event dialog.addListener(Events.Maximize, new Listener() { - @Override public void handleEvent(WindowEvent be) { // expand the dialog @@ -243,10 +240,8 @@ public class GxtToolbarFunctionality { // listener on the dialog "ok" button dialog.getButtonById(Dialog.OK).addSelectionListener( new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { - // recover info from dialog setInfoOnSubmitQuery(form, dialog, dialogID); @@ -259,13 +254,15 @@ public class GxtToolbarFunctionality { dialog.getButtonById(Dialog.CANCEL) .addSelectionListener( new SelectionListener() { - @Override public void componentSelected( ButtonEvent ce) { rootLogger.log(Level.INFO, "button Cancel event"); + if (uidSubmitQueryList + .get(dialogID)!=null){ + // remove computation RPCservice.removeComputation( uidSubmitQueryList @@ -287,7 +284,6 @@ public class GxtToolbarFunctionality { + uidSubmitQueryList .get(dialogID)); } - } @Override @@ -298,6 +294,7 @@ public class GxtToolbarFunctionality { "FAILURE RPC removeComputation"); } }); + } dialog.hide(); } @@ -307,10 +304,8 @@ public class GxtToolbarFunctionality { btnSimpleSample .addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { - // fire event eventBus.fireEvent(new SamplingEvent()); } @@ -318,10 +313,8 @@ public class GxtToolbarFunctionality { btnSmartSample .addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { - // fire event eventBus.fireEvent(new SmartSamplingEvent()); } @@ -329,10 +322,8 @@ public class GxtToolbarFunctionality { btnRandomSample .addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { - // fire event eventBus.fireEvent(new RandomSamplingEvent()); } @@ -340,10 +331,8 @@ public class GxtToolbarFunctionality { btnShowCreateTable .addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { - // fire event eventBus.fireEvent(new ShowCreateTableEvent()); } @@ -351,10 +340,8 @@ public class GxtToolbarFunctionality { btnTablesList .addSelectionListener(new SelectionListener() { - @Override public void componentSelected(ButtonEvent ce) { - // fire event eventBus.fireEvent(new LoadTablesEvent()); } diff --git a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java index cbf24de..5256c9b 100644 --- a/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/databasesmanager/server/GWTdbManagerServiceImpl.java @@ -88,6 +88,22 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements List result = new ArrayList(); session.setAttribute("TablesResult", result); + // map that contains the submit query result and the related uid + HashMap> submitQueryResult = new HashMap>(); + session.setAttribute("submitQueryResult", submitQueryResult); + + // map that contains the the submit query result parsed and the related + // uid + HashMap> submitQueryResultParsed = new HashMap>(); + session.setAttribute("submitQueryResultParsed", submitQueryResultParsed); + + // List submitQueryResult = new ArrayList(); + // session.setAttribute("submitQueryResult", submitQueryResult); + + // attributes name for a result of a submit query operation + // List attributeNames = new ArrayList(); + // session.setAttribute("attributeNames", attributeNames); + // information about a database String currentDB = ""; session.setAttribute("currentDB", currentDB); @@ -108,6 +124,17 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements HashMap JobStatusMap = new HashMap(); session.setAttribute("JobStatusList", JobStatusMap); + // information about query submitted + // String currentQuerySubmitted = ""; + // session.setAttribute("currentQuerySubmitted", currentQuerySubmitted); + // String previousQuerySubmitted = ""; + // session.setAttribute("previousQuerySubmitted", + // previousQuerySubmitted); + + // HashMap> obj = new HashMap>(); + // session.setAttribute("", obj); + } // to get resources from IS @@ -488,7 +515,7 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements // to submit a query @Override - public List submitQuery(LinkedHashMap dataDB, + public List submitQuery(LinkedHashMap dataDB, String query, boolean valueReadOnlyQuery, boolean smartCorrectionQuery, String language, String UID) throws Exception { @@ -501,6 +528,9 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements // List output = new ArrayList(); List output = null; + // list that contains table attributes + List listAttributes = null; + // get list of algorithms List algorithms = new ArrayList(); algorithms = getDatabaseManagerAlgorithms(); @@ -573,17 +603,23 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements mapValues.get(String.valueOf(i))); output.add(row); } - } + // get the attributes list for the result table + listAttributes = new ArrayList(); + listAttributes = getListAttributes(output.get(0).getValue()); + // remove the header in order to parse only the result + output.remove(0); + + // store the result of the submit query operation + updateSubmitQueryResultMap(UID, output); + } } catch (Exception e) { // TODO: handle exception // e.printStackTrace(); } - - return output; + return listAttributes; } - @Override public List sample(LinkedHashMap dataInput) throws Exception { @@ -879,6 +915,90 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements return outputParameters; } + // parse result for Submit query + public PagingLoadResult loadSubmitResult(PagingLoadConfig config, + List listAttributes, String UID) throws Exception { + + // check to verify if the submit query result has been already parsed + // boolean checkOnDataParsed = checkOnSubmitQueryResultParsed(UID); + + // data parsed + List data = new ArrayList(); + // submit query result + List result = new ArrayList(); + //get parsed data + data = getSubmitQueryResultParsed(UID); + + if ((data == null)) { + // parse the submit query result + result = getSubmitQueryResult(UID); + + if ((result != null) && (result.size() != 0)) { + data = parseCVSString(result, listAttributes); + updateSubmitQueryResultParsed(UID, data); + } + + } + + // Create a sublist and add data to list according + // to the limit and offset value of the config + List sublist = new ArrayList(); + BasePagingLoadResult loadResult = null; + + int start = config.getOffset(); + int limit = data.size(); + + if (config.getLimit() > 0) { + limit = Math.min(start + config.getLimit(), limit); + } + + int totalNumber = data.size(); + sublist = new ArrayList(data.subList(start, limit)); + loadResult = new BasePagingLoadResult(sublist, config.getOffset(), + totalNumber); + + // System.out.println("start: " + start); + // System.out.println("limit: " + limit); + // System.out.println("sublist size: " + sublist.size()); + + return loadResult; + } + + // get attributes list for display the result in a table + private List getListAttributes(String value) { + + List listAttributes = new ArrayList(); + + // recover attribute fields for the result table + String headers = value; + // logger.info("Headers fields table: " + headers); + + listAttributes = parseAttributesTableResult(headers); + // logger.info("attributes number: " + listAttributes.size()); + + // logger.info("attributes list: "); + // print check + // for (int i = 0; i < listAttributes.size(); i++) { + // logger.info("attribute: " + listAttributes.get(i)); + // } + + return listAttributes; + } + + private List parseAttributesTableResult(String phrase) { + String delimiter = ","; + List elements = new ArrayList(); + int idxdelim = -1; + phrase = phrase.trim(); + + while ((idxdelim = phrase.indexOf(delimiter)) >= 0) { + elements.add(phrase.substring(0, idxdelim)); + phrase = phrase.substring(idxdelim + 1).trim(); + } + elements.add(phrase); + return elements; + } + // parse a csv row in a list of values @Override public List parseCVSString(List result, List attrNames) @@ -1002,7 +1122,86 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements return params; } - //update job with the related status + private synchronized List getSubmitQueryResult(String submitQueryUID) { + ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() + .getSession()); + HashMap> submitQueryResult = (HashMap>) session + .getAttribute("submitQueryResult"); + if (submitQueryResult.containsKey(submitQueryUID)) { + return submitQueryResult.get(submitQueryUID); + } else { + return null; + } + } + + private synchronized List getSubmitQueryResultParsed( + String submitQueryUID) { + ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() + .getSession()); + HashMap> submitQueryResultParsed = (HashMap>) session + .getAttribute("submitQueryResultParsed"); + + if (submitQueryResultParsed.containsKey(submitQueryUID)) { + return submitQueryResultParsed.get(submitQueryUID); + } else { + return null; + } + } + + private synchronized void updateSubmitQueryResultParsed( + String submitQueryUID, List data) { + ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() + .getSession()); + HashMap> submitQueryResultParsed = (HashMap>) session + .getAttribute("submitQueryResultParsed"); + // add data + if (data.size() != 0) { + submitQueryResultParsed.put(submitQueryUID, data); + session.setAttribute("submitQueryResultParsed", + submitQueryResultParsed); + } + } + + private synchronized void removeResultParsed(String submitQueryUID) { + ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() + .getSession()); + HashMap> submitQueryResultParsed = (HashMap>) session + .getAttribute("submitQueryResultParsed"); + if (submitQueryResultParsed.containsKey(submitQueryUID)) { + // remove data parsed + submitQueryResultParsed.remove(submitQueryUID); + // update + session.setAttribute("submitQueryResultParsed", + submitQueryResultParsed); + } + } + + private synchronized void updateSubmitQueryResultMap(String submitQueryUID, + List result) { + if (submitQueryUID != null) { + ASLSession session = WsUtil.getAslSession(this + .getThreadLocalRequest().getSession()); + HashMap> submitQueryResult = (HashMap>) session + .getAttribute("submitQueryResult"); + submitQueryResult.put(submitQueryUID, result); + session.setAttribute("submitQueryResult", submitQueryResult); + } + } + + private synchronized void removeResult(String submitQueryUID) { + ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() + .getSession()); + HashMap> submitQueryResult = (HashMap>) session + .getAttribute("submitQueryResult"); + if (submitQueryResult.containsKey(submitQueryUID)) { + // remove data parsed + submitQueryResult.remove(submitQueryUID); + // update + session.setAttribute("submitQueryResult", submitQueryResult); + } + } + + // update job with the related status private synchronized void updateJobStatus(String jobID, String status) { if (jobID != null) { // add the job status @@ -1013,26 +1212,32 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements JobStatusMap.put(jobID, status); session.setAttribute("JobStatusList", JobStatusMap); } - } - //remove job with the related status + // remove job with the related status private synchronized void removeJobStatus(String jobID) { ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() .getSession()); - HashMap JobStatusMap = (HashMap) session .getAttribute("JobStatusList"); - String status = JobStatusMap.get(jobID); if (status != null) { - JobStatusMap.remove(jobID); session.setAttribute("JobStatusList", JobStatusMap); } } - //update job with the computation id + // get job status + private synchronized String getJobStatus(String jobID) { + ASLSession session = WsUtil.getAslSession(this.getThreadLocalRequest() + .getSession()); + HashMap JobStatusMap = (HashMap) session + .getAttribute("JobStatusList"); + String status = JobStatusMap.get(jobID); + return status; + } + + // update job with the computation id private synchronized void updateJob(String jobID, String computationId) { if (jobID != null) { // add the computation in the map @@ -1045,7 +1250,7 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements } } - //remove job with the computation id + // remove job with the computation id private synchronized String removeJob(String jobID) { if (jobID != null) { // System.out.println("remove jobID " + job); @@ -1287,7 +1492,7 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements return SessionUtil.getScope(httpSession); } - //remove the computation + // remove the computation public Boolean removeComputation(String uidSubmitQuery) throws Exception { // System.out.println("server UID: " + uidSubmitQuery); @@ -1296,11 +1501,14 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements if ((uidSubmitQuery != null) && (!(uidSubmitQuery.equals("")))) { // get job status - ASLSession session = WsUtil.getAslSession(this - .getThreadLocalRequest().getSession()); - HashMap JobStatusMap = (HashMap) session - .getAttribute("JobStatusList"); - String status = JobStatusMap.get(uidSubmitQuery); + // ASLSession session = WsUtil.getAslSession(this + // .getThreadLocalRequest().getSession()); + // HashMap JobStatusMap = (HashMap) + // session + // .getAttribute("JobStatusList"); + // String status = JobStatusMap.get(uidSubmitQuery); + + String status = getJobStatus(uidSubmitQuery); if (status == null) { // the computation has not started @@ -1332,4 +1540,11 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements return (new Boolean(true)); } + public void refreshDataOnServer(String submitQueryUID) { + + if ((submitQueryUID != null) && (!submitQueryUID.equals(""))) { + removeResultParsed(submitQueryUID); + removeResult(submitQueryUID); + } + } }