Author: ngn
Date: Tue Sep  8 21:37:08 2009
New Revision: 812702

URL: http://svn.apache.org/viewvc?rev=812702&view=rev
Log:
Cleanup stanza element handling

Modified:
    
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
    
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/X.java

Modified: 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java?rev=812702&r1=812701&r2=812702&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java
 Tue Sep  8 21:37:08 2009
@@ -19,6 +19,7 @@
  */
 package org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
@@ -29,6 +30,7 @@
 import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
 import org.apache.vysper.xmpp.delivery.failure.IgnoreFailureStrategy;
 import org.apache.vysper.xmpp.modules.core.base.handler.DefaultPresenceHandler;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Conference;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
@@ -264,12 +266,10 @@
         
         Entity roomAndOccupantNick = new EntityImpl(room.getJID(), 
existingOccupant.getName());
         StanzaBuilder builder = 
StanzaBuilder.createPresenceStanza(roomAndOccupantNick, newOccupant.getJid(), 
null, null, null, null);
-        builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
-        builder.startInnerElement("item")
-            .addAttribute("affiliation", 
existingOccupant.getAffiliation().toString())
-            .addAttribute("role", existingOccupant.getRole().toString())
-            .endInnerElement();
-        builder.endInnerElement();
+        
+        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
+                new Item(null, null, existingOccupant.getAffiliation(), 
existingOccupant.getRole())));
+
         
         logger.debug("Room presence from {} sent to {}", newOccupant, 
roomAndOccupantNick);
         relayStanza(newOccupant.getJid(), builder.getFinalStanza(), 
serverRuntimeContext);
@@ -279,24 +279,26 @@
         Entity roomAndNewUserNick = new EntityImpl(room.getJID(), 
newOccupant.getName());
         
         StanzaBuilder builder = 
StanzaBuilder.createPresenceStanza(roomAndNewUserNick, 
existingOccupant.getJid(), null, null, null, null);
-        builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
+        
+        List<XMLElement> inner = new ArrayList<XMLElement>();
+
         
         // room is non-anonymous or semi-anonmoys and the occupant a 
moderator, send full user JID
         boolean includeJid = 
room.getRoomTypes().contains(RoomType.NonAnonymous) ||
             (room.getRoomTypes().contains(RoomType.SemiAnonymous) && 
existingOccupant.getRole() == Role.Moderator); 
-        builder.addPreparedElement(new Item(newOccupant, includeJid, false));
+        inner.add(new Item(newOccupant, includeJid, false));
         
         if(existingOccupant.getJid().equals(newOccupant.getJid())) {
             
             if(room.getRoomTypes().contains(RoomType.NonAnonymous)) {
                 // notify the user that this is a non-anonymous room
-                builder.addPreparedElement(new 
Status(StatusCode.ROOM_NON_ANONYMOUS));
+                inner.add(new Status(StatusCode.ROOM_NON_ANONYMOUS));
             }
             
             // send status to indicate that this is the users own presence
-            builder.addPreparedElement(new Status(StatusCode.OWN_PRESENCE));
+            inner.add(new Status(StatusCode.OWN_PRESENCE));
         }
-        builder.endInnerElement();
+        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
inner));
 
         logger.debug("Room presence from {} sent to {}", roomAndNewUserNick, 
existingOccupant);
         relayStanza(existingOccupant.getJid(), builder.getFinalStanza(), 
serverRuntimeContext);
@@ -307,18 +309,18 @@
         
         StanzaBuilder builder = 
StanzaBuilder.createPresenceStanza(roomAndOldNick, receiver.getJid(), null, 
                 PresenceStanzaType.UNAVAILABLE, null, null);
-        builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
         
+        List<XMLElement> inner = new ArrayList<XMLElement>();
         
         boolean includeJid = includeJidInItem(room, receiver); 
-        builder.addPreparedElement(new Item(changer, includeJid, true));
-        builder.addPreparedElement(new Status(StatusCode.NEW_NICK));
+        inner.add(new Item(changer, includeJid, true));
+        inner.add(new Status(StatusCode.NEW_NICK));
         
         if(receiver.getJid().equals(changer.getJid())) {
             // send status to indicate that this is the users own presence
-            builder.addPreparedElement(new Status(StatusCode.OWN_PRESENCE));
+            inner.add(new Status(StatusCode.OWN_PRESENCE));
         }
-        builder.endInnerElement();
+        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
inner));
 
         logger.debug("Room presence from {} sent to {}", roomAndOldNick, 
receiver);
         relayStanza(receiver.getJid(), builder.getFinalStanza(), 
serverRuntimeContext);
@@ -330,17 +332,14 @@
         
         StanzaBuilder builder = 
StanzaBuilder.createPresenceStanza(roomAndNick, receiver.getJid(), null, 
                 null, show, status);
-        builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
-        
         
         boolean includeJid = includeJidInItem(room, receiver); 
-        builder.addPreparedElement(new Item(changer, includeJid, true));
-        
 //        if(receiver.getJid().equals(changer.getJid())) {
 //            // send status to indicate that this is the users own presence
 //            new Status(StatusCode.OWN_PRESENCE).insertElement(builder);
 //        }
-        builder.endInnerElement();
+
+        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, new 
Item(changer, includeJid, true)));
 
         logger.debug("Room presence from {} sent to {}", roomAndNick, 
receiver);
         relayStanza(receiver.getJid(), builder.getFinalStanza(), 
serverRuntimeContext);
@@ -356,16 +355,16 @@
         Entity roomAndOldNick = new EntityImpl(room.getJID(), 
changer.getName());
         
         StanzaBuilder builder = 
StanzaBuilder.createPresenceStanza(roomAndOldNick, receiver.getJid(), null, 
null, null, null);
-        builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
         
+        List<XMLElement> inner = new ArrayList<XMLElement>();
         boolean includeJid = includeJidInItem(room, receiver);  
-        builder.addPreparedElement(new Item(changer, includeJid, false));
+        inner.add(new Item(changer, includeJid, false));
         
         if(receiver.getJid().equals(changer.getJid())) {
             // send status to indicate that this is the users own presence
-            builder.addPreparedElement(new Status(StatusCode.OWN_PRESENCE));
+            inner.add(new Status(StatusCode.OWN_PRESENCE));
         }
-        builder.endInnerElement();
+        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
inner));
 
         relayStanza(receiver.getJid(), builder.getFinalStanza(), 
serverRuntimeContext);
     }
@@ -377,13 +376,9 @@
         
         StanzaBuilder builder = 
StanzaBuilder.createPresenceStanza(roomAndNewUserNick, 
existingOccupant.getJid(), null, 
                 PresenceStanzaType.UNAVAILABLE, null, null);
-        builder.startInnerElement("x", NamespaceURIs.XEP0045_MUC_USER);
-        builder.startInnerElement("item")
-            .addAttribute("affiliation", 
exitingOccupant.getAffiliation().toString())
-            // must be none since the user is leaving
-            .addAttribute("role", "none");
-            
-        builder.endInnerElement();
+
+        List<XMLElement> inner = new ArrayList<XMLElement>();
+        inner.add(new Item(null, null, existingOccupant.getAffiliation(), 
Role.None));
         
         // is this stanza to be sent to the exiting user himself?
         boolean ownStanza = 
existingOccupant.getJid().equals(exitingOccupant.getJid()); 
@@ -397,9 +392,9 @@
             } else {
                 status = new Status(statusMessage);
             }
-            builder.addPreparedElement(status);
+            inner.add(status);
         }
-        builder.endInnerElement();
+        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
inner));
 
         relayStanza(existingOccupant.getJid(), builder.getFinalStanza(), 
serverRuntimeContext);
     }

Modified: 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/X.java
URL: 
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/X.java?rev=812702&r1=812701&r2=812702&view=diff
==============================================================================
--- 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/X.java
 (original)
+++ 
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/stanzas/X.java
 Tue Sep  8 21:37:08 2009
@@ -31,28 +31,41 @@
 public class X extends XMLElement {
 
     public static X fromStanza(Stanza stanza) {
-        try {
-            XMLElement xElm = stanza.getSingleInnerElementsNamed("x", 
NamespaceURIs.XEP0045_MUC);
-            if(xElm != null) {
-                return new X(xElm.getInnerElements());
-            } else {
-                return null;
+        List<XMLElement> xElms = stanza.getInnerElementsNamed("x");
+        XMLElement xElm = null;
+        // find an element with one of the MUC namespaces
+        for(XMLElement elm : xElms) {
+            if(elm.getNamespaceURI() != null && 
elm.getNamespaceURI().startsWith(NamespaceURIs.XEP0045_MUC)) {
+                xElm = elm;
+                break;
             }
-        } catch (XMLSemanticError e) {
-            throw new IllegalArgumentException("Invalid stanza", e);
+        }
+        if(xElm != null) {
+            return new X(xElm.getInnerElements());
+        } else {
+            return null;
         }
     }
     
     public X(XMLElement...elements) {
+        this(NamespaceURIs.XEP0045_MUC, elements);
+    }
+
+    public X(String ns, XMLElement...elements) {
         super("x", null, new Attribute[]{
-            new NamespaceAttribute(NamespaceURIs.XEP0045_MUC)}, elements);
+            new NamespaceAttribute(ns)}, elements);
     }
     
     public X(List<XMLElement> elements) {
+        this(NamespaceURIs.XEP0045_MUC, elements);
+    }
+
+    public X(String ns, List<XMLElement> elements) {
         super("x", null, new Attribute[]{
-            new NamespaceAttribute(NamespaceURIs.XEP0045_MUC)}, 
elements.toArray(new XMLElement[]{}));
+            new NamespaceAttribute(ns)}, elements.toArray(new XMLElement[]{}));
     }
 
+    
     public String getPassword() {
         try {
             XMLElement passwordElm = getSingleInnerElementsNamed("password");


Reply via email to