diff --git a/common/src/main/java/com/genexus/internet/GXNavigationHelper.java b/common/src/main/java/com/genexus/internet/GXNavigationHelper.java index 2adfdf8af..507fa67d5 100644 --- a/common/src/main/java/com/genexus/internet/GXNavigationHelper.java +++ b/common/src/main/java/com/genexus/internet/GXNavigationHelper.java @@ -1,7 +1,8 @@ package com.genexus.internet; import java.util.*; -import com.genexus.CommonUtil; import com.genexus.common.interfaces.SpecificImplementation; +import com.genexus.diagnostics.core.ILogger; +import com.genexus.diagnostics.core.LogManager; import org.json.JSONArray; @@ -9,9 +10,12 @@ public class GXNavigationHelper implements Serializable { - private static final long serialVersionUID = 2608956804836620190L; + private static final long serialVersionUID = 2608956804836620190L; + private static final ILogger logger = LogManager.getLogger(GXNavigationHelper.class); public static String POPUP_LEVEL = "gxPopupLevel"; + public static String TAB_ID = "gxTabId"; + public static String TAB_ID_HEADER = "X-Gx-Tabid"; public static String CALLED_AS_POPUP = "gxCalledAsPopup"; private Hashtable> referers; @@ -114,13 +118,13 @@ public void deleteStack(String popupLevel) referers.remove(popupLevel); } - public String getUrlPopupLevel(String url) + static public String getUrlComponent(String url, String key) { url = SpecificImplementation.GXutil.URLDecode(url); - String popupLevel = "-1"; + String result = ""; if (url != null) { - int pIdx = url.indexOf(POPUP_LEVEL); + int pIdx = url.indexOf(key); if (pIdx != -1) { int eqIdx = url.indexOf("=", pIdx); @@ -131,16 +135,22 @@ public String getUrlPopupLevel(String url) { try { - popupLevel = url.substring(eqIdx+1, cIdx); + result = url.substring(eqIdx+1, cIdx); } - catch(Exception e) + catch(IndexOutOfBoundsException e) { - popupLevel = "-1"; + logger.error(String.format("Searching parm:'%1$s' in url:'%2$s'", key, url), e); } } } } } - return popupLevel; + return result; + } + + static public String getUrlPopupLevel(String url) + { + String result = getUrlComponent( url, POPUP_LEVEL); + return result.isEmpty() ? "-1":result; } } diff --git a/java/src/main/java/com/genexus/internet/HttpContext.java b/java/src/main/java/com/genexus/internet/HttpContext.java index 1e3979d66..2eae1a453 100644 --- a/java/src/main/java/com/genexus/internet/HttpContext.java +++ b/java/src/main/java/com/genexus/internet/HttpContext.java @@ -350,7 +350,7 @@ public void deleteReferer(String popupLevel) public void deleteReferer() { - deleteReferer(getNavigationHelper(false).getUrlPopupLevel(getRequestNavUrl())); + deleteReferer(GXNavigationHelper.getUrlPopupLevel(getRequestNavUrl())); } public void pushCurrentUrl() diff --git a/java/src/main/java/com/genexus/internet/HttpRequest.java b/java/src/main/java/com/genexus/internet/HttpRequest.java index 1418280e1..7ab79cf8b 100644 --- a/java/src/main/java/com/genexus/internet/HttpRequest.java +++ b/java/src/main/java/com/genexus/internet/HttpRequest.java @@ -21,6 +21,7 @@ public abstract class HttpRequest implements IHttpRequest private int errCode; private String errDescription; private String Referrer = ""; + private String tabId = ""; protected HttpContext httpContext; public HttpRequest(HttpContext httpContext) @@ -259,4 +260,19 @@ public void setErrCode(int errCode){ public void setErrDescription(String errDsc){ this.errDescription = errDsc; } + + public String getTabId() + { + String sUrl = httpContext.getRequestNavUrl().trim(); + + if ( tabId.isEmpty()) + { + tabId = GXNavigationHelper.getUrlComponent(sUrl, GXNavigationHelper.TAB_ID); + } + if ( tabId.isEmpty()) + { + tabId = getHeader(GXNavigationHelper.TAB_ID_HEADER); + } + return tabId; + } } diff --git a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java index 8be843e51..eb6562c51 100644 --- a/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java +++ b/java/src/main/java/com/genexus/webpanels/HttpContextWeb.java @@ -1063,9 +1063,10 @@ public void setQueryString(String qs) { loadParameters(qs); } - private String removeInternalParms(String query) { + private String removeInternalParm(String query, String parm) + { query = removeEventPrefix(query); - int idx = query.indexOf(GXNavigationHelper.POPUP_LEVEL); + int idx = query.indexOf(parm); if (idx == 1) return ""; if (idx > 1) @@ -1078,6 +1079,11 @@ private String removeInternalParms(String query) { return query; } + private String removeInternalParms(String query) { + query = removeInternalParm( query, GXNavigationHelper.POPUP_LEVEL); + return removeInternalParm( query, GXNavigationHelper.TAB_ID); + } + public String getQueryString() { try { String query = request.getQueryString();