forrest-svn mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From thors...@apache.org
Subject svn commit: r700103 - /forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/helper/AXIOMXPathPatched.java
Date Mon, 29 Sep 2008 12:38:19 GMT
Author: thorsten
Date: Mon Sep 29 05:38:19 2008
New Revision: 700103

URL: http://svn.apache.org/viewvc?rev=700103&view=rev
Log:
WSCOMMONS-389
Creating nodes as well based on xpath expression that like [@id='test']. 
This will provoke that we will create an attribute "id" with the value "test"

Modified:
    forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/helper/AXIOMXPathPatched.java

Modified: forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/helper/AXIOMXPathPatched.java
URL: http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/helper/AXIOMXPathPatched.java?rev=700103&r1=700102&r2=700103&view=diff
==============================================================================
--- forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/helper/AXIOMXPathPatched.java
(original)
+++ forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/helper/AXIOMXPathPatched.java
Mon Sep 29 05:38:19 2008
@@ -16,8 +16,11 @@
  */
 package org.apache.forrest.dispatcher.impl.helper;
 
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
@@ -124,13 +127,10 @@
   private void calculateNsElements(LinkedHashSet<OMElement> pathNodes,
       String pathPart) {
 
-    /*
-     * FIXME: Need to test xpath expression such as [@id='example'] I think
-     * their are NOT generated correctly!
-     */
     OMElement element = null;
     OMNamespaceImpl localSpace = null;
-    String localName = pathPart;
+    HashMap<String, String> map = new HashMap<String, String>();
+    String localName = cleanFromExpressions(pathPart,map);
     String[] nameSpacedNode = localName.split(":");
     if (nameSpacedNode.length == 2) {
       final String prefix = nameSpacedNode[0];
@@ -139,9 +139,41 @@
       localName = nameSpacedNode[1];
     }
     element = factory.createOMElement(localName, localSpace);
+    for (String key : map.keySet()) {
+      element.addAttribute(key, map.get(key), null);
+    }
     pathNodes.add(element);
   }
 
+  private String cleanFromExpressions(String pathPart, HashMap<String, String> map)
{
+    Pattern pattern = Pattern.compile("(.*)\\[(.*)\\]");
+    Matcher matcher = pattern.matcher(pathPart);
+    if (matcher.matches()){
+      pathPart=matcher.group(1);
+      String expression = matcher.group(2);
+      String [] parts = expression.split("([\\s]*and[\\s]*)");
+      for (String part : parts) {
+        pattern = Pattern.compile("@([a-zA-Z0-9]*)='(.*)'");
+        matcher = pattern.matcher(part);
+        if (matcher.matches()){
+          String key = matcher.group(1);
+          String value = matcher.group(2);
+          int end = value.indexOf("'");
+          if (end>-1){
+            /*
+             * if we have a ' in the expression it means that we have
+             * a xpath expression with operators other then "and". 
+             * We will use only the first one to create an attribute from it.
+             */
+            value= value.substring(0, end);
+          }
+          map.put(key, value);
+        }
+      }
+    }
+    return pathPart;
+  }
+
   /**
    * @param path
    * @return



Mime
View raw message