You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2007/12/13 21:37:22 UTC

svn commit: r604021 - in /cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel: ./ library/

Author: vgritsenko
Date: Thu Dec 13 12:37:20 2007
New Revision: 604021

URL: http://svn.apache.org/viewvc?rev=604021&view=rev
Log:
'localLibrary' is never null.
wrap context change into try/finally.

Modified:
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinitionBuilder.java
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java
    cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/library/Library.java

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinitionBuilder.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinitionBuilder.java?rev=604021&r1=604020&r2=604021&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinitionBuilder.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractContainerDefinitionBuilder.java Thu Dec 13 12:37:20 2007
@@ -25,7 +25,6 @@
  *
  * @version $Id$
  */
-
 public abstract class AbstractContainerDefinitionBuilder extends AbstractWidgetDefinitionBuilder {
 
     protected void setupContainer(Element element, String widgetsElementName, AbstractContainerDefinition definition)
@@ -40,33 +39,35 @@
 
         // All child elements of the widgets element are widgets
         Element[] widgetElements = DomHelper.getChildElements(widgetsElement, FormsConstants.DEFINITION_NS);
-        WidgetDefinitionBuilderContext oldContext = this.context;
 
-        for (int i = 0; i < widgetElements.length; i++) {
-            Element widgetElement = widgetElements[i];
-
-            this.context = new WidgetDefinitionBuilderContext(oldContext);
-            this.context.setSuperDefinition(null);
+        WidgetDefinitionBuilderContext oldContext = this.context;
+        try {
+            for (int i = 0; i < widgetElements.length; i++) {
+                Element widgetElement = widgetElements[i];
+
+                this.context = new WidgetDefinitionBuilderContext(oldContext);
+                this.context.setSuperDefinition(null);
+
+                String newId = DomHelper.getAttribute(widgetElement, "extends", null);
+                if (newId != null) {
+                    WidgetDefinition def;
+                    if ((def = this.context.getLocalLibrary().getDefinition(newId)) != null) {
+                        this.context.setSuperDefinition(def);
+                    } else if ((def = definition.getWidgetDefinition(newId)) != null) {
+                        this.context.setSuperDefinition(def);
+                    }
+                    // throw new FormsException("Widget to inherit from ("+newId+") not
+                    // found!", DomHelper.getLocationObject(element));
+                }
 
-            String newId = DomHelper.getAttribute(widgetElement, "extends", null);
-            WidgetDefinition def;
-            if (newId != null) {
-                if ((def = this.context.getLocalLibrary().getDefinition(newId)) != null) {
-                    this.context.setSuperDefinition(def);
-                } else if ((def = definition.getWidgetDefinition(newId)) != null) {
-                    this.context.setSuperDefinition(def);
+                WidgetDefinition widgetDefinition = buildAnotherWidgetDefinition(widgetElement);
+                if (widgetDefinition != null) {
+                    definition.addWidgetDefinition(widgetDefinition);
                 }
-                // throw new FormsException("Widget to inherit from ("+newId+") not
-                // found!", DomHelper.getLocationObject(element));
-            }
 
-            WidgetDefinition widgetDefinition = buildAnotherWidgetDefinition(widgetElement);
-            if (widgetDefinition != null) {
-                definition.addWidgetDefinition(widgetDefinition);
             }
-
+        } finally {
+            this.context = oldContext;
         }
-
-        this.context = oldContext;
     }
 }

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java?rev=604021&r1=604020&r2=604021&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/AbstractWidgetDefinitionBuilder.java Thu Dec 13 12:37:20 2007
@@ -59,18 +59,18 @@
     throws Exception {
         // so changes don't pollute upper levels
         this.context = new WidgetDefinitionBuilderContext(context);
+        try {
+            WidgetDefinition def = buildWidgetDefinition(widgetElement);
 
-        WidgetDefinition def = buildWidgetDefinition(widgetElement);
+            // register this class with the local library, if any.
+            if (DomHelper.getAttributeAsBoolean(widgetElement, "register", false)) {
+                this.context.getLocalLibrary().addDefinition(def);
+            }
 
-        // register this class with the local library, if any.
-        if (DomHelper.getAttributeAsBoolean(widgetElement, "register", false) &&
-                this.context != null &&
-                this.context.getLocalLibrary() != null) {
-            this.context.getLocalLibrary().addDefinition(def);
+            return def;
+        } finally {
+            this.context = null;
         }
-
-        this.context = null;
-        return def;
     }
 
     protected void setupDefinition(Element widgetElement, AbstractWidgetDefinition definition)
@@ -139,7 +139,7 @@
     protected WidgetDefinition buildAnotherWidgetDefinition(Element widgetDefinition)
     throws Exception {
         String widgetName = widgetDefinition.getLocalName();
-        WidgetDefinitionBuilder builder = (WidgetDefinitionBuilder)widgetDefinitionBuilders.get(widgetName);
+        WidgetDefinitionBuilder builder = (WidgetDefinitionBuilder) widgetDefinitionBuilders.get(widgetName);
         if (builder == null) {
             throw new FormsException("Unknown kind of widget '" + widgetName + "'.",
                                      DomHelper.getLocationObject(widgetDefinition));

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java?rev=604021&r1=604020&r2=604021&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/FormDefinitionBuilder.java Thu Dec 13 12:37:20 2007
@@ -32,6 +32,10 @@
 
     protected LibraryManager libraryManager;
 
+    public void setLibraryManager(LibraryManager libraryManager) {
+        this.libraryManager = libraryManager;
+    }
+
     public WidgetDefinition buildWidgetDefinition(Element widgetElement, WidgetDefinitionBuilderContext context)
     throws Exception {
         throw new UnsupportedOperationException("Please use the other signature without WidgetDefinitionBuilderContext!");
@@ -39,32 +43,29 @@
 
     public WidgetDefinition buildWidgetDefinition(Element formElement) throws Exception {
         FormDefinition formDefinition = new FormDefinition(libraryManager);
-        this.context = new WidgetDefinitionBuilderContext();
-        this.context.setLocalLibrary(formDefinition.getLocalLibrary());
+        this.context = new WidgetDefinitionBuilderContext(formDefinition.getLocalLibrary());
 
-        // set local URI
-        formDefinition.getLocalLibrary().setSourceURI(LocationAttributes.getURI(formElement));
+        try {
+            // set local URI
+            formDefinition.getLocalLibrary().setSourceURI(LocationAttributes.getURI(formElement));
 
-        Iterator i = buildEventListeners(formElement, "on-processing-phase", ProcessingPhaseListener.class).iterator();
-        while (i.hasNext()) {
-            formDefinition.addProcessingPhaseListener((ProcessingPhaseListener) i.next());
-        }
+            Iterator i = buildEventListeners(formElement, "on-processing-phase", ProcessingPhaseListener.class).iterator();
+            while (i.hasNext()) {
+                formDefinition.addProcessingPhaseListener((ProcessingPhaseListener) i.next());
+            }
 
-        super.setupDefinition(formElement, formDefinition);
-        setDisplayData(formElement, formDefinition);
+            super.setupDefinition(formElement, formDefinition);
+            setDisplayData(formElement, formDefinition);
 
-        setupContainer(formElement,"widgets",formDefinition);
+            setupContainer(formElement,"widgets",formDefinition);
 
-        formDefinition.resolve();
+            formDefinition.resolve();
 
-        formDefinition.makeImmutable();
+            formDefinition.makeImmutable();
+        } finally {
+            this.context = null;
+        }
 
-        this.context = null;
         return formDefinition;
-    }
-
-    public void setLibraryManager( LibraryManager libraryManager )
-    {
-        this.libraryManager = libraryManager;
     }
 }

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java?rev=604021&r1=604020&r2=604021&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/ImportDefinitionBuilder.java Thu Dec 13 12:37:20 2007
@@ -35,11 +35,6 @@
      */
     public WidgetDefinition buildWidgetDefinition(Element widgetElement)
     throws Exception {
-        if (this.context == null || this.context.getLocalLibrary() == null) {
-            throw new FormsException("Import statement seen and context is empty.",
-                                     DomHelper.getLocationObject(widgetElement));
-        }
-
         Library lib = this.context.getLocalLibrary();
         String prefix = DomHelper.getAttribute(widgetElement, PREFIX_ATTRIBUTE);
         String uri = DomHelper.getAttribute(widgetElement, URI_ATTRIBUTE);

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java?rev=604021&r1=604020&r2=604021&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/WidgetDefinitionBuilderContext.java Thu Dec 13 12:37:20 2007
@@ -25,16 +25,17 @@
  */
 public class WidgetDefinitionBuilderContext {
 
-    protected WidgetDefinition superDefinition;
     protected Library localLibrary;
+    protected WidgetDefinition superDefinition;
 
 
-    public WidgetDefinitionBuilderContext() {
+    public WidgetDefinitionBuilderContext(Library localLibrary) {
+        this.localLibrary = localLibrary;
     }
 
-    public WidgetDefinitionBuilderContext(WidgetDefinitionBuilderContext other) {
-        this.superDefinition = other.superDefinition;
-        this.localLibrary = other.localLibrary;
+    public WidgetDefinitionBuilderContext(WidgetDefinitionBuilderContext parent) {
+        this.localLibrary = parent.localLibrary;
+        this.superDefinition = parent.superDefinition;
     }
 
     public WidgetDefinition getSuperDefinition() {
@@ -47,9 +48,5 @@
 
     public Library getLocalLibrary() {
         return localLibrary;
-    }
-
-    public void setLocalLibrary(Library lib) {
-        localLibrary = lib;
     }
 }

Modified: cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/library/Library.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/library/Library.java?rev=604021&r1=604020&r2=604021&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/library/Library.java (original)
+++ cocoon/trunk/blocks/cocoon-forms/cocoon-forms-impl/src/main/java/org/apache/cocoon/forms/formmodel/library/Library.java Thu Dec 13 12:37:20 2007
@@ -61,8 +61,7 @@
 
     public Library(LibraryManager lm, Map builderSelector) {
         manager = lm;
-        context = new WidgetDefinitionBuilderContext();
-        context.setLocalLibrary(this);
+        context = new WidgetDefinitionBuilderContext(this);
         widgetDefinitionBuilders = builderSelector;
     }
 
@@ -180,7 +179,7 @@
             context.setSuperDefinition(getDefinition(extend));
         }
 
-        return builder.buildWidgetDefinition(widgetDefinition,context);
+        return builder.buildWidgetDefinition(widgetDefinition, context);
     }