From adb6d8c4bc49dd21bc705483351c9898435883a9 Mon Sep 17 00:00:00 2001 From: "giancarlo.panichi" Date: Fri, 13 Jan 2017 11:44:02 +0000 Subject: [PATCH] Fixed download in case of multitab on different scopes git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/admin/accounting-manager@141550 82a268e6-3cf1-43bd-a215-b396298e98cf --- .classpath | 6 +-- distro/changelog.xml | 4 ++ pom.xml | 2 +- .../server/AccountingManagerServiceImpl.java | 6 +-- .../server/ExportServlet.java | 2 +- .../accountingmanager/server/SessionUtil.java | 48 ++++++++++++++----- .../accountingmanager/shared/Constants.java | 2 +- 7 files changed, 50 insertions(+), 20 deletions(-) diff --git a/.classpath b/.classpath index 30095de..a8509f0 100644 --- a/.classpath +++ b/.classpath @@ -1,12 +1,12 @@ - + - + @@ -45,5 +45,5 @@ - + diff --git a/distro/changelog.xml b/distro/changelog.xml index 2f6b64d..598a499 100644 --- a/distro/changelog.xml +++ b/distro/changelog.xml @@ -1,4 +1,8 @@ + + Fixed download in case of multitab on different scopes + Added Context Chart diff --git a/pom.xml b/pom.xml index 01ef428..4567623 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ 4.0.0 org.gcube.portlets.admin accounting-manager - 1.5.0-SNAPSHOT + 1.6.0-SNAPSHOT war diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java index 3d23b2a..97c9a1e 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/AccountingManagerServiceImpl.java @@ -168,8 +168,8 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet AccountingStateData accountingStateData = new AccountingStateData( accountingType, seriesRequest, seriesResponse); - SessionUtil.setAccountingStateData(session, accountingType, - accountingStateData); + SessionUtil.setAccountingStateData(session, serviceCredentials, + accountingType, accountingStateData); return seriesResponse; } catch (ServiceException e) { @@ -283,7 +283,7 @@ public class AccountingManagerServiceImpl extends RemoteServiceServlet logger.debug("SaveDataOnWorkspace(): " + accountingType); AccountingStateData accountingStateData = SessionUtil - .getAccountingStateData(session, accountingType); + .getAccountingStateData(session, serviceCredentials, accountingType); if (accountingStateData == null) { logger.error("No series present in session for thi accounting type: " + accountingType); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/ExportServlet.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/ExportServlet.java index bf9df94..572f6ca 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/ExportServlet.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/ExportServlet.java @@ -110,7 +110,7 @@ public class ExportServlet extends HttpServlet { AccountingStateData accountingStateData = SessionUtil .getAccountingStateData(session, - AccountingType.valueOf(accountingType)); + serviceCredentials, AccountingType.valueOf(accountingType)); if (accountingStateData == null) { logger.error("No series present in session for this accounting type: " + accountingType); diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java index 6c23d82..d315d80 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/server/SessionUtil.java @@ -4,6 +4,7 @@ package org.gcube.portlets.admin.accountingmanager.server; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -202,31 +203,56 @@ public class SessionUtil { } public static void setAccountingStateData(HttpSession httpSession, + ServiceCredentials serviceCredentials, AccountingType accountingType, AccountingStateData accountingStateData) { - AccountingState accountingState = (AccountingState) httpSession - .getAttribute(Constants.SESSION_ACCOUNTING_STATE); + @SuppressWarnings("unchecked") + HashMap accountingStateMap = (HashMap) httpSession + .getAttribute(Constants.SESSION_ACCOUNTING_STATE_MAP); - if (accountingState == null) { - accountingState = new AccountingState(); + if (accountingStateMap == null) { + AccountingState accountingState = new AccountingState(); accountingState.setState(accountingType, accountingStateData); - httpSession.setAttribute(Constants.SESSION_ACCOUNTING_STATE, + accountingStateMap = new HashMap<>(); + accountingStateMap.put(serviceCredentials.getScope(), accountingState); + httpSession.setAttribute(Constants.SESSION_ACCOUNTING_STATE_MAP, + accountingStateMap); } else { - accountingState.setState(accountingType, accountingStateData); + AccountingState accountingState = accountingStateMap + .get(serviceCredentials.getScope()); + + if (accountingState == null) { + accountingState = new AccountingState(); + accountingState.setState(accountingType, accountingStateData); + accountingStateMap.put(serviceCredentials.getScope(), + accountingState); + } else { + accountingState.setState(accountingType, accountingStateData); + } } return; } public static AccountingStateData getAccountingStateData( - HttpSession httpSession, AccountingType accountingType) { - AccountingState accountingState = (AccountingState) httpSession - .getAttribute(Constants.SESSION_ACCOUNTING_STATE); - if (accountingState == null) { + HttpSession httpSession, ServiceCredentials serviceCredentials, + AccountingType accountingType) { + @SuppressWarnings("unchecked") + HashMap accountingStateMap = (HashMap) httpSession + .getAttribute(Constants.SESSION_ACCOUNTING_STATE_MAP); + + if (accountingStateMap == null) { return null; } else { - return accountingState.getState(accountingType); + AccountingState accountingState = accountingStateMap + .get(serviceCredentials.getScope()); + + if (accountingState == null) { + return null; + } else { + return accountingState.getState(accountingType); + } } } diff --git a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java index 38d2e34..6d3ea91 100644 --- a/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java +++ b/src/main/java/org/gcube/portlets/admin/accountingmanager/shared/Constants.java @@ -32,7 +32,7 @@ public class Constants { public static final String EXPORT_SERVLET_TYPE_PARAMETER = "ExportServletType"; public static final String EXPORT_SERVLET_ACCOUNTING_TYPE_PARAMETER = "AccountingType"; - public static final String SESSION_ACCOUNTING_STATE = "ACCOUNTING_STATE"; + public static final String SESSION_ACCOUNTING_STATE_MAP = "ACCOUNTING_STATE_MAP"; public static final AccountingType[] DEFAULT_TABS = new AccountingType[] { AccountingType.STORAGE };;