You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by ng...@apache.org on 2010/05/16 23:00:37 UTC

svn commit: r944909 - in /mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc: MUCStanzaBuilder.java handler/MUCIqAdminHandler.java handler/MUCPresenceHandler.java

Author: ngn
Date: Sun May 16 21:00:36 2010
New Revision: 944909

URL: http://svn.apache.org/viewvc?rev=944909&view=rev
Log:
Added a StanzaBuilder extension to clean up some redudant code

Added:
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCStanzaBuilder.java
Modified:
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java
    mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java

Added: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCStanzaBuilder.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCStanzaBuilder.java?rev=944909&view=auto
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCStanzaBuilder.java (added)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/MUCStanzaBuilder.java Sun May 16 21:00:36 2010
@@ -0,0 +1,62 @@
+/*
+ *  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.extension.xep0045_muc;
+
+import java.util.List;
+
+import org.apache.vysper.xml.fragment.Attribute;
+import org.apache.vysper.xml.fragment.XMLElement;
+import org.apache.vysper.xml.fragment.XMLFragment;
+import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
+import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
+import org.apache.vysper.xmpp.stanza.Stanza;
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+
+/**
+ * Specialized {@link StanzaBuilder} for MUC
+ *
+ * @author The Apache MINA Project (dev@mina.apache.org)
+ */
+public class MUCStanzaBuilder extends StanzaBuilder {
+
+	public static Stanza createPresenceStanza(Entity from, Entity to, PresenceStanzaType type, String xNamespaceUri, List<XMLElement> innerElms) {
+		return createPresenceStanza(from, to, type, xNamespaceUri, innerElms.toArray(new XMLElement[0]));
+	}
+	
+	public static Stanza createPresenceStanza(Entity from, Entity to, PresenceStanzaType type, String xNamespaceUri, XMLElement... innerElms) {
+		StanzaBuilder builder = StanzaBuilder.createPresenceStanza(from, to, null, 
+				type, null, null);
+		builder.addPreparedElement(new X(xNamespaceUri, innerElms));
+ 
+		return builder.build();
+	}
+	
+	
+	public MUCStanzaBuilder(String stanzaName, String namespaceURI,
+			List<Attribute> attributes,
+			List<XMLFragment> innerFragments) {
+		super(stanzaName, namespaceURI, null, attributes, innerFragments);
+	}
+
+	public MUCStanzaBuilder(String stanzaName, String namespaceURI) {
+		super(stanzaName, namespaceURI);
+	}
+}

Modified: mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java
URL: http://svn.apache.org/viewvc/mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java?rev=944909&r1=944908&r2=944909&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCIqAdminHandler.java Sun May 16 21:00:36 2010
@@ -27,6 +27,7 @@ import org.apache.vysper.xmpp.addressing
 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.DefaultIQHandler;
+import org.apache.vysper.xmpp.modules.extension.xep0045_muc.MUCStanzaBuilder;
 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;
@@ -35,7 +36,6 @@ import org.apache.vysper.xmpp.modules.ex
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.IqAdminItem;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserPresenceItem;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status;
-import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -109,26 +109,26 @@ public class MUCIqAdminHandler extends D
 					room.removeOccupant(kicked.getJid());
 					Entity kickedInRoom = roomAndNick(room, kicked);
 					
+					Status kickedStatus = new Status(StatusCode.BEEN_KICKED);
+					
 					// notify user he got kicked
-					StanzaBuilder presenceBuilder = StanzaBuilder.createPresenceStanza(kickedInRoom, kicked.getJid(), null, 
-							PresenceStanzaType.UNAVAILABLE, null, null);
-					presenceBuilder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
+					Stanza presenceToKicked = MUCStanzaBuilder.createPresenceStanza(kickedInRoom, kicked.getJid(),  
+							PresenceStanzaType.UNAVAILABLE, NamespaceURIs.XEP0045_MUC_USER, 
 							new MucUserPresenceItem(Affiliation.None, Role.None),
 							// TODO handle <actor>
 							// TODO handle <reason>
-							new Status(StatusCode.BEEN_KICKED)));
+							kickedStatus);
 
-					relayStanza(kicked.getJid(), presenceBuilder.build(), serverRuntimeContext);
+					relayStanza(kicked.getJid(), presenceToKicked, serverRuntimeContext);
 					
 					// notify remaining users that user got kicked
 					for(Occupant remaining : room.getOccupants()) {
-						StanzaBuilder presenceToRemainingBuilder = StanzaBuilder.createPresenceStanza(kickedInRoom, remaining.getJid(), null, 
-								PresenceStanzaType.UNAVAILABLE, null, null);
-						presenceToRemainingBuilder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
+						Stanza presenceToRemaining = MUCStanzaBuilder.createPresenceStanza(kickedInRoom, remaining.getJid(),  
+								PresenceStanzaType.UNAVAILABLE, NamespaceURIs.XEP0045_MUC_USER, 
 								new MucUserPresenceItem(Affiliation.None, Role.None),
-								new Status(StatusCode.BEEN_KICKED)));
+								kickedStatus);
 						
-						relayStanza(remaining.getJid(), presenceToRemainingBuilder.build(), serverRuntimeContext);
+						relayStanza(remaining.getJid(), presenceToRemaining, serverRuntimeContext);
 					}
 				}
 			}

Modified: mina/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/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java?rev=944909&r1=944908&r2=944909&view=diff
==============================================================================
--- mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java (original)
+++ mina/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandler.java Sun May 16 21:00:36 2010
@@ -32,6 +32,7 @@ import org.apache.vysper.xmpp.addressing
 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.MUCStanzaBuilder;
 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;
@@ -270,25 +271,21 @@ public class MUCPresenceHandler extends 
         }
         
         Entity roomAndOccupantNick = new EntityImpl(room.getJID(), existingOccupant.getName());
-        StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndOccupantNick, newOccupant.getJid(), null, null, null, null);
-        
-        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, 
-                new MucUserPresenceItem(null, null, existingOccupant.getAffiliation(), existingOccupant.getRole())));
-
+        Stanza presenceToNewOccupant = MUCStanzaBuilder.createPresenceStanza(roomAndOccupantNick, newOccupant.getJid(), null, 
+        		NamespaceURIs.XEP0045_MUC_USER, 
+                new MucUserPresenceItem(existingOccupant.getAffiliation(), existingOccupant.getRole()));
         
         logger.debug("Room presence from {} sent to {}", newOccupant, roomAndOccupantNick);
-        relayStanza(newOccupant.getJid(), builder.build(), serverRuntimeContext);
+        relayStanza(newOccupant.getJid(), presenceToNewOccupant, serverRuntimeContext);
     }
     
     private void sendNewOccupantPresenceToExisting(Occupant newOccupant, Occupant existingOccupant, Room room, ServerRuntimeContext serverRuntimeContext) {
         Entity roomAndNewUserNick = new EntityImpl(room.getJID(), newOccupant.getName());
         
-        StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndNewUserNick, existingOccupant.getJid(), null, null, null, null);
         
         List<XMLElement> inner = new ArrayList<XMLElement>();
-
         
-        // room is non-anonymous or semi-anonmoys and the occupant a moderator, send full user JID
+        // room is non-anonymous or semi-anonymous 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); 
         inner.add(new MucUserPresenceItem(newOccupant, includeJid, false));
@@ -303,17 +300,17 @@ public class MUCPresenceHandler extends 
             // send status to indicate that this is the users own presence
             inner.add(new Status(StatusCode.OWN_PRESENCE));
         }
-        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, inner));
+        
+        Stanza presenceToExisting = MUCStanzaBuilder.createPresenceStanza(roomAndNewUserNick, existingOccupant.getJid(), null, 
+        		NamespaceURIs.XEP0045_MUC_USER, inner);
 
         logger.debug("Room presence from {} sent to {}", roomAndNewUserNick, existingOccupant);
-        relayStanza(existingOccupant.getJid(), builder.build(), serverRuntimeContext);
+        relayStanza(existingOccupant.getJid(), presenceToExisting, serverRuntimeContext);
     }
 
     private void sendChangeNickUnavailable(Occupant changer, String oldNick, Occupant receiver, Room room, ServerRuntimeContext serverRuntimeContext) {
         Entity roomAndOldNick = new EntityImpl(room.getJID(), oldNick);
         
-        StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndOldNick, receiver.getJid(), null, 
-                PresenceStanzaType.UNAVAILABLE, null, null);
         
         List<XMLElement> inner = new ArrayList<XMLElement>();
         
@@ -325,10 +322,11 @@ public class MUCPresenceHandler extends 
             // send status to indicate that this is the users own presence
             inner.add(new Status(StatusCode.OWN_PRESENCE));
         }
-        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, inner));
+        Stanza presenceToReceiver = MUCStanzaBuilder.createPresenceStanza(roomAndOldNick, receiver.getJid(),  
+        		PresenceStanzaType.UNAVAILABLE, NamespaceURIs.XEP0045_MUC_USER, inner);
 
         logger.debug("Room presence from {} sent to {}", roomAndOldNick, receiver);
-        relayStanza(receiver.getJid(), builder.build(), serverRuntimeContext);
+        relayStanza(receiver.getJid(), presenceToReceiver, serverRuntimeContext);
     }
     
 
@@ -359,7 +357,6 @@ public class MUCPresenceHandler extends 
     private void sendChangeNickAvailable(Occupant changer, Occupant receiver, Room room, ServerRuntimeContext serverRuntimeContext) {
         Entity roomAndOldNick = new EntityImpl(room.getJID(), changer.getName());
         
-        StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndOldNick, receiver.getJid(), null, null, null, null);
         
         List<XMLElement> inner = new ArrayList<XMLElement>();
         boolean includeJid = includeJidInItem(room, receiver);  
@@ -369,9 +366,10 @@ public class MUCPresenceHandler extends 
             // send status to indicate that this is the users own presence
             inner.add(new Status(StatusCode.OWN_PRESENCE));
         }
-        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, inner));
+        Stanza presenceToReceiver = MUCStanzaBuilder.createPresenceStanza(roomAndOldNick, receiver.getJid(), null, 
+        		NamespaceURIs.XEP0045_MUC_USER, inner);
 
-        relayStanza(receiver.getJid(), builder.build(), serverRuntimeContext);
+        relayStanza(receiver.getJid(), presenceToReceiver, serverRuntimeContext);
     }
 
     
@@ -379,8 +377,6 @@ public class MUCPresenceHandler extends 
             String statusMessage, ServerRuntimeContext serverRuntimeContext) {
         Entity roomAndNewUserNick = new EntityImpl(room.getJID(), exitingOccupant.getName());
         
-        StanzaBuilder builder = StanzaBuilder.createPresenceStanza(roomAndNewUserNick, existingOccupant.getJid(), null, 
-                PresenceStanzaType.UNAVAILABLE, null, null);
 
         List<XMLElement> inner = new ArrayList<XMLElement>();
         inner.add(new MucUserPresenceItem(null, null, existingOccupant.getAffiliation(), Role.None));
@@ -399,9 +395,11 @@ public class MUCPresenceHandler extends 
             }
             inner.add(status);
         }
-        builder.addPreparedElement(new X(NamespaceURIs.XEP0045_MUC_USER, inner));
 
-        relayStanza(existingOccupant.getJid(), builder.build(), serverRuntimeContext);
+        Stanza presenceToExisting = MUCStanzaBuilder.createPresenceStanza(roomAndNewUserNick, existingOccupant.getJid(),  
+        		PresenceStanzaType.UNAVAILABLE, NamespaceURIs.XEP0045_MUC_USER, inner);
+
+        relayStanza(existingOccupant.getJid(), presenceToExisting, serverRuntimeContext);
     }
 
     protected void relayStanzas(Entity receiver, List<Stanza> stanzas, ServerRuntimeContext serverRuntimeContext) {