svn commit: r536030 - in /ofbiz/trunk/framework: base/build.xml base/src/base/org/ofbiz/base/util/UtilHttp.java widget/src/org/ofbiz/widget/screen/ScreenRenderer.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r536030 - in /ofbiz/trunk/framework: base/build.xml base/src/base/org/ofbiz/base/util/UtilHttp.java widget/src/org/ofbiz/widget/screen/ScreenRenderer.java

jaz-3
Author: jaz
Date: Mon May  7 17:25:01 2007
New Revision: 536030

URL: http://svn.apache.org/viewvc?view=rev&rev=536030
Log:
applied patch from Ashish Vijaywargiya making generic use of pulling data from request, session, etc into a combined map; refactored to remain backwards compatible JIRA issue OFBIZ-967

Modified:
    ofbiz/trunk/framework/base/build.xml
    ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/UtilHttp.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java

Modified: ofbiz/trunk/framework/base/build.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/build.xml?view=diff&rev=536030&r1=536029&r2=536030
==============================================================================
--- ofbiz/trunk/framework/base/build.xml (original)
+++ ofbiz/trunk/framework/base/build.xml Mon May  7 17:25:01 2007
@@ -71,12 +71,12 @@
     </target>
     
     <!-- ================================================================== -->
-    <!-- Compilation of the source files                                                                                                                         -->
+    <!-- Compilation of the source files                                    -->
     <!-- ================================================================== -->              
 
     <target name="classes" depends="prepare,classpath">
         <!-- compile start -->
-     <javac debug="on" source="1.4" deprecation="on" destdir="${build.dir}/classes/start">
+     <javac debug="on" source="1.5" deprecation="on" destdir="${build.dir}/classes/start">
             <src path="${src.dir}/start"/>
         </javac>
         <copy todir="${build.dir}/classes/start">
@@ -91,7 +91,7 @@
         </condition>
 
         <!-- compile base -->
-     <javac debug="on" source="1.4" deprecation="on" destdir="${build.dir}/classes/base">
+     <javac debug="on" source="1.5" deprecation="on" destdir="${build.dir}/classes/base">            
             <classpath>
                 <path refid="local.class.path"/>
                 <pathelement path="${build.dir}/classes/start"/>

Modified: ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/UtilHttp.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/UtilHttp.java?view=diff&rev=536030&r1=536029&r2=536030
==============================================================================
--- ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/UtilHttp.java (original)
+++ ofbiz/trunk/framework/base/src/base/org/ofbiz/base/util/UtilHttp.java Mon May  7 17:25:01 2007
@@ -44,12 +44,14 @@
 import java.util.Set;
 import java.util.StringTokenizer;
 
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
 import javolution.util.FastList;
 import javolution.util.FastMap;
+import javolution.util.FastSet;
 
 /**
  * HttpUtil - Misc TTP Utility Functions
@@ -65,18 +67,51 @@
     public static final int ROW_SUBMIT_PREFIX_LENGTH = ROW_SUBMIT_PREFIX.length();
     public static final int COMPOSITE_DELIMITER_LENGTH = COMPOSITE_DELIMITER.length();
     
+    /**
+     * Create a combined map from servlet context, session, attributes and parameters
+     * @return The resulting Map
+     */
+    public static Map getCombinedMap(HttpServletRequest request) {
+        return getCombinedMap(request, null);
+    }
+
+    /**
+     * Create a combined map from servlet context, session, attributes and parameters
+     * -- this method will only use the skip names for session and servlet context attributes
+     * @return The resulting Map
+     */
+    public static Map getCombinedMap(HttpServletRequest request, Set namesToSkip) {
+        FastMap combinedMap = FastMap.newInstance();
+        combinedMap.putAll(getServletContextMap(request, namesToSkip)); // bottom level application attributes
+        combinedMap.putAll(getSessionMap(request, namesToSkip));        // session overrides application
+        combinedMap.putAll(getParameterMap(request));                   // parameters override session
+        combinedMap.putAll(getAttributeMap(request));                   // attributes trump them all
+                        
+        return combinedMap;
+    }
 
     /**
-     * Create a map from an HttpServletRequest object
+     * Create a map from a HttpServletRequest (parameters) object
      * @return The resulting Map
      */
     public static Map getParameterMap(HttpServletRequest request) {
+        return getParameterMap(request, null);
+    }
+
+    /**
+     * Create a map from a HttpServletRequest (parameters) object
+     * @return The resulting Map
+     */
+    public static Map getParameterMap(HttpServletRequest request, Set<String> namesToSkip) {
         Map paramMap = FastMap.newInstance();
 
         // add all the actual HTTP request parameters
         Enumeration e = request.getParameterNames();
         while (e.hasMoreElements()) {
             String name = (String) e.nextElement();
+            if (namesToSkip != null && namesToSkip.contains(name))
+                continue;
+
             Object value = null;
             String[] paramArr = request.getParameterValues(name);
             if (paramArr != null) {
@@ -133,20 +168,119 @@
                 paramMap.putAll(multiPartMap);
             }
         }
-        
-        //Debug.logInfo("Made parameterMap: \n" + UtilMisc.printMap(paramMap), module);
+
         if (Debug.verboseOn()) {
             Debug.logVerbose("Made Request Parameter Map with [" + paramMap.size() + "] Entries", module);
-            Iterator entryIter = paramMap.entrySet().iterator();
-            while (entryIter.hasNext()) {
-                Map.Entry entry = (Map.Entry) entryIter.next();
-                Debug.logVerbose("Request Parameter Map Entry: [" + entry.getKey() + "] --> " + entry.getValue(), module);
-            }
+            Debug.logVerbose("Request Parameter Map Entries: " + System.getProperty("line.separator") + UtilMisc.printMap(paramMap), module);
         }
         
         return paramMap;
     }
 
+    /**
+     * Create a map from a HttpRequest (attributes) object
+     * @return The resulting Map
+     */
+    public static Map getAttributeMap(HttpServletRequest request) {
+        return getAttributeMap(request, null);
+    }
+
+    /**
+     * Create a map from a HttpRequest (attributes) object
+     * @return The resulting Map
+     */
+    public static Map getAttributeMap(HttpServletRequest request, Set<String> namesToSkip) {
+        Map attributeMap = FastMap.newInstance();
+
+        // look at all request attributes
+        Enumeration requestAttrNames = request.getAttributeNames();
+        while (requestAttrNames.hasMoreElements()) {
+            String attrName = (String) requestAttrNames.nextElement();
+            if (namesToSkip != null && namesToSkip.contains(attrName))
+                continue;
+
+            Object attrValue = request.getAttribute(attrName);
+            attributeMap.put(attrName, attrValue);
+        }
+
+        if (Debug.verboseOn()) {
+            Debug.logVerbose("Made Request Attribute Map with [" + attributeMap.size() + "] Entries", module);
+            Debug.logVerbose("Request Attribute Map Entries: " + System.getProperty("line.separator") + UtilMisc.printMap(attributeMap), module);
+        }
+
+        return attributeMap;
+    }
+
+    /**
+     * Create a map from a HttpSession object
+     * @return The resulting Map
+     */
+    public static Map getSessionMap(HttpServletRequest request) {
+        return getSessionMap(request, null);
+    }
+
+    /**
+     * Create a map from a HttpSession object
+     * @return The resulting Map
+     */
+    public static Map getSessionMap(HttpServletRequest request, Set<String> namesToSkip) {
+        Map sessionMap = FastMap.newInstance();
+        HttpSession session = request.getSession();
+
+        // look at all the session attributes
+        Enumeration sessionAttrNames = session.getAttributeNames();
+        while (sessionAttrNames.hasMoreElements()) {
+            String attrName = (String) sessionAttrNames.nextElement();
+            if (namesToSkip != null && namesToSkip.contains(attrName))
+                continue;
+
+            Object attrValue = session.getAttribute(attrName);
+            sessionMap.put(attrName, attrValue);
+        }
+
+        if (Debug.verboseOn()) {
+            Debug.logVerbose("Made Session Attribute Map with [" + sessionMap.size() + "] Entries", module);
+            Debug.logVerbose("Session Attribute Map Entries: " + System.getProperty("line.separator") + UtilMisc.printMap(sessionMap), module);
+        }
+
+        return sessionMap;
+    }
+
+    /**
+     * Create a map from a ServletContext object
+     * @return The resulting Map
+     */
+    public static Map getServletContextMap(HttpServletRequest request) {
+        return getServletContextMap(request, null);
+    }
+
+    /**
+     * Create a map from a ServletContext object
+     * @return The resulting Map
+     */
+    public static Map getServletContextMap(HttpServletRequest request, Set<String> namesToSkip) {
+        Map servletCtxMap = FastMap.newInstance();
+
+        // look at all servlet context attributes
+        ServletContext servletContext = (ServletContext) request.getAttribute("servletContext");
+        Enumeration applicationAttrNames = servletContext.getAttributeNames();
+        while (applicationAttrNames.hasMoreElements()) {
+            String attrName = (String) applicationAttrNames.nextElement();
+            if (namesToSkip != null && namesToSkip.contains(attrName))
+                continue;
+
+            Object attrValue = servletContext.getAttribute(attrName);
+            servletCtxMap.put(attrName, attrValue);
+        }
+
+        if (Debug.verboseOn()) {
+            Debug.logVerbose("Made ServletContext Attribute Map with [" + servletCtxMap.size() + "] Entries", module);
+            Debug.logVerbose("ServletContext Attribute Map Entries: " + System.getProperty("line.separator") + UtilMisc.printMap(servletCtxMap), module);            
+        }
+
+        return servletCtxMap;
+    }
+
     public static Map makeParamMapWithPrefix(HttpServletRequest request, String prefix, String suffix) {
         return makeParamMapWithPrefix(request, null, prefix, suffix);
     }
@@ -906,4 +1040,5 @@
         HttpSession session = request.getSession();
         return (session == null ? "unknown" : session.getId());
     }
+    
 }

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java?view=diff&rev=536030&r1=536029&r2=536030
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/screen/ScreenRenderer.java Mon May  7 17:25:01 2007
@@ -20,7 +20,6 @@
 
 import java.io.IOException;
 import java.io.Writer;
-import java.util.Enumeration;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Locale;
@@ -36,7 +35,6 @@
 import javolution.util.FastMap;
 import javolution.util.FastSet;
 
-import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.UtilDateTime;
 import org.ofbiz.base.util.UtilFormatOut;
@@ -158,69 +156,7 @@
         attrNamesToSkip.add("security");
         attrNamesToSkip.add("webSiteId");
 
-        Map parameterMap = UtilHttp.getParameterMap(request);
-        // go through all request attributes and for each name that is not already in the parameters Map add the attribute value
-        Enumeration requestAttrNames = request.getAttributeNames();
-        while (requestAttrNames.hasMoreElements()) {
-            String attrName = (String) requestAttrNames.nextElement();
-            Object attrValue = request.getAttribute(attrName);
-
-            // NOTE: this is being set to false by default now
-            //this change came after the realization that it is common to want a request attribute to override a request parameter, but I can't think of even ONE reason why a request parameter should override a request attribute...
-            final boolean preserveRequestParameters = false;
-            if (preserveRequestParameters) {
-                Object param = parameterMap.get(attrName);
-                if (param == null) {
-                    parameterMap.put(attrName, attrValue);
-                } else if (param instanceof String && ((String) param).length() == 0) {
-                    // also put the attribute value in if the parameter is empty
-                    parameterMap.put(attrName, attrValue);
-                } else {
-                    // do nothing, just log something
-                    Debug.logInfo("Found request attribute that conflicts with parameter name, leaving request parameter in place for name: " + attrName, module);
-                }
-            } else {
-                parameterMap.put(attrName, attrValue);
-            }
-        }
-
-        // do the same for session attributes, for convenience
-        Enumeration sessionAttrNames = session.getAttributeNames();
-        while (sessionAttrNames.hasMoreElements()) {
-            String attrName = (String) sessionAttrNames.nextElement();
-            if (attrNamesToSkip.contains(attrName)) continue;
-            Object attrValue = session.getAttribute(attrName);
-            Object param = parameterMap.get(attrName);
-            if (param == null) {
-                parameterMap.put(attrName, attrValue);
-            } else if (param instanceof String && ((String) param).length() == 0) {
-                // also put the attribute value in if the parameter is empty
-                parameterMap.put(attrName, attrValue);
-            } else {
-                // do nothing, just log something
-                Debug.logInfo("Found session attribute that conflicts with parameter name, leaving request parameter in place for name: " + attrName, module);
-            }
-        }
-
-        // do the same for servlet context (application) attribute, for convenience
-        Enumeration applicationAttrNames = servletContext.getAttributeNames();
-        while (applicationAttrNames.hasMoreElements()) {
-            String attrName = (String) applicationAttrNames.nextElement();
-            if (attrNamesToSkip.contains(attrName)) continue;
-            Object param = parameterMap.get(attrName);
-            Object attrValue = servletContext.getAttribute(attrName);
-            if (Debug.verboseOn()) Debug.logVerbose("Getting parameter from application attrbute with name [" + attrName + "] and value [" + attrValue + "]", module);
-            if (param == null) {
-                parameterMap.put(attrName, attrValue);
-            } else if (param instanceof String && ((String) param).length() == 0) {
-                // also put the attribute value in if the parameter is empty
-                parameterMap.put(attrName, attrValue);
-            } else {
-                // do nothing, just log something
-                Debug.logInfo("Found servlet context (application) attribute that conflicts with parameter name, leaving request parameter in place for name: " + attrName, module);
-            }
-        }
-
+        Map parameterMap = UtilHttp.getCombinedMap(request, attrNamesToSkip);      
         GenericValue userLogin = (GenericValue) session.getAttribute("userLogin");
         
         populateBasicContext(context, screens, parameterMap, (GenericDelegator) request.getAttribute("delegator"),
@@ -320,7 +256,7 @@
             context.put("isError", Boolean.FALSE);
         }
         // if a parameter was passed saying this is an error, it is an error
-        if ("true".equals((String) parameterMap.get("isError"))) {
+        if ("true".equals(parameterMap.get("isError"))) {
             context.put("isError", Boolean.TRUE);
         }
         context.put("nowTimestamp", UtilDateTime.nowTimestamp());