Author: ngn
Date: Fri Aug 21 21:06:25 2009
New Revision: 806721
URL: http://svn.apache.org/viewvc?rev=806721&view=rev
Log:
Implement changing nickname (VYSPER-111)
Add strong typing for status codes
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/Status.java
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/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.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=806721&r1=806720&r2=806721&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
Fri Aug 21 21:06:25 2009
@@ -29,6 +29,7 @@
import org.apache.vysper.xmpp.delivery.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.handler.Status.StatusCode;
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;
@@ -263,11 +264,11 @@
if(room.getRoomTypes().contains(RoomType.NonAnonymous)) {
// notify the user that this is a non-anonymous room
- builder.startInnerElement("status").addAttribute("code",
"100").endInnerElement();
+ new
Status(StatusCode.ROOM_NON_ANONYMOUS).insertElement(builder);
}
// send status to indicate that this is the users own presence
- builder.startInnerElement("status").addAttribute("code",
"110").endInnerElement();
+ new Status(StatusCode.OWN_PRESENCE).insertElement(builder);
}
builder.endInnerElement();
@@ -285,11 +286,11 @@
boolean includeJid = includeJidInItem(room, receiver);
new MUCUserItem(changer).insertElement(builder, includeJid, true);
+ new Status(StatusCode.NEW_NICK).insertElement(builder);
- builder.startInnerElement("status").addAttribute("code",
"330").endInnerElement();
if(receiver.getJid().equals(changer.getJid())) {
// send status to indicate that this is the users own presence
- builder.startInnerElement("status").addAttribute("code",
"110").endInnerElement();
+ new Status(StatusCode.OWN_PRESENCE).insertElement(builder);
}
builder.endInnerElement();
@@ -314,7 +315,7 @@
if(receiver.getJid().equals(changer.getJid())) {
// send status to indicate that this is the users own presence
- builder.startInnerElement("status").addAttribute("code",
"110").endInnerElement();
+ new Status(StatusCode.OWN_PRESENCE).insertElement(builder);
}
builder.endInnerElement();
@@ -340,17 +341,15 @@
boolean ownStanza =
existingOccupant.getJid().equals(exitingOccupant.getJid());
if(ownStanza || statusMessage != null) {
- builder.startInnerElement("status");
-
+
+ Status status;
if(ownStanza) {
// send status to indicate that this is the users own presence
- builder.addAttribute("code", "110");
- }
- if(statusMessage != null) {
- builder.addText(statusMessage);
+ status = new Status(StatusCode.OWN_PRESENCE, statusMessage);
+ } else {
+ status = new Status(statusMessage);
}
-
- builder.endInnerElement();
+ status.insertElement(builder);
}
builder.endInnerElement();
Added:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/Status.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/Status.java?rev=806721&view=auto
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/Status.java
(added)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/Status.java
Fri Aug 21 21:06:25 2009
@@ -0,0 +1,108 @@
+/*
+ * 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.handler;
+
+import org.apache.vysper.xmpp.stanza.StanzaBuilder;
+
+
+/**
+ *
+ * @author The Apache MINA Project ([email protected])
+ */
+public class Status {
+
+ public enum StatusCode {
+ /** Inform user that any occupant is allowed to see the user's full
JID */
+ ROOM_NON_ANONYMOUS (100),
+ /** Inform user that his or her affiliation changed while not in the
room */
+ AFFILIATION_CHANGE (101),
+ /** Inform occupants that room now shows unavailable members */
+ SHOWING_UNAVAILABLE_MEMBERS (102),
+ /** Inform occupants that room now does not show unavailable members */
+ HIDING_UNAVAILABLE_MEMBERS (103),
+ /** Inform occupants that a non-privacy-related room configuration
change has occurred */
+ NON_PRIVACY_CHANGE (104),
+ /** Inform user that presence refers to one of its own room occupants
*/
+ OWN_PRESENCE (110),
+ /** Inform occupants that room logging is now enabled */
+ ROOM_LOGGING_ENABLED (170),
+ /** Inform occupants that room logging is now disabled */
+ ROOM_LOGGING_DISABLED (171),
+ /** Inform occupants that the room is now non-anonymous */
+ ROOM_NOW_NON_ANONYMOUS (172),
+ /** Inform occupants that the room is now semi-anonymous */
+ ROOM_NOW_SEMI_ANONYMOUS (173),
+ /** Inform occupants that the room is now fully-anonymous */
+ ROOM_NOW_FULLY_ANONYMOUS (174),
+ /** Inform user that a new room has been created */
+ ROOM_CREATED (201),
+ /** Inform user that the service has assigned or modified the
occupant's roomnick */
+ NICK_MODIFIED (210),
+ /** Inform user that he or she has been banned from the room */
+ BEEN_BANNED (301),
+ /** Inform all occupants of new room nickname */
+ NEW_NICK (303),
+ /** Inform user that he or she has been kicked from the room */
+ BEEN_KICKED (307),
+ /** Inform user that he or she is being removed from the room because
of an affiliation change */
+ REMOVED_BY_AFFILIATION (321),
+ /** Inform user that he or she is being removed from the room because
the room has been changed
+ * to members-only and the user is not a member */
+ REMOVED_BY_MEMBERSHIP (322),
+ /** Inform user that he or she is being removed from the room because
of a system shutdown */
+ REMOVED_BY_SHUTDOWN (323);
+
+ private int statusCode;
+
+ private StatusCode(int statusCode) {
+ this.statusCode = statusCode;
+ }
+
+ public int code() {
+ return statusCode;
+ }
+ }
+
+ private StatusCode code;
+ private String message;
+
+ public Status(StatusCode code) {
+ this.code = code;
+ }
+
+ public Status(StatusCode code, String message) {
+ this.code = code;
+ this.message = message;
+ }
+
+ public Status(String message) {
+ this.message = message;
+ }
+
+
+ public void insertElement(StanzaBuilder stanzaBuilder) {
+ stanzaBuilder.startInnerElement("status");
+ if(code != null) stanzaBuilder.addAttribute("code",
Integer.toString(code.code()));
+ if(message != null) {
+ stanzaBuilder.addText(message);
+ }
+ stanzaBuilder.endInnerElement();
+ }
+}
Modified:
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java
URL:
http://svn.apache.org/viewvc/mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java?rev=806721&r1=806720&r2=806721&view=diff
==============================================================================
---
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java
(original)
+++
mina/sandbox/vysper/trunk/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/MUCPresenceHandlerChangeNickTestCase.java
Fri Aug 21 21:06:25 2009
@@ -6,6 +6,7 @@
import org.apache.vysper.xmpp.addressing.Entity;
import org.apache.vysper.xmpp.addressing.EntityImpl;
+import
org.apache.vysper.xmpp.modules.extension.xep0045_muc.handler.Status.StatusCode;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Affiliation;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Occupant;
import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Role;
@@ -54,13 +55,13 @@
MUCUserItem unavailbleItem = new MUCUserItem(OCCUPANT1_JID, "new
nick", Affiliation.None, Role.Participant);
assertPresenceStanza(occupant1Queue.getNext(), new
EntityImpl(ROOM1_JID, "nick"), OCCUPANT1_JID, "unavailable",
- Arrays.asList(unavailbleItem), Arrays.asList(330, 110));
+ Arrays.asList(unavailbleItem),
Arrays.asList(StatusCode.NEW_NICK, StatusCode.OWN_PRESENCE));
assertPresenceStanza(occupant2Queue.getNext(), new
EntityImpl(ROOM1_JID, "nick"), OCCUPANT2_JID, "unavailable",
- Arrays.asList(unavailbleItem), Arrays.asList(330));
+ Arrays.asList(unavailbleItem),
Arrays.asList(StatusCode.NEW_NICK));
MUCUserItem availbleItem = new MUCUserItem(OCCUPANT1_JID, null,
Affiliation.None, Role.Participant);
assertPresenceStanza(occupant1Queue.getNext(), new
EntityImpl(ROOM1_JID, "new nick"), OCCUPANT1_JID, null,
- Arrays.asList(availbleItem), Arrays.asList(110));
+ Arrays.asList(availbleItem),
Arrays.asList(StatusCode.OWN_PRESENCE));
assertPresenceStanza(occupant2Queue.getNext(), new
EntityImpl(ROOM1_JID, "new nick"), OCCUPANT2_JID, null,
Arrays.asList(availbleItem), null);
}
@@ -76,7 +77,7 @@
}
private void assertPresenceStanza(Stanza stanza, Entity expectedFrom,
Entity expectedTo, String expectedType,
- List<MUCUserItem> expectedItems, List<Integer> expectedStatuses) {
+ List<MUCUserItem> expectedItems, List<StatusCode>
expectedStatuses) {
assertNotNull(stanza);
assertEquals(expectedFrom, stanza.getFrom());
@@ -86,15 +87,26 @@
XMLElement xElm = stanza.getFirstInnerElement();
assertEquals(NamespaceURIs.XEP0045_MUC_USER, xElm.getNamespaceURI());
- Iterator<XMLElement> itemElements = xElm.getInnerElements().iterator();
+ Iterator<XMLElement> innerElements =
xElm.getInnerElements().iterator();
for(MUCUserItem item : expectedItems) {
- XMLElement itemElm = itemElements.next();
+ XMLElement itemElm = innerElements.next();
+ assertEquals("item", itemElm.getName());
assertEquals(item.getJid().getFullQualifiedName(),
itemElm.getAttributeValue("jid"));
assertEquals(item.getNick(), itemElm.getAttributeValue("nick"));
assertEquals(item.getAffiliation().toString(),
itemElm.getAttributeValue("affiliation"));
assertEquals(item.getRole().toString(),
itemElm.getAttributeValue("role"));
}
+
+ if(expectedStatuses != null) {
+ for(StatusCode status : expectedStatuses) {
+ XMLElement statusElm = innerElements.next();
+
+ assertEquals("status", statusElm.getName());
+ assertEquals(status.code(),
Integer.parseInt(statusElm.getAttributeValue("code")));
+
+ }
+ }
}
}