svn commit: r898027 - in /ofbiz/branches/executioncontext20091231/framework: api/src/org/ofbiz/api/authorization/OfbizSecurityTransform.java widget/src/org/ofbiz/widget/screen/HtmlWidget.java

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

svn commit: r898027 - in /ofbiz/branches/executioncontext20091231/framework: api/src/org/ofbiz/api/authorization/OfbizSecurityTransform.java widget/src/org/ofbiz/widget/screen/HtmlWidget.java

adrianc
Author: adrianc
Date: Mon Jan 11 19:35:34 2010
New Revision: 898027

URL: http://svn.apache.org/viewvc?rev=898027&view=rev
Log:
Fixed OfbizSecurityTransform.java, added Freemarker templates to the execution path.


Modified:
    ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/OfbizSecurityTransform.java
    ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java

Modified: ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/OfbizSecurityTransform.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/OfbizSecurityTransform.java?rev=898027&r1=898026&r2=898027&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/OfbizSecurityTransform.java (original)
+++ ofbiz/branches/executioncontext20091231/framework/api/src/org/ofbiz/api/authorization/OfbizSecurityTransform.java Mon Jan 11 19:35:34 2010
@@ -19,7 +19,6 @@
 package org.ofbiz.api.authorization;
 
 import java.io.IOException;
-import java.security.AccessControlException;
 import java.security.Permission;
 import java.util.Map;
 
@@ -27,13 +26,12 @@
 import org.ofbiz.base.util.Debug;
 
 import freemarker.core.Environment;
-import freemarker.ext.beans.BeanModel;
+import freemarker.ext.beans.StringModel;
 import freemarker.template.SimpleScalar;
-import freemarker.template.Template;
 import freemarker.template.TemplateDirectiveBody;
+import freemarker.template.TemplateDirectiveModel;
 import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
-import freemarker.template.TemplateDirectiveModel;
 
 /**
  * OfbizSecurityTransform - Security-aware Freemarker transform.
@@ -47,36 +45,47 @@
         if (body == null) {
             return;
         }
-        SimpleScalar obj = (SimpleScalar) params.get("artifactId");
-        if (obj == null) {
+        String artifactId = toString(params.get("artifactId"));
+        if (artifactId == null) {
             Debug.logError("artifactId parameter not found, unable to execute transform", module);
             return;
         }
-        String artifactId = obj.getAsString();
-        obj = (SimpleScalar) params.get("permission");
-        if (obj == null) {
+        String permStr = toString(params.get("permission"));
+        if (permStr == null) {
             Debug.logError("permission parameter not found, unable to execute transform", module);
             return;
         }
-        String permStr = obj.getAsString();
         Permission permission = BasicPermissions.ConversionMap.get(permStr.toUpperCase());
         if (permission == null) {
             Debug.logError("Unknown permission \"" + permStr + "\", unable to execute transform", module);
             return;
         }
-        BeanModel contextBean = (BeanModel)env.getVariable("executionContext");
-        if (contextBean == null) {
-            Debug.logError("ExecutionContext not found, unable to execute transform", module);
-            return;
-        }
-        Template template = env.getTemplate();
-        String location = template.getName();
-        ThreadContext.pushExecutionArtifact(location, artifactId);
-        AccessController accessController = ThreadContext.getAccessController();
         try {
-            accessController.checkPermission(permission);
+            ThreadContext.pushExecutionArtifact(module, artifactId);
+            ThreadContext.getAccessController().checkPermission(permission);
             body.render(env.getOut());
-        } catch (AccessControlException e) {}
-        ThreadContext.popExecutionArtifact();
+        } catch (Exception e) {
+        } finally {
+            ThreadContext.popExecutionArtifact();
+        }
+    }
+
+    protected static String toString(Object freeMarkerObject) {
+        String result = null;
+        if (freeMarkerObject != null) {
+            try {
+                StringModel modelObj = (StringModel) freeMarkerObject;
+                result = modelObj.getAsString();
+            } catch (Exception e) {
+                try {
+                    SimpleScalar scalarObj = (SimpleScalar) freeMarkerObject;
+                    result = scalarObj.getAsString();
+                } catch (Exception e2) {}
+            }
+            if (result != null) {
+                result = result.replace("/", "");
+            }
+        }
+        return result;
     }
 }

Modified: ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java
URL: http://svn.apache.org/viewvc/ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java?rev=898027&r1=898026&r2=898027&view=diff
==============================================================================
--- ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java (original)
+++ ofbiz/branches/executioncontext20091231/framework/widget/src/org/ofbiz/widget/screen/HtmlWidget.java Mon Jan 11 19:35:34 2010
@@ -19,13 +19,13 @@
 package org.ofbiz.widget.screen;
 
 import java.io.IOException;
-import java.net.MalformedURLException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 import javolution.util.FastMap;
 
+import org.ofbiz.api.context.ThreadContext;
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.StringUtil;
@@ -44,7 +44,6 @@
 import freemarker.ext.beans.StringModel;
 import freemarker.template.Configuration;
 import freemarker.template.Template;
-import freemarker.template.TemplateException;
 import freemarker.template.TemplateModel;
 import freemarker.template.TemplateModelException;
 
@@ -188,41 +187,37 @@
          */
 
         if (location.endsWith(".ftl")) {
-            try {
-                Map<String, ? extends Object> parameters = UtilGenerics.checkMap(context.get("parameters"));
-                boolean insertWidgetBoundaryComments = ModelWidget.widgetBoundaryCommentsEnabled(parameters);
-                if (insertWidgetBoundaryComments) {
+            Map<String, ? extends Object> parameters = UtilGenerics.checkMap(context.get("parameters"));
+            Template template = null;
+            boolean insertWidgetBoundaryComments = ModelWidget.widgetBoundaryCommentsEnabled(parameters);
+            if (insertWidgetBoundaryComments) {
+                try {
                     writer.append(HtmlWidgetRenderer.formatBoundaryComment("Begin", "Template", location));
+                    if (location.endsWith(".fo.ftl")) { // FOP can't render correctly escaped characters
+                        template = FreeMarkerWorker.getTemplate(location);
+                    } else {
+                        template = FreeMarkerWorker.getTemplate(location, specialTemplateCache, specialConfig);
+                    }
+                } catch (Exception e) {
+                    String errMsg = "Error rendering included template at location [" + location + "]: ";
+                    Debug.logError(e, errMsg, module);
+                    writeError(writer, errMsg + e.toString());
+                    return;
                 }
-
-                //FreeMarkerWorker.renderTemplateAtLocation(location, context, writer);
-                Template template = null;
-                if (location.endsWith(".fo.ftl")) { // FOP can't render correctly escaped characters
-                    template = FreeMarkerWorker.getTemplate(location);
-                } else {
-                    template = FreeMarkerWorker.getTemplate(location, specialTemplateCache, specialConfig);
-                }
+            }
+            try {
+                String artifactName = template.getName().replace("component://", "").replace(".ftl", "");
+                ThreadContext.pushExecutionArtifact(location, artifactName);
                 FreeMarkerWorker.renderTemplate(template, context, writer);
-
                 if (insertWidgetBoundaryComments) {
                     writer.append(HtmlWidgetRenderer.formatBoundaryComment("End", "Template", location));
                 }
-            } catch (IllegalArgumentException e) {
-                String errMsg = "Error rendering included template at location [" + location + "]: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                writeError(writer, errMsg);
-            } catch (MalformedURLException e) {
-                String errMsg = "Error rendering included template at location [" + location + "]: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                writeError(writer, errMsg);
-            } catch (TemplateException e) {
-                String errMsg = "Error rendering included template at location [" + location + "]: " + e.toString();
-                Debug.logError(e, errMsg, module);
-                writeError(writer, errMsg);
-            } catch (IOException e) {
-                String errMsg = "Error rendering included template at location [" + location + "]: " + e.toString();
+            } catch (Exception e) {
+                String errMsg = "Error rendering included template at location [" + location + "]: ";
                 Debug.logError(e, errMsg, module);
-                writeError(writer, errMsg);
+                writeError(writer, errMsg + e.toString());
+            } finally {
+                ThreadContext.popExecutionArtifact();
             }
         } else {
             throw new IllegalArgumentException("Rendering not yet supported for the template at location: " + location);