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 ([email protected])
+ */
+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) {