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