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


Reply via email to