Author: rdonkin
Date: Wed Apr  8 21:23:36 2009
New Revision: 763401

URL: http://svn.apache.org/viewvc?rev=763401&view=rev
Log:
Added integration test. JSIEVE-43 
https://issues.apache.org/jira/browse/JSIEVE-43

Added:
    
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/OutputUtils.java   
(with props)
    
james/jsieve/trunk/util/src/test/java/org/apache/jsieve/util/XmlGenerationTest.java
   (with props)
Modified:
    
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java
    
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveHandler.java
    james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveToXml.java
    james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/XmlOut.java

Modified: 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java
URL: 
http://svn.apache.org/viewvc/james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java?rev=763401&r1=763400&r2=763401&view=diff
==============================================================================
--- 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java
 (original)
+++ 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/NodeToSieveAdapter.java
 Wed Apr  8 21:23:36 2009
@@ -153,7 +153,15 @@
         } else if (value instanceof TagArgument) {
             final TagArgument tagArgument = (TagArgument) value;
             final String tag = tagArgument.getTag();
-            handler.argument(tag);
+            // tag = ":" identifier
+            // handlers are only interesting in the identifier for the tag
+            final String identifier;
+            if (tag.charAt(0) == ':') {
+                identifier = tag.substring(1);
+            } else {
+                identifier = tag;
+            }
+            handler.argument(identifier);
         }
     }
 

Added: 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/OutputUtils.java
URL: 
http://svn.apache.org/viewvc/james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/OutputUtils.java?rev=763401&view=auto
==============================================================================
--- 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/OutputUtils.java 
(added)
+++ 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/OutputUtils.java 
Wed Apr  8 21:23:36 2009
@@ -0,0 +1,67 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.jsieve.util;
+
+import java.io.IOException;
+import java.io.Writer;
+
+import org.apache.jsieve.exception.SieveException;
+import org.apache.jsieve.parser.generated.Node;
+
+/**
+ * Output utilities.
+ * These are mostly convenience methods.
+ * More power and flexibility is available when using the objects directly.
+ */
+public class OutputUtils {
+
+    /**
+     * Writes the given node as xml.
+     * This convenience method first writes a prolog before calling {...@link 
#toXml(Node, Writer)}.
+     * @param node not null
+     * @param writer not null
+     * @throws IOException when prolog cannot be written
+     * @throws SieveException when script cannot be converted to xml
+     * @see #toXml(Node, Writer)
+     */
+    public static void toXmlDocument(final Node node, final Writer writer) 
throws IOException, SieveException {
+        writer.append("<?xml version='1.0'?>");
+        toXml(node, writer);
+    }
+    
+    /**
+     * Writes the given node as xml.
+     * Note that the xml will be written as a fragment.
+     * An appropriate prolog must be added to convert this fragment 
+     * to a document.
+     * @param node not null
+     * @param writer not null
+     * @throws SieveException when script cannot be converted to xml
+     * @see XmlOut
+     * @see SieveToXml
+     * @see SieveHandler
+     */
+    public static void toXml(final Node node, final Writer writer) throws 
SieveException {
+        final XmlOut out = new XmlOut(writer);
+        final SieveToXml sieveToXml = new SieveToXml();
+        final SieveHandler handler = sieveToXml.build(out);
+        final NodeTraverser traverser = new NodeTraverser();
+        traverser.traverse(handler, node);
+    }
+}

Propchange: 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/OutputUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveHandler.java
URL: 
http://svn.apache.org/viewvc/james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveHandler.java?rev=763401&r1=763400&r2=763401&view=diff
==============================================================================
--- 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveHandler.java 
(original)
+++ 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveHandler.java 
Wed Apr  8 21:23:36 2009
@@ -107,11 +107,13 @@
     
     /**
      * Handles a tag argument.
-     * @param tag not null
+     * Note that this supplies the identifier for the tag
+     * (after the leading ':' has been stripped).
+     * @param identifier not null
      * @throws HaltTraversalException
      * @return this
      */
-    public SieveHandler argument(String tag) throws HaltTraversalException;
+    public SieveHandler argument(String identifier) throws 
HaltTraversalException;
     
     /**
      * Handler a numeric argument.

Modified: 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveToXml.java
URL: 
http://svn.apache.org/viewvc/james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveToXml.java?rev=763401&r1=763400&r2=763401&view=diff
==============================================================================
--- 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveToXml.java 
(original)
+++ 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/SieveToXml.java 
Wed Apr  8 21:23:36 2009
@@ -49,7 +49,7 @@
 
     public static final String DEFAULT_PREFIX = "sieve";
     
-    public static final String DEFAULT_NAMESPACE = 
"http://james.apache.org/sieve";;
+    public static final String DEFAULT_NAMESPACE = 
"urn:ietf:params:xml:ns:sieve";
     
     /** Control commands (as listed in RFC 3028) */
     public static final String[] CONTROL_COMMANDS = {"If", "Require", "Stop"};

Modified: 
james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/XmlOut.java
URL: 
http://svn.apache.org/viewvc/james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/XmlOut.java?rev=763401&r1=763400&r2=763401&view=diff
==============================================================================
--- james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/XmlOut.java 
(original)
+++ james/jsieve/trunk/util/src/main/java/org/apache/jsieve/util/XmlOut.java 
Wed Apr  8 21:23:36 2009
@@ -20,8 +20,10 @@
 
 import java.io.IOException;
 import java.io.Writer;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 import java.util.Stack;
 
@@ -395,6 +397,7 @@
 
     }
     
+    private final List prefixesDefined;
     private final Writer writer;
     private final Stack elementNames;
     private final Set currentAttributes = new HashSet();
@@ -406,6 +409,7 @@
     public XmlOut(final Writer writer) {
         this.writer = writer;
         this.elementNames = new Stack();
+        prefixesDefined = new ArrayList();
     }
     
     /**
@@ -664,5 +668,9 @@
     public void openElement(CharSequence localName, CharSequence uri, 
CharSequence prefix) throws IOException {
         final CharSequence name = toName(localName, uri, prefix);
         openElement(name);
+        if (!prefixesDefined.contains(prefix)) {
+            prefixesDefined.add(prefix);
+            attribute("xmlns:" + prefix, uri);
+        }
     }
 }

Added: 
james/jsieve/trunk/util/src/test/java/org/apache/jsieve/util/XmlGenerationTest.java
URL: 
http://svn.apache.org/viewvc/james/jsieve/trunk/util/src/test/java/org/apache/jsieve/util/XmlGenerationTest.java?rev=763401&view=auto
==============================================================================
--- 
james/jsieve/trunk/util/src/test/java/org/apache/jsieve/util/XmlGenerationTest.java
 (added)
+++ 
james/jsieve/trunk/util/src/test/java/org/apache/jsieve/util/XmlGenerationTest.java
 Wed Apr  8 21:23:36 2009
@@ -0,0 +1,61 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+package org.apache.jsieve.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.StringWriter;
+
+import org.apache.jsieve.ConfigurationManager;
+import org.apache.jsieve.parser.generated.Node;
+
+import junit.framework.TestCase;
+
+public class XmlGenerationTest extends TestCase {
+
+    //@Override
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+
+    //@Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    public void testShouldGenerateXmlFromSimpleScript() throws Exception {
+        // Set up
+        final String script = "if address :all :is \"from\" \"u...@domain\" 
{stop;}";
+        final Node node = new ConfigurationManager().build().parse(new 
ByteArrayInputStream(script.getBytes()));
+        final StringWriter monitor = new StringWriter();
+        
+        // Exercise
+        OutputUtils.toXml(node, monitor);
+        
+        // Verify
+        assertEquals("<sieve:control 
xmlns:sieve='urn:ietf:params:xml:ns:sieve' sieve:name='if'>" +
+                "<sieve:test sieve:name='address'>" +
+                "<sieve:tag>all</sieve:tag>" +
+                "<sieve:tag>is</sieve:tag>" +
+                "<sieve:str>from</sieve:str>" +
+                "<sieve:str>u...@domain</sieve:str>" +
+                "</sieve:test>" +
+                "<sieve:control sieve:name='stop'/>" +
+                "</sieve:control>", monitor.toString());
+    }
+}

Propchange: 
james/jsieve/trunk/util/src/test/java/org/apache/jsieve/util/XmlGenerationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to