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"));
+ }
+
+}