You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@labs.apache.org by be...@apache.org on 2007/10/22 00:04:26 UTC

svn commit: r586960 - in /labs/vysper/src: main/java/org/apache/vysper/mina/codec/ main/java/org/apache/vysper/xmpp/xmldecoder/ test/java/org/apache/vysper/mina/codec/ test/java/org/apache/vysper/xmpp/xmldecoder/

Author: berndf
Date: Sun Oct 21 15:04:22 2007
New Revision: 586960

URL: http://svn.apache.org/viewvc?rev=586960&view=rev
Log:
[vysper] more progress with with our poor man's xml streaming parser

Removed:
    labs/vysper/src/main/java/org/apache/vysper/mina/codec/XMPPProtocolDecoderDepricated.java
    labs/vysper/src/test/java/org/apache/vysper/mina/codec/XMPPProtocolDecoderDepricatedTestCase.java
Modified:
    labs/vysper/src/main/java/org/apache/vysper/mina/codec/XMLStreamTokenizer.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLParticle.java
    labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverter.java
    labs/vysper/src/test/java/org/apache/vysper/mina/codec/XMLStreamTokenizerTestCase.java
    labs/vysper/src/test/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverterConvertTestCase.java

Modified: labs/vysper/src/main/java/org/apache/vysper/mina/codec/XMLStreamTokenizer.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/mina/codec/XMLStreamTokenizer.java?rev=586960&r1=586959&r2=586960&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/mina/codec/XMLStreamTokenizer.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/mina/codec/XMLStreamTokenizer.java Sun Oct 21 15:04:22 2007
@@ -23,7 +23,9 @@
 import org.apache.vysper.xmpp.xmldecoder.ParticleDecoder;
 import org.apache.vysper.xmpp.xmldecoder.XMLParticle;
 import org.apache.vysper.xmpp.xmldecoder.XMLRawToFragementConverter;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
 import org.apache.vysper.xmpp.xmlfragment.XMLFragment;
+import org.apache.vysper.xmpp.xmlfragment.XMLText;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -58,10 +60,15 @@
                 // reset session list
                 ioSession.setAttribute(SESSION_ATTRIBUTE_NAME, new ArrayList<XMLParticle>());
 
-                //List<XMLFragment> list = CONVERTER.convert(particles);
+                XMLFragment xmlFragment = CONVERTER.convert(particles);
 
-                // propagate completed list
-                protocolDecoderOutput.write(particles);
+                if (xmlFragment instanceof XMLElement) {
+                    // propagate element
+                    protocolDecoderOutput.write((XMLElement)xmlFragment);
+                } else {
+                    // TODO handle text elements properly might be only whitespaces/newlines
+                    protocolDecoderOutput.write((XMLText)xmlFragment);
+                } 
             }
             
         }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLParticle.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLParticle.java?rev=586960&r1=586959&r2=586960&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLParticle.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLParticle.java Sun Oct 21 15:04:22 2007
@@ -48,10 +48,14 @@
                 isOpeningElement = true;
                 isClosingElement = false;
             }
-            if (content.startsWith("<!")) {
+            if (content.startsWith("<!") && !content.startsWith("<!--")) {
                 isSpecialElement = true;
+                isOpeningElement = true;
+                isClosingElement = true;
             } else if (content.startsWith("<?")) {
                 isSpecialElement = true;
+                isOpeningElement = true;
+                isClosingElement = true;
             } 
         }
     }

Modified: labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverter.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverter.java?rev=586960&r1=586959&r2=586960&view=diff
==============================================================================
--- labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverter.java (original)
+++ labs/vysper/src/main/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverter.java Sun Oct 21 15:04:22 2007
@@ -63,7 +63,13 @@
         return openedElements.isEmpty() || startOfStream;
     }
     
-    public List<XMLFragment> convert(List<XMLParticle> particles, String stopElementName) {
+    public XMLFragment convert(List<XMLParticle> particles) {
+        List<XMLFragment> xmlFragmentList = convert(particles, null);
+        if (xmlFragmentList.size() != 1) return null; // TODO syntax error
+        return xmlFragmentList.get(0);
+    }
+    
+    protected List<XMLFragment> convert(List<XMLParticle> particles, String stopElementName) {
         
         List<XMLFragment> fragments = new ArrayList<XMLFragment>();
         
@@ -84,13 +90,22 @@
                 fragments.add(completedElement);
             } else if (particle.isClosingOnlyElement()) {
                 String closingElementName = getElementNameForClosingOnly(particle);
-                if (stopElementName == null || !closingElementName.equals(stopElementName)) throw new IllegalStateException(); // todo make syntax error ex
-                break;
+                boolean properlyClosedTopLevel = (stopElementName == null && particles.isEmpty());
+                boolean properlyClosedNested = closingElementName.equals(stopElementName);
+                if (properlyClosedTopLevel || properlyClosedNested) return fragments;
+                else throw new IllegalStateException("closing xml elements mismatch");
             } else {
                 fragments.add(new XMLText(particle.getContent()));
             } 
             
         }
+        if (stopElementName != null) {
+            // of the remaining elements, all must be texts
+            for (XMLParticle particle : particles) {
+                if (!particle.isText()) throw new IllegalStateException("missing closing xml elements");
+                else fragments.add(new XMLText(particle.getContent()));
+            }
+        }
         return fragments;
     }
 
@@ -125,7 +140,6 @@
         Stack<Character> stack = new Stack<Character>();
         for (int i = chars.length - 1; i >= 0; i--) {
              stack.push(chars[i]);
-            
         }
         
         String key = null;
@@ -193,29 +207,6 @@
             } 
         }
 
-
-
-        // todo postprocess element name (namespace)
-    
-/*
-        while (scanner.hasNext()) {
-            String attributeKeyCandidate = null;
-            if (attributeKeyCandidate == null) attributeKeyCandidate = scanner.next();
-            if (!scanner.hasNext()) return null; // todo throw syntax error, no matching value for key
-            String attributeValueCandidate = scanner.next();
-            Attribute attribute = getAttribute(attributeKeyCandidate, attributeValueCandidate);
-            if (attribute != null) attributes.add(attribute);
-        }
-*/
         return attributes;
-    }
-
-    private Attribute getAttribute(String attributeKeyCandidate, String attributeValueCandidate) {
-        int start = 0;
-        int end = attributeValueCandidate.length();
-        if (attributeValueCandidate.startsWith(CHAR_ATTR_SINGLEQUOTE) || attributeValueCandidate.startsWith(CHAR_ATTR_DOUBLEQUOTE)) start = 1;
-        if (attributeValueCandidate.length() > 1 && (attributeValueCandidate.startsWith(CHAR_ATTR_SINGLEQUOTE) || attributeValueCandidate.startsWith(CHAR_ATTR_DOUBLEQUOTE))) end = attributeValueCandidate.length() - 1;
-        attributeValueCandidate = attributeValueCandidate.substring(start, end);
-        return new Attribute(attributeKeyCandidate.trim(), attributeValueCandidate);
     }
 }

Modified: labs/vysper/src/test/java/org/apache/vysper/mina/codec/XMLStreamTokenizerTestCase.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/mina/codec/XMLStreamTokenizerTestCase.java?rev=586960&r1=586959&r2=586960&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/mina/codec/XMLStreamTokenizerTestCase.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/mina/codec/XMLStreamTokenizerTestCase.java Sun Oct 21 15:04:22 2007
@@ -19,7 +19,8 @@
 import junit.framework.TestCase;
 import org.apache.mina.common.ByteBuffer;
 import org.apache.mina.filter.codec.ProtocolDecoderOutput;
-import org.apache.vysper.xmpp.xmldecoder.XMLParticle;
+import org.apache.vysper.xmpp.xmlfragment.XMLFragment;
+import org.apache.vysper.xmpp.xmlfragment.XMLText;
 
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
@@ -83,7 +84,7 @@
         firstByteBuffer.putString(stanzaPart1, CHARSET_ENCODER_UTF8).flip();
         decoder.decode(session, firstByteBuffer, protocolDecoderOutput);
         assertEquals(2, protocolDecoderOutput.size());
-        String content = ((List<XMLParticle>) protocolDecoderOutput.get(1)).get(0).getContent();
+        String content = ((XMLText)protocolDecoderOutput.get(1)).getText();
         assertEquals("\n\r", content);
 
 
@@ -98,7 +99,7 @@
 
     private static class MockProtocolDecoderOutput implements ProtocolDecoderOutput
     {
-        private List<List<XMLParticle>> result = new ArrayList<List<XMLParticle>>();
+        private List<XMLFragment> result = new ArrayList<XMLFragment>();
 
         public void flush()
         {
@@ -106,14 +107,14 @@
 
         public void write( Object message )
         {
-            result.add((List<XMLParticle>) message);
+            result.add((XMLFragment) message);
         }
         
-        public Iterator<List<XMLParticle>> iterator() {
+        public Iterator<XMLFragment> iterator() {
             return result.iterator();
         }
 
-        public Object get(int i) {
+        public XMLFragment get(int i) {
             return result.get(i);
         }
         

Modified: labs/vysper/src/test/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverterConvertTestCase.java
URL: http://svn.apache.org/viewvc/labs/vysper/src/test/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverterConvertTestCase.java?rev=586960&r1=586959&r2=586960&view=diff
==============================================================================
--- labs/vysper/src/test/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverterConvertTestCase.java (original)
+++ labs/vysper/src/test/java/org/apache/vysper/xmpp/xmldecoder/XMLRawToFragementConverterConvertTestCase.java Sun Oct 21 15:04:22 2007
@@ -39,9 +39,8 @@
 
         particles.add(new XMLParticle("<balanced/>"));
 
-        List<XMLFragment> fragments = xmlRawToFragementConverter.convert(particles, null);
-        assertEquals(1, fragments.size());
-        XMLElement xmlElement = (XMLElement) fragments.get(0);
+        XMLElement xmlElement = (XMLElement) xmlRawToFragementConverter.convert(particles);
+        assertNotNull(xmlElement);
         assertEquals("balanced", xmlElement.getName());
     }
     
@@ -50,9 +49,8 @@
 
         particles.add(new XMLParticle("<balanced attr1=\"1\" attr2='2' ns:at_tr3=\"\" />"));
 
-        List<XMLFragment> fragments = xmlRawToFragementConverter.convert(particles, null);
-        assertEquals(1, fragments.size());
-        XMLElement xmlElement = (XMLElement) fragments.get(0);
+        XMLElement xmlElement = (XMLElement) xmlRawToFragementConverter.convert(particles);
+        assertNotNull(xmlElement);
         assertEquals("balanced", xmlElement.getName());
         List<Attribute> attributes = xmlElement.getAttributes();
         assertEquals(3, attributes.size());
@@ -68,9 +66,8 @@
 
         particles.add(new XMLParticle("<balanced attr1 = \"1\"   attr2=' 2 ' ns:at_tr3= \" \" />"));
 
-        List<XMLFragment> fragments = xmlRawToFragementConverter.convert(particles, null);
-        assertEquals(1, fragments.size());
-        XMLElement xmlElement = (XMLElement) fragments.get(0);
+        XMLElement xmlElement = (XMLElement) xmlRawToFragementConverter.convert(particles);
+        assertNotNull(xmlElement);
         assertEquals("balanced", xmlElement.getName());
         List<Attribute> attributes = xmlElement.getAttributes();
         assertEquals(3, attributes.size());
@@ -88,8 +85,20 @@
         particles.add(new XMLParticle("<balanced>"));
         particles.add(new XMLParticle("</balanced>"));
 
-        List<XMLFragment> fragments = xmlRawToFragementConverter.convert(particles, null);
-        assertEquals(1, fragments.size());
+        XMLElement xmlElement = (XMLElement) xmlRawToFragementConverter.convert(particles);
+        assertNotNull(xmlElement);
+    }
+    
+    public void testNested1() {
+        List<XMLParticle> particles = new ArrayList<XMLParticle>();
+
+        particles.add(new XMLParticle("<balanced>"));
+        particles.add(new XMLParticle("<inner>"));
+        particles.add(new XMLParticle("</inner>"));
+        particles.add(new XMLParticle("</balanced>"));
+        
+        XMLElement xmlElement = (XMLElement) xmlRawToFragementConverter.convert(particles);
+        assertEquals(1, ((XMLElement)xmlElement).getInnerElements().size());
     }
     
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@labs.apache.org
For additional commands, e-mail: commits-help@labs.apache.org