[jbpm-commits] JBoss JBPM SVN: r6588 - in jbpm4/trunk/modules/pvm/src: test/java/org/jbpm/pvm/internal/wire and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Aug 12 06:18:38 EDT 2010


Author: rebody
Date: 2010-08-12 06:18:37 -0400 (Thu, 12 Aug 2010)
New Revision: 6588

Modified:
   jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java
   jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/MapWireTest.java
Log:
JBPM-2753 simplified map descript

Modified: jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java	2010-08-12 08:58:39 UTC (rev 6587)
+++ jbpm4/trunk/modules/pvm/src/main/java/org/jbpm/pvm/internal/wire/binding/MapBinding.java	2010-08-12 10:18:37 UTC (rev 6588)
@@ -28,17 +28,19 @@
 import org.jbpm.pvm.internal.util.XmlUtil;
 import org.jbpm.pvm.internal.wire.Descriptor;
 import org.jbpm.pvm.internal.wire.descriptor.MapDescriptor;
+import org.jbpm.pvm.internal.wire.descriptor.StringDescriptor;
 import org.jbpm.pvm.internal.wire.xml.WireParser;
 import org.jbpm.pvm.internal.xml.Parse;
 import org.jbpm.pvm.internal.xml.Parser;
 import org.w3c.dom.Element;
 
 /** parses a descriptor for creating a {@link java.util.Map}.
- * 
+ *
  * See schema docs for more details.
- * 
+ *
  * @author Tom Baeyens
  * @author Guillaume Porcher (documentation)
+ * @author Huisheng Xu
  */
 public class MapBinding extends WireDescriptorBinding {
 
@@ -52,9 +54,9 @@
     if (AbstractCollectionBinding.verify(className, Map.class, parse, parser)) {
       descriptor.setClassName(className);
     }
-    
+
     Boolean isSynchronized = XmlUtil.attributeBoolean(element, "synchronized", parse);
-    if (isSynchronized!=null) {
+    if (isSynchronized != null) {
       descriptor.setSynchronized(isSynchronized);
     }
 
@@ -63,25 +65,13 @@
     List<Element> elements = XmlUtil.elements(element);
     for (Element entryElement: elements) {
       if ("entry".equals(entryElement.getLocalName())) {
-        // key
-        Element keyElement = XmlUtil.element(entryElement, "key");
-        Element keyDescriptorElement = (keyElement!=null ? XmlUtil.element(keyElement) : null);
-        Descriptor keyDescriptor = (Descriptor) parser.parseElement(keyDescriptorElement, parse, WireParser.CATEGORY_DESCRIPTOR);
-        // value
-        Element valueElement = XmlUtil.element(entryElement, "value");
-        Element valueDescriptorElement = (valueElement!=null ? XmlUtil.element(valueElement) : null);
-        Descriptor valueDescriptor = (Descriptor) parser.parseElement(valueDescriptorElement, parse, WireParser.CATEGORY_DESCRIPTOR);
-
-        if ( (keyDescriptor!=null)
-             && (valueDescriptor!=null)
-           ) {
-          keyDescriptors.add(keyDescriptor);
-          valueDescriptors.add(valueDescriptor);
+        if (XmlUtil.attribute(entryElement, "key") == null) {
+          this.processFullMode(element, entryElement, keyDescriptors, valueDescriptors, parse, parser);
         } else {
-          parse.addProblem("entry must have key and value element with a single descriptor as contents: "+XmlUtil.toString(entryElement), element);
+          this.processEasyMode(element, entryElement, keyDescriptors, valueDescriptors, parse, parser);
         }
       } else {
-        parse.addProblem("map can only contain entry elements: "+XmlUtil.toString(entryElement));
+        parse.addProblem("map can only contain entry elements: " + XmlUtil.toString(entryElement));
       }
     }
 
@@ -89,4 +79,97 @@
     descriptor.setValueDescriptors(valueDescriptors);
     return descriptor;
   }
-}
\ No newline at end of file
+
+  /**
+   * full mode.
+   *
+   * <pre>
+   * &lt;map>
+   *   &lt;entry>
+   *     &lt;key>
+   *       &lt;string value="input_file_a" />
+   *     &lt;/key>
+   *     &lt;value>
+   *       &lt;string value="some_filename" />
+   *     &lt;/value>
+   *   &lt;/entry>
+   *   &lt;entry>
+   *     &lt;key>
+   *       &lt;string value="another_input" />
+   *     &lt;/key>
+   *     &lt;value>
+   *       &lt;string value="1234" />
+   *     &lt;/value>
+   *   &lt;/entry>
+   * &lt;/map>
+   * </pre>
+   */
+  protected void processFullMode(Element element,
+                                 Element entryElement,
+                                 List<Descriptor> keyDescriptors,
+                                 List<Descriptor> valueDescriptors,
+                                 Parse parse,
+                                 Parser parser) {
+    // key
+    Element keyElement = XmlUtil.element(entryElement, "key");
+    Element keyDescriptorElement = (keyElement != null ? XmlUtil.element(keyElement) : null);
+    Descriptor keyDescriptor = (Descriptor) parser.parseElement(keyDescriptorElement, parse, WireParser.CATEGORY_DESCRIPTOR);
+    // value
+    Element valueElement = XmlUtil.element(entryElement, "value");
+    Element valueDescriptorElement = (valueElement != null ? XmlUtil.element(valueElement) : null);
+    Descriptor valueDescriptor = (Descriptor) parser.parseElement(valueDescriptorElement, parse, WireParser.CATEGORY_DESCRIPTOR);
+
+    if ( (keyDescriptor != null)
+         && (valueDescriptor != null)
+       ) {
+      keyDescriptors.add(keyDescriptor);
+      valueDescriptors.add(valueDescriptor);
+    } else {
+      parse.addProblem("entry must have key and value element with a single descriptor as contents: "
+        + XmlUtil.toString(entryElement), element);
+    }
+  }
+
+  /**
+   * easy mode.
+   *
+   * <pre>
+   * &lt;map>
+   *   &lt;entry key="input_file_a" value="some_filename" />
+   *   &lt;entry key="another_input" value="1234" />
+   * &lt;/map>
+   * </pre>
+   */
+  protected void processEasyMode(Element element,
+                                 Element entryElement,
+                                 List<Descriptor> keyDescriptors,
+                                 List<Descriptor> valueDescriptors,
+                                 Parse parse,
+                                 Parser parser) {
+    // key
+    String keyAttribute = XmlUtil.attribute(entryElement, "key");
+    Descriptor keyDescriptor = this.createStringDescriptor(keyAttribute);
+    // value
+    String valueAttribute = XmlUtil.attribute(entryElement, "value");
+    Descriptor valueDescriptor = this.createStringDescriptor(valueAttribute);
+
+    if ( (keyDescriptor != null)
+         && (valueDescriptor != null)
+       ) {
+      keyDescriptors.add(keyDescriptor);
+      valueDescriptors.add(valueDescriptor);
+    } else {
+      parse.addProblem("entry must have key and value attributes: "
+        + XmlUtil.toString(entryElement), element);
+    }
+  }
+
+  protected Descriptor createStringDescriptor(String value) {
+    if (value == null) {
+      return null;
+    }
+    StringDescriptor stringDescriptor = new StringDescriptor();
+    stringDescriptor.setValue(value);
+    return stringDescriptor;
+  }
+}

Modified: jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/MapWireTest.java
===================================================================
--- jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/MapWireTest.java	2010-08-12 08:58:39 UTC (rev 6587)
+++ jbpm4/trunk/modules/pvm/src/test/java/org/jbpm/pvm/internal/wire/MapWireTest.java	2010-08-12 10:18:37 UTC (rev 6588)
@@ -96,4 +96,20 @@
     assertTextPresent("entry must have key and value element with a single descriptor as contents", problems.get(2).getMsg());
     assertTextPresent("entry must have key and value element with a single descriptor as contents", problems.get(3).getMsg());
   }
+
+  public void testEasyMap() {
+    WireContext wireContext = createWireContext(
+      "<objects>" +
+      "  <map name='m'>" +
+      "    <entry key='true' value='null'/>" +
+      "    <entry key='a' value='5'/>" +
+      "  </map>" +
+      "</objects>"
+    );
+
+    Map m = (Map) wireContext.get("m");
+    assertEquals(m.toString(), 2, m.size());
+    assertEquals("null", m.get("true"));
+    assertEquals("5", m.get("a"));
+  }
 }



More information about the jbpm-commits mailing list