You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by be...@apache.org on 2009/05/22 10:08:43 UTC

svn commit: r777423 - in /mina/sandbox/vysper/trunk/src: main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/ main/java/org/apache/vysper/xmpp/xmlfragment/ test/java/org/apache/vysper/xmpp/modules/servicediscovery/ test/java/org/apache...

Author: berndf
Date: Fri May 22 08:08:43 2009
New Revision: 777423

URL: http://svn.apache.org/viewvc?rev=777423&view=rev
Log:
[vysper] implement extended service disco, allowing data forms in info request reponses (VYSPER-62)

Added:
    mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoDataForm.java
    mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/
    mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/
    mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
Modified:
    mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/xmlfragment/XMLElementVerifier.java

Added: mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoDataForm.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoDataForm.java?rev=777423&view=auto
==============================================================================
--- mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoDataForm.java (added)
+++ mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/management/InfoDataForm.java Fri May 22 08:08:43 2009
@@ -0,0 +1,31 @@
+package org.apache.vysper.xmpp.modules.servicediscovery.management;
+
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.dataforms.DataForm;
+import org.apache.vysper.xmpp.stanza.dataforms.DataFormEncoder;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+import org.apache.vysper.compliance.SpecCompliant;
+import static org.apache.vysper.compliance.SpecCompliant.ComplianceCoverage.COMPLETE;
+import static org.apache.vysper.compliance.SpecCompliant.ComplianceStatus.FINISHED;
+
+/**
+ * this adds support for Service Discovery Extensions, which allows adding x-DataForms to info responses 
+ */
+@SpecCompliant(spec = "XEP-0128", status = FINISHED, coverage = COMPLETE)
+public class InfoDataForm implements InfoElement {
+
+    private static final Integer CLASS_ID = new Integer(3);
+    protected XMLElement dataFormXML;
+
+    public InfoDataForm(DataForm dataForm) {
+        dataFormXML = DataFormEncoder.getXML(dataForm);
+    }
+
+    public Integer getElementClassId() {
+        return CLASS_ID;
+    }
+
+    public void insertElement(StanzaBuilder stanzaBuilder) {
+        stanzaBuilder.addPreparedElement(dataFormXML);
+    }
+}

Modified: mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/xmlfragment/XMLElementVerifier.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/xmlfragment/XMLElementVerifier.java?rev=777423&r1=777422&r2=777423&view=diff
==============================================================================
--- mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/xmlfragment/XMLElementVerifier.java (original)
+++ mina/sandbox/vysper/trunk/src/main/java/org/apache/vysper/xmpp/xmlfragment/XMLElementVerifier.java Fri May 22 08:08:43 2009
@@ -190,14 +190,13 @@
 		List<XMLFragment> innerFragments = element.getInnerFragments();
 
 		// really is only subelement
-		if (innerFragments == null || innerFragments.size() != 1)
-			return false;
+		if (innerFragments == null || innerFragments.size() != 1) return false;
 		XMLFragment onlySubelement = innerFragments.get(0);
-		if (!(onlySubelement instanceof XMLElement))
-			return false;
+		if (!(onlySubelement instanceof XMLElement)) return false;
 
 		XMLElement xmlElement = ((XMLElement) onlySubelement);
-		return name.equals(xmlElement.getName())
-				&& namespaceURI.equals(xmlElement.getNamespace());
+        boolean nameEquals = name == null ? xmlElement.getName() == null : name.equals(xmlElement.getName());
+        if (namespaceURI == null) namespaceURI = NamespaceAttribute.DEFAULT_NAMESPACE;
+        return nameEquals && namespaceURI.equals(xmlElement.getNamespace());
 	}
 }

Added: mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
URL: http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java?rev=777423&view=auto
==============================================================================
--- mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java (added)
+++ mina/sandbox/vysper/trunk/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java Fri May 22 08:08:43 2009
@@ -0,0 +1,93 @@
+/*
+ *  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.vysper.xmpp.modules.servicediscovery.handler;
+
+import junit.framework.TestCase;
+import org.apache.vysper.xmpp.addressing.EntityFormatException;
+import org.apache.vysper.xmpp.addressing.EntityImpl;
+import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Feature;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.Identity;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoDataForm;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoElement;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
+import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
+import org.apache.vysper.xmpp.protocol.SessionStateHolder;
+import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
+import org.apache.vysper.xmpp.server.TestSessionContext;
+import org.apache.vysper.xmpp.stanza.IQStanza;
+import org.apache.vysper.xmpp.stanza.IQStanzaType;
+import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
+import org.apache.vysper.xmpp.stanza.dataforms.DataForm;
+import org.apache.vysper.xmpp.xmlfragment.XMLElement;
+import org.apache.vysper.xmpp.xmlfragment.XMLElementVerifier;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ */
+public class ExtendedDiscoInfoTestCase extends TestCase {
+    
+    public void testExtendedInfo() throws EntityFormatException {
+
+        // test if the data form is correctly added to the disco info response 
+        
+        ServiceCollector serviceCollector = new ServiceCollector();
+        serviceCollector.addInfoRequestListener(new InfoRequestListener() {
+            public List<InfoElement> getInfosFor(InfoRequest request) throws ServiceDiscoveryRequestException {
+
+                DataForm form = new DataForm();
+                form.setTitle("formtitle");
+                form.setType(DataForm.Type.form);
+
+                List<InfoElement> infoElements = new ArrayList<InfoElement>();
+                infoElements.add(new Feature("TEST:NAMESPACE"));
+                infoElements.add(new Identity("testCat", "testType"));
+                infoElements.add(new InfoDataForm(form));
+                return infoElements;
+            }
+        });
+
+        DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(EntityImpl.parse("test.vysper.org"), null);
+        runtimeContext.registerServerRuntimeContextService(serviceCollector);
+
+        DiscoInfoIQHandler infoIQHandler = new DiscoInfoIQHandler();
+
+        StanzaBuilder request = StanzaBuilder.createIQStanza(EntityImpl.parse("user@vysper.org"), EntityImpl.parse("info.test.vysper.org"), IQStanzaType.GET, "1");
+
+        IQStanza finalStanza = (IQStanza)XMPPCoreStanza.getWrapper(request.getFinalStanza());
+        
+        Stanza resultStanza = infoIQHandler.handleGet(finalStanza, runtimeContext, new TestSessionContext(runtimeContext, new SessionStateHolder()));
+
+        assertTrue(resultStanza.getVerifier().onlySubelementEquals("query", null));
+        XMLElement queryElement = resultStanza.getFirstInnerElement();
+        XMLElementVerifier queryVerifier = queryElement.getVerifier();
+        assertTrue(queryVerifier.subElementsPresentExact(4));
+        List<XMLElement> innerElements = queryElement.getInnerElements();
+        XMLElement xmlElement = innerElements.get(innerElements.size() - 1);
+        XMLElementVerifier xmlElementVerifier = xmlElement.getVerifier();
+        assertTrue(xmlElementVerifier.nameEquals("x"));
+    }
+    
+}