From 9cad85a41e5a2afaa5884aa2653bc0dd3d79f7c5 Mon Sep 17 00:00:00 2001 From: Loredana Liccardo Date: Mon, 27 Oct 2014 09:44:26 +0000 Subject: [PATCH] - bug fixed for the submit query operation if at the same time a refresh query operation is performed. GWTdbManagerServiceImpl and GxtBorderLayput classes modified git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/databases-manager-portlet@101004 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../client/panels/GxtBorderLayoutPanel.java | 33 ++++++ .../server/GWTdbManagerServiceImpl.java | 102 ++++++++++++++---- 2 files changed, 116 insertions(+), 19 deletions(-) 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 99a03e5..7f6d116 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 @@ -1242,6 +1242,39 @@ public class GxtBorderLayoutPanel extends ContentPanel { }); } }); + + // listener on the dialog "ok" button + submitResult.getButtonById(Dialog.OK).addSelectionListener( + new SelectionListener() { + @Override + public void componentSelected(ButtonEvent ce) { + + rootLogger.log(Level.SEVERE, + "button ok clicked"); + + // 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"); + + if (caught instanceof SessionExpiredException) { + rootLogger.log(Level.INFO, "Session expired"); + CheckSession.showLogoutDialog(); + return; + } + } + + @Override + public void onSuccess(Void result) { + rootLogger.log(Level.SEVERE, + "SUCCESS RPC refreshDataOnServer"); + } + }); + + } + }); // add the button to download the result final String urlFile = Window.Location.getProtocol() + "//" 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 db69dac..31ac3f1 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 @@ -300,6 +300,12 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements session.setAttribute("listKeySubmitQueryResult", listKeySubmitQueryResult); + //map that contains for each UID the submit query result in order + //to face the cache refreshing if a pagination is used + HashMap> listSubmitQueryResult = new HashMap>(); + session.setAttribute("listSubmitQueryResult", + listSubmitQueryResult); + //print data logger.info("dbmanager-> CheckInformation: cache hits number " + cacheHitsNumber); logger.info("dbmanager-> CheckInformation: SM computation number " + smComputationNumber); @@ -1350,29 +1356,52 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements } if (value != null) { result = (List) value; + updateListSubmitQueryResult(UID, result); - data = parseCVSString(result, listAttributes); - - 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()); +// data = parseCVSString(result, listAttributes); +// +// 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()); } else { + + //get the result bound to session + result = getSubmitQueryResult(UID); - logger.error("dbmanager-> Error in server while loading data. variable value null"); - throw new Exception("Error in server while loading data."); +// logger.error("dbmanager-> Error in server while loading data. variable value null"); +// throw new Exception("Error in server while loading data."); + } + + data = parseCVSString(result, listAttributes); + + 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()); } else { logger.error("dbmanager-> Error in server while loading data. key null"); @@ -1385,6 +1414,7 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements throw new Exception( "Error in server while loading data. Exception: " + e); } + } // get attributes list for display the result in a table @@ -1645,6 +1675,39 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements .getAttribute("listKeySubmitQueryResult"); return listKeySubmitQueryResult.get(UID); } + + private synchronized List getSubmitQueryResult(String UID){ + ASLSession session = SessionUtil.getAslSession(this + .getThreadLocalRequest().getSession()); + + HashMap> listSubmitQueryResult = (HashMap>)session.getAttribute("listSubmitQueryResult"); + return listSubmitQueryResult.get(UID); + } + + private synchronized void updateListSubmitQueryResult(String UID, List value){ + ASLSession session = SessionUtil.getAslSession(this + .getThreadLocalRequest().getSession()); + + HashMap> listSubmitQueryResult = (HashMap>)session.getAttribute("listSubmitQueryResult"); + listSubmitQueryResult.put(UID, value); + session.setAttribute("listSubmitQueryResult", + listSubmitQueryResult); + } + + private synchronized void removeSubmitQueryResult(String UID){ + + ASLSession session = SessionUtil.getAslSession(this + .getThreadLocalRequest().getSession()); + + HashMap> listSubmitQueryResult = (HashMap>) session + .getAttribute("listSubmitQueryResult"); + + if (listSubmitQueryResult.containsKey(UID)) { + listSubmitQueryResult.remove(UID); + session.setAttribute("listSubmitQueryResult", + listSubmitQueryResult); + } + } private String startComputation(String algorithmName, List parameters, ComputationOutput outputData, @@ -1959,6 +2022,7 @@ public class GWTdbManagerServiceImpl extends RemoteServiceServlet implements if ((submitQueryUID != null) && (!submitQueryUID.equals(""))) { removeKeySubmitQueryResult(submitQueryUID); + removeSubmitQueryResult(submitQueryUID); // removeResultParsed(submitQueryUID); // removeResult(submitQueryUID); // removeSubmitQueryUIDCachedData(submitQueryUID);