You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ad...@apache.org on 2008/06/03 19:32:07 UTC

svn commit: r662847 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlTreeRenderer.java tree/ModelTree.java tree/ModelTreeAction.java tree/ModelTreeCondition.java tree/TreeFactory.java tree/TreeStringRenderer.java

Author: adrianc
Date: Tue Jun  3 10:32:07 2008
New Revision: 662847

URL: http://svn.apache.org/viewvc?rev=662847&view=rev
Log:
Fixed thread-safe issues in the tree widget. Eliminated compiler warnings.

Modified:
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeCondition.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeStringRenderer.java

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java?rev=662847&r1=662846&r2=662847&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java Tue Jun  3 10:32:07 2008
@@ -27,6 +27,7 @@
 import javax.servlet.http.HttpServletResponse;
 
 import org.ofbiz.base.util.StringUtil;
+import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.webapp.control.RequestHandler;
 import org.ofbiz.webapp.taglib.ContentUrlTag;
@@ -60,7 +61,7 @@
 
         String pathString = buildPathString(node.getModelTree(), depth);
         String currentNodeTrailPiped = null;
-        List<String> currentNodeTrail = node.getModelTree().getCurrentNodeTrail();
+        List<String> currentNodeTrail = UtilGenerics.toList(context.get("currentNodeTrail"));
         String staticNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");
         context.put("staticNodeTrailPiped", staticNodeTrailPiped);
         context.put("nodePathString", pathString);
@@ -88,7 +89,7 @@
         // check to see if this node needs to be expanded.
         if (hasChildren && node.isExpandCollapse()) {
             String targetEntityId = null;
-            List targetNodeTrail = node.getModelTree().getTrailList();
+            List<String> targetNodeTrail = UtilGenerics.toList(context.get("targetNodeTrail"));
             if (depth < targetNodeTrail.size()) {
                 targetEntityId = (String)targetNodeTrail.get(depth);
             }
@@ -103,7 +104,7 @@
             int openDepth = node.getModelTree().getOpenDepth();
             if (depth >= openDepth && (targetEntityId == null || !targetEntityId.equals(entityId))) {
                 // Not on the trail
-                if( node.showPeers(depth)) {
+                if( node.showPeers(depth, context)) {
                     context.put("processChildren", Boolean.FALSE);
                     //expandCollapseLink.setText("&nbsp;+&nbsp;");
                     currentNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java?rev=662847&r1=662846&r2=662847&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java Tue Jun  3 10:32:07 2008
@@ -30,10 +30,13 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.xml.parsers.ParserConfigurationException;
 
+import javolution.util.FastList;
+
 import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.StringUtil;
 import org.ofbiz.base.util.UtilFormatOut;
+import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilMisc;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
@@ -74,8 +77,6 @@
     protected LocalDispatcher dispatcher;
     protected FlexibleStringExpander expandCollapseRequestExdr;
     protected FlexibleStringExpander trailNameExdr;
-    protected List trail = new ArrayList();
-    protected List<String> currentNodeTrail;
     protected int openDepth;
     protected int postTrailOpenDepth;
     protected int [] nodeIndices = new int[20];
@@ -197,18 +198,6 @@
         return this.trailNameExdr.expandString(context);
     }
     
-    public List getTrailList() {
-        return trail;
-    }
-    
-    public void setTrailList(List trailList) {
-        this.trail = trailList;
-    }
-    
-    public List getCurrentNodeTrail() {
-        return currentNodeTrail;
-    }
-    
     public String getBoundaryCommentName() {
         return treeLocation + "#" + name;
     }
@@ -237,21 +226,13 @@
         setWidgetBoundaryComments(context);
 
         ModelNode node = (ModelNode)nodeMap.get(rootNodeName);
-        /*
-        List parentNodeTrail = (List)context.get("currentNodeTrail");
-        if (parentNodeTrail != null)
-            currentNodeTrail = new ArrayList(parentNodeTrail);
-        else
-        */
-            currentNodeTrail = new ArrayList();
-            
-        //Map requestParameters = (Map)context.get("requestParameters");
-        //String treeString = (String)requestParameters.get("trail");
+
         String trailName = trailNameExdr.expandString(context);
         String treeString = (String)context.get(trailName);
         if (UtilValidate.isEmpty(treeString)) {
             treeString = (String)parameters.get(trailName);
         }
+        List<String> trail = null;
         if (UtilValidate.isNotEmpty(treeString)) {
             trail = StringUtil.split(treeString, "|");
             if (trail == null || trail.size() == 0)
@@ -259,10 +240,11 @@
             
             context.put("rootEntityId", trail.get(0));
             context.put(defaultPkName, trail.get(0));
-            context.put("targetNodeTrail", trail);
         } else {
-                Debug.logError("Trail value is empty.", module);
+            trail = FastList.newInstance();
         }
+        context.put("targetNodeTrail", trail);
+        context.put("currentNodeTrail", FastList.newInstance());
         StringWriter writer = new StringWriter();
         try {
             node.renderNodeString(writer, context, treeStringRenderer, 0, true);
@@ -272,15 +254,6 @@
                 Debug.logError(e2, errMsg, module);
                 throw new RuntimeException(errMsg);
         }
-//        try {
-//            FileOutputStream fw = new FileOutputStream(new File("/usr/local/agi/ofbiz/hot-deploy/ofbizdoc/misc/profile.data"));
-//            Profiler.print(fw);
-//            fw.close();
-//        } catch (IOException e) {
-//           Debug.logError("[PROFILER] " + e.getMessage(),"");
-//        }
-
-
     }
 
     public LocalDispatcher getDispatcher() {
@@ -304,11 +277,11 @@
         protected Label label;
         protected Link link;
         protected Image image;
-        protected List subNodeList = new ArrayList();
-        protected List actions = new ArrayList();
+        protected List<ModelSubNode> subNodeList = new ArrayList<ModelSubNode>();
+        protected List<ModelTreeAction> actions = new ArrayList<ModelTreeAction>();
         protected String name;
         protected ModelTree modelTree;
-        protected List subNodeValues;
+        protected List<Object []> subNodeValues;
         protected String expandCollapseStyle;
         protected FlexibleStringExpander wrapStyleExdr;
         protected ModelTreeCondition condition;
@@ -400,9 +373,7 @@
             }
             //Debug.logInfo("in ModelMenu, name:" + this.getName(), module);
             if (passed) {
-                //this.subNodeValues = new ArrayList();
-                //context.put("subNodeValues", new ArrayList());
-                //if (Debug.infoOn()) Debug .logInfo(" renderNodeString, " + modelTree.getdefaultPkName() + " :" + context.get(modelTree.getdefaultPkName()), module);
+                List<String> currentNodeTrail = UtilGenerics.toList(context.get("currentNodeTrail"));
                 context.put("processChildren", Boolean.TRUE);
                 // this action will usually obtain the "current" entity
                 ModelTreeAction.runSubActions(this.actions, context);
@@ -415,10 +386,9 @@
                     id = (String) context.get(pkName);
                 }
                 if (id != null) { 
-                    modelTree.currentNodeTrail.add(id);
+                    currentNodeTrail.add(id);
                 }
-                context.put("currentNodeTrail", modelTree.currentNodeTrail);
-                String currentNodeTrailPiped = StringUtil.join(modelTree.currentNodeTrail, "|");
+                String currentNodeTrailPiped = StringUtil.join(currentNodeTrail, "|");
                 context.put("currentNodeTrailPiped", currentNodeTrailPiped);
                 treeStringRenderer.renderNodeBegin(writer, context, this, depth, isLast);
                 //if (Debug.infoOn()) Debug.logInfo(" context:" +
@@ -454,13 +424,13 @@
                             modelTree.setNodeIndexAtDepth(newDepth, nodeIndex);
                             Object[] arr = (Object[]) nodeIter.next();
                             ModelNode node = (ModelNode) arr[0];
-                            Map val = (Map) arr[1];
+                            Map<String, Object> val = UtilGenerics.checkMap(arr[1]);
                             //GenericPK pk = val.getPrimaryKey();
                             //if (Debug.infoOn()) Debug.logInfo(" pk:" + pk,
                             // module);
                             String thisPkName = node.getPkName();
                             String thisEntityId = (String) val.get(thisPkName);
-                            Map newContext = ((MapStack) context) .standAloneChildStack();
+                            MapStack<String> newContext = MapStack.create(context);
                             String nodeEntryName = node.getEntryName();
                             if (UtilValidate.isNotEmpty(nodeEntryName)) {
                                 newContext.put(nodeEntryName, val);                        
@@ -469,11 +439,11 @@
                             }
                             newContext.put("currentNodeIndex", new Integer(nodeIndex));
                             String targetEntityId = null;
-                            List targetNodeTrail = this.modelTree .getTrailList();
+                            List targetNodeTrail = UtilGenerics.checkList(context.get("targetNodeTrail"));
                             if (newDepth < targetNodeTrail.size()) {
                                 targetEntityId = (String) targetNodeTrail .get(newDepth);
                             }
-                            if ((targetEntityId != null && targetEntityId .equals(thisEntityId)) || this.showPeers(newDepth)) {
+                            if ((targetEntityId != null && targetEntityId .equals(thisEntityId)) || this.showPeers(newDepth, context)) {
                                 boolean lastNode = !nodeIter.hasNext();
                                 newContext.put("lastNode", new Boolean(lastNode));
                                 node.renderNodeString(writer, newContext, treeStringRenderer, newDepth, lastNode);
@@ -502,8 +472,8 @@
                     throw new RuntimeException(errMsg);
                 }
                 treeStringRenderer.renderNodeEnd(writer, context, this);
-                int removeIdx = modelTree.currentNodeTrail.size() - 1;
-                if (removeIdx >= 0) modelTree.currentNodeTrail.remove(removeIdx);
+                int removeIdx = currentNodeTrail.size() - 1;
+                if (removeIdx >= 0) currentNodeTrail.remove(removeIdx);
             }
         }
 
@@ -586,7 +556,7 @@
         }
 
         public void getChildren(Map<String, Object> context) {
-             this.subNodeValues = new ArrayList();
+             this.subNodeValues = new ArrayList<Object []>();
              Iterator nodeIter = subNodeList.iterator();
              while (nodeIter.hasNext()) {
                  ModelSubNode subNode = (ModelSubNode)nodeIter.next();
@@ -658,9 +628,9 @@
             return name.equals(modelTree.getRootNodeName());
         }
         
-        public boolean showPeers(int currentDepth) {
+        public boolean showPeers(int currentDepth, Map<String, Object> context) {
             int trailSize = 0;
-            List trail = modelTree.getTrailList();
+            List trail = UtilGenerics.checkList(context.get("targetNodeTrail"));
             int openDepth = modelTree.getOpenDepth();
             int postTrailOpenDepth = modelTree.getPostTrailOpenDepth();
             if (trail != null) trailSize = trail.size();
@@ -736,8 +706,7 @@
     
             protected ModelNode rootNode;
             protected FlexibleStringExpander nodeNameExdr;
-            protected List actions = new ArrayList();
-            protected List outFieldMaps;
+            protected List<ModelTreeAction> actions = new ArrayList<ModelTreeAction>();
             protected ListIterator listIterator;
     
             public ModelSubNode() {}

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java?rev=662847&r1=662846&r2=662847&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java Tue Jun  3 10:32:07 2008
@@ -32,6 +32,7 @@
 import org.ofbiz.base.util.GeneralException;
 import org.ofbiz.base.util.ObjectType;
 import org.ofbiz.base.util.UtilFormatOut;
+import org.ofbiz.base.util.UtilGenerics;
 import org.ofbiz.base.util.UtilValidate;
 import org.ofbiz.base.util.UtilXml;
 import org.ofbiz.base.util.collections.FlexibleMapAccessor;
@@ -213,7 +214,7 @@
         protected FlexibleStringExpander resultMapListIteratorNameExdr;
         protected FlexibleStringExpander resultMapValueNameExdr;
         protected FlexibleStringExpander valueNameExdr;
-        protected Map fieldMap;
+        protected Map<FlexibleMapAccessor, Object> fieldMap;
         
         public Service(ModelTree.ModelNode modelNode, Element serviceElement) {
             super (modelNode, serviceElement);
@@ -247,18 +248,18 @@
             boolean autoFieldMapBool = !"false".equals(autoFieldMapString);
             
             try {
-                Map serviceContext = null;
+                Map<String, Object> serviceContext = null;
                 if (autoFieldMapBool) {
                     serviceContext = this.modelTree.getDispatcher().getDispatchContext().makeValidContext(serviceNameExpanded, ModelService.IN_PARAM, context);
                 } else {
-                    serviceContext = new HashMap();
+                    serviceContext = new HashMap<String, Object>();
                 }
                 
                 if (this.fieldMap != null) {
                     EntityFinderUtil.expandFieldMapToContext(this.fieldMap, context, serviceContext);
                 }
                 
-                Map result = this.modelTree.getDispatcher().runSync(serviceNameExpanded, serviceContext);
+                Map<String, Object> result = this.modelTree.getDispatcher().runSync(serviceNameExpanded, serviceContext);
                 
                 if (this.resultMapNameAcsr != null) {
                     this.resultMapNameAcsr.put(context, result);
@@ -296,7 +297,8 @@
                         if (UtilValidate.isNotEmpty(valueName)) {
                             context.put(valueName, result.get(resultMapValueName));
                         } else {
-                            context.putAll((Map)result.get(resultMapValueName));
+                            Map<String, Object> resultMap = UtilGenerics.checkMap(result.get(resultMapValueName));
+                            context.putAll(resultMap);
                         }
                     }
                 }

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeCondition.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeCondition.java?rev=662847&r1=662846&r2=662847&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeCondition.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeCondition.java Tue Jun  3 10:32:07 2008
@@ -79,7 +79,7 @@
     }
     
     public static List readSubConditions(ModelTree modelTree, Element conditionElement) {
-        List condList = FastList.newInstance();
+        List<TreeCondition> condList = FastList.newInstance();
         List subElementList = UtilXml.childElementList(conditionElement);
         Iterator subElementIter = subElementList.iterator();
         while (subElementIter.hasNext()) {
@@ -326,7 +326,7 @@
                 fieldVal = "";
             }
 
-            List messages = FastList.newInstance();
+            List<String> messages = FastList.newInstance();
             Boolean resultBool = BaseCompare.doRealCompare(fieldVal, value, operator, type, format, messages, null, null, true);
             if (messages.size() > 0) {
                 messages.add(0, "Error with comparison in if-compare between field [" + fieldAcsr.toString() + "] with value [" + fieldVal + "] and value [" + value + "] with operator [" + operator + "] and type [" + type + "]: ");
@@ -375,7 +375,7 @@
                 fieldVal = "";
             }
 
-            List messages = FastList.newInstance();
+            List<String> messages = FastList.newInstance();
             Boolean resultBool = BaseCompare.doRealCompare(fieldVal, toFieldVal, operator, type, format, messages, null, null, false);
             if (messages.size() > 0) {
                 messages.add(0, "Error with comparison in if-compare-field between field [" + fieldAcsr.toString() + "] with value [" + fieldVal + "] and to-field [" + toFieldVal.toString() + "] with value [" + toFieldVal + "] with operator [" + operator + "] and type [" + type + "]: ");

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java?rev=662847&r1=662846&r2=662847&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java Tue Jun  3 10:32:07 2008
@@ -47,15 +47,15 @@
     
     public static final String module = TreeFactory.class.getName();
 
-    public static final UtilCache treeLocationCache = new UtilCache("widget.tree.locationResource", 0, 0, false);
-    public static final UtilCache treeWebappCache = new UtilCache("widget.tree.webappResource", 0, 0, false);
+    public static final UtilCache<String, Map<String, ModelTree>> treeLocationCache = new UtilCache<String, Map<String, ModelTree>>("widget.tree.locationResource", 0, 0, false);
+    public static final UtilCache<String, Map<String, ModelTree>> treeWebappCache = new UtilCache<String, Map<String, ModelTree>>("widget.tree.webappResource", 0, 0, false);
     
     public static ModelTree getTreeFromLocation(String resourceName, String treeName, GenericDelegator delegator, LocalDispatcher dispatcher) 
             throws IOException, SAXException, ParserConfigurationException {
-        Map modelTreeMap = (Map) treeLocationCache.get(resourceName);
+        Map<String, ModelTree> modelTreeMap = treeLocationCache.get(resourceName);
         if (modelTreeMap == null) {
             synchronized (TreeFactory.class) {
-                modelTreeMap = (Map) treeLocationCache.get(resourceName);
+                modelTreeMap = treeLocationCache.get(resourceName);
                 if (modelTreeMap == null) {
                     ClassLoader loader = Thread.currentThread().getContextClassLoader();
                     if (loader == null) {
@@ -84,10 +84,10 @@
         String cacheKey = webappName + "::" + resourceName;
         
         
-        Map modelTreeMap = (Map) treeWebappCache.get(cacheKey);
+        Map<String, ModelTree> modelTreeMap = treeWebappCache.get(cacheKey);
         if (modelTreeMap == null) {
             synchronized (TreeFactory.class) {
-                modelTreeMap = (Map) treeWebappCache.get(cacheKey);
+                modelTreeMap = treeWebappCache.get(cacheKey);
                 if (modelTreeMap == null) {
                     ServletContext servletContext = (ServletContext) request.getAttribute("servletContext");
                     GenericDelegator delegator = (GenericDelegator) request.getAttribute("delegator");
@@ -108,8 +108,8 @@
         return modelTree;
     }
     
-    public static Map readTreeDocument(Document treeFileDoc, GenericDelegator delegator, LocalDispatcher dispatcher, String treeLocation) {
-        Map modelTreeMap = new HashMap();
+    public static Map<String, ModelTree> readTreeDocument(Document treeFileDoc, GenericDelegator delegator, LocalDispatcher dispatcher, String treeLocation) {
+        Map<String, ModelTree> modelTreeMap = new HashMap<String, ModelTree>();
         if (treeFileDoc != null) {
             // read document and construct ModelTree for each tree element
             Element rootElement = treeFileDoc.getDocumentElement();

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeStringRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeStringRenderer.java?rev=662847&r1=662846&r2=662847&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeStringRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeStringRenderer.java Tue Jun  3 10:32:07 2008
@@ -19,7 +19,6 @@
 package org.ofbiz.widget.tree;
 
 import java.io.IOException;
-import java.io.Writer;
 import java.util.Map;
 
 import org.ofbiz.widget.screen.ScreenStringRenderer;



Re: svn commit: r662847 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlTreeRenderer.java tree/ModelTree.java tree/ModelTreeAction.java tree/ModelTreeCondition.java tree/TreeFactory.java tree/TreeStringRenderer.java

Posted by Adrian Crum <ad...@hlmksw.com>.
Thanks David!

Ever since you mentioned releasing the framework I have tried to clean 
up the screen widget code. Also, thanks to Jacopo for helping out.

I have one more idea for cleaning up the widget code that I'm working 
on. I'll submit a Jira issue with a POC patch in a few days.

-Adrian

David E Jones wrote:
> 
> Wow, thanks for doing this Adrian. This code has been neglected for a 
> long time, really from the beginning I'd say. I worked with Al a bit on 
> the design of the XML file for it, and he implemented the whole thing 
> and I haven't really looked at it since then. I'm glad there were just a 
> few issues with it... it'll be a great tool especially once it is 
> "super-AJAX-ed". ;)
> 
> -David
> 
> 
> On Jun 3, 2008, at 11:32 AM, adrianc@apache.org wrote:
> 
>> Author: adrianc
>> Date: Tue Jun  3 10:32:07 2008
>> New Revision: 662847
>>
>> URL: http://svn.apache.org/viewvc?rev=662847&view=rev
>> Log:
>> Fixed thread-safe issues in the tree widget. Eliminated compiler 
>> warnings.
>>
>> Modified:
>>    
>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlTreeRenderer.java 
>>
>>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTree.java
>>    
>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeAction.java 
>>
>>    
>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ModelTreeCondition.java 
>>
>>    
>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeFactory.java
>>    
>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/TreeStringRenderer.java 
>>
>>
> 

Re: svn commit: r662847 - in /ofbiz/trunk/framework/widget/src/org/ofbiz/widget: html/HtmlTreeRenderer.java tree/ModelTree.java tree/ModelTreeAction.java tree/ModelTreeCondition.java tree/TreeFactory.java tree/TreeStringRenderer.java

Posted by David E Jones <jo...@undersunconsulting.com>.
Wow, thanks for doing this Adrian. This code has been neglected for a  
long time, really from the beginning I'd say. I worked with Al a bit  
on the design of the XML file for it, and he implemented the whole  
thing and I haven't really looked at it since then. I'm glad there  
were just a few issues with it... it'll be a great tool especially  
once it is "super-AJAX-ed". ;)

-David


On Jun 3, 2008, at 11:32 AM, adrianc@apache.org wrote:

> Author: adrianc
> Date: Tue Jun  3 10:32:07 2008
> New Revision: 662847
>
> URL: http://svn.apache.org/viewvc?rev=662847&view=rev
> Log:
> Fixed thread-safe issues in the tree widget. Eliminated compiler  
> warnings.
>
> Modified:
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/ 
> HtmlTreeRenderer.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ 
> ModelTree.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ 
> ModelTreeAction.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ 
> ModelTreeCondition.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ 
> TreeFactory.java
>    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/tree/ 
> TreeStringRenderer.java
>