From 9e8f14b05b1ba751f5a170c7d66261b08c772b1c Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 4 Nov 2010 10:38:46 -0400 Subject: [PATCH] INT-1554 added more tests and refactored/cleaned XmppPresenceMapper. Removed Presence Type header as unneccessery, since the only two payloads that are supported is Presence itself or Presentce.Type --- .../integration/xmpp/XmppHeaders.java | 6 -- .../xmpp/config/XmppNamespaceHandler.java | 1 - .../presence/XmppPresenceMessageMapper.java | 76 +++++++------------ .../XmppRosterEventMessageDrivenEndpoint.java | 2 +- .../xmpp/ignore/XmppRosterEventProducer.java | 10 +-- .../XmppPresenceMessageMapperTests.java | 20 ++--- 6 files changed, 43 insertions(+), 72 deletions(-) diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/XmppHeaders.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/XmppHeaders.java index 993420a227..3d9426bbba 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/XmppHeaders.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/XmppHeaders.java @@ -38,10 +38,6 @@ public class XmppHeaders { public static final String TYPE = PREFIX + "type"; -// public static final String ROSTER_CHANGE_TYPE = PREFIX + "roster_change_type"; - -// public static final String ROSTER = PREFIX + "roster"; - public static final String PRESENCE = PREFIX + "presence"; public static final String PRESENCE_LANGUAGE = PRESENCE + "language"; @@ -50,8 +46,6 @@ public class XmppHeaders { public static final String PRESENCE_MODE = PRESENCE + "mode"; - public static final String PRESENCE_TYPE = PRESENCE + "type"; - public static final String PRESENCE_STATUS = PRESENCE + "status"; public static final String PRESENCE_FROM = PRESENCE + "from"; diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java index ce7f21aeac..9f862253bd 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/config/XmppNamespaceHandler.java @@ -138,7 +138,6 @@ public class XmppNamespaceHandler extends NamespaceHandlerSupport { // presence headers this.addElementToHeaderMapping("presence-mode", XmppHeaders.PRESENCE_MODE, Presence.Mode.class); - this.addElementToHeaderMapping("presence-type", XmppHeaders.PRESENCE_TYPE, Presence.Type.class); this.addElementToHeaderMapping("presence-from", XmppHeaders.PRESENCE_FROM); this.addElementToHeaderMapping("presence-status", XmppHeaders.PRESENCE_STATUS); this.addElementToHeaderMapping("presence-priority", XmppHeaders.PRESENCE_PRIORITY, Integer.class); diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java index 33a3bf9f45..6612887ec0 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapper.java @@ -39,78 +39,60 @@ public class XmppPresenceMessageMapper implements OutboundMessageMapper toMessage(Presence presence) throws Exception { + @SuppressWarnings("unchecked") + public Message toMessage(Presence presence) throws Exception { MessageBuilder presenceMessageBuilder = MessageBuilder.withPayload(presence); presenceMessageBuilder.setHeader(XmppHeaders.PRESENCE_PRIORITY, presence.getPriority()); presenceMessageBuilder.setHeader(XmppHeaders.PRESENCE_STATUS, presence.getStatus()); presenceMessageBuilder.setHeader(XmppHeaders.PRESENCE_MODE, presence.getMode()); - presenceMessageBuilder.setHeader(XmppHeaders.PRESENCE_TYPE, presence.getType()); presenceMessageBuilder.setHeader(XmppHeaders.PRESENCE_FROM, presence.getFrom()); - return presenceMessageBuilder.build(); + return (Message) presenceMessageBuilder.build(); } /** - * Builds a {@link org.jivesoftware.smack.packet.Presence} object from the inbound Message headers, if possible. + * Builds a {@link Presence} object from the inbound Message headers, if possible. * * @param message the Message whose headers and payload willl b * @return the presence object as constructed from the {@link org.springframework.integration.Message} object * @throws Exception if there is a problem */ public Presence fromMessage(Message message) throws Exception { - MessageHeaders messageHeaders = message.getHeaders(); - - Integer priority = (Integer) messageHeaders.get(XmppHeaders.PRESENCE_PRIORITY); - String status = (String) messageHeaders.get(XmppHeaders.PRESENCE_STATUS); - String language = (String) messageHeaders.get(XmppHeaders.PRESENCE_LANGUAGE); - String from = (String) messageHeaders.get(XmppHeaders.PRESENCE_FROM); - - Object modeObj = messageHeaders.get(XmppHeaders.PRESENCE_MODE); - Presence.Mode mode = null; - - Object typeObj = messageHeaders.get(XmppHeaders.PRESENCE_TYPE); - Presence.Type type = null; - - if (typeObj != null){ - if (typeObj instanceof String) { - type = Presence.Type.valueOf((String) typeObj); - } - else if (typeObj instanceof Presence.Type) { - type = (Presence.Type) typeObj; - } - else { - throw new MessageMappingException("Unsupported type for Presence type. Only" + - " String or Presence.Type is allowed, but was: " + typeObj.getClass().getName()); - } - } - - - if (modeObj != null){ - if (modeObj instanceof String) { - mode = Presence.Mode.valueOf((String) modeObj); - } - else if (modeObj instanceof Presence.Mode) { - mode = (Presence.Mode) modeObj; - } - else { - throw new MessageMappingException("Unsupported type for Presence mode. Only" + - " String or Presence.Mode is allowed, but was: " + modeObj.getClass().getName()); - } - } - Object payload = message.getPayload(); if (payload instanceof Presence) { return (Presence) payload; } else if (payload instanceof Presence.Type) { - type = (Presence.Type) payload; - return this.factoryPresence(from, status, priority, type, mode, language); + Presence.Type presenceType = (Presence.Type) payload; + MessageHeaders messageHeaders = message.getHeaders(); + + Integer priority = (Integer) messageHeaders.get(XmppHeaders.PRESENCE_PRIORITY); + String status = (String) messageHeaders.get(XmppHeaders.PRESENCE_STATUS); + String language = (String) messageHeaders.get(XmppHeaders.PRESENCE_LANGUAGE); + String from = (String) messageHeaders.get(XmppHeaders.PRESENCE_FROM); + + Object modeObj = messageHeaders.get(XmppHeaders.PRESENCE_MODE); + Presence.Mode mode = null; + + if (modeObj != null){ + if (modeObj instanceof String) { + mode = Presence.Mode.valueOf((String) modeObj); + } + else if (modeObj instanceof Presence.Mode) { + mode = (Presence.Mode) modeObj; + } + else { + throw new MessageMappingException("Unsupported type for Presence mode. Only" + + " String or Presence.Mode is allowed, but was: " + modeObj.getClass().getName()); + } + } + return this.factoryPresence(from, status, priority, presenceType, mode, language); } else { throw new MessageMappingException("Unsupported Payload type: " + payload.getClass().getName()); diff --git a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppRosterEventMessageDrivenEndpoint.java b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppRosterEventMessageDrivenEndpoint.java index 2bcd884f94..1a953af327 100644 --- a/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppRosterEventMessageDrivenEndpoint.java +++ b/spring-integration-xmpp/src/main/java/org/springframework/integration/xmpp/presence/XmppRosterEventMessageDrivenEndpoint.java @@ -103,7 +103,7 @@ public class XmppRosterEventMessageDrivenEndpoint extends AbstractEndpoint { * * @param presence the {@link org.jivesoftware.smack.packet.Presence} object representing the new state (optional) */ - protected void forwardRosterEventMessage(Presence presence) { + private void forwardRosterEventMessage(Presence presence) { try { Message msg = this.messageMapper.toMessage(presence); messagingTemplate.send(requestChannel, msg); diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/XmppRosterEventProducer.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/XmppRosterEventProducer.java index 60cc7dfc61..015b582ead 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/XmppRosterEventProducer.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/ignore/XmppRosterEventProducer.java @@ -18,6 +18,7 @@ package org.springframework.integration.xmpp.ignore; import org.apache.commons.lang.StringUtils; import org.jivesoftware.smack.packet.Presence; +import org.jivesoftware.smack.packet.Presence.Type; import org.springframework.integration.Message; import org.springframework.integration.core.MessageSource; import org.springframework.integration.support.MessageBuilder; @@ -40,12 +41,11 @@ public class XmppRosterEventProducer implements MessageSource { catch (InterruptedException e) { // eat it } - return (Math.random() > .5) ? MessageBuilder.withPayload(StringUtils.EMPTY).setHeader( - XmppHeaders.PRESENCE_MODE, Presence.Mode.chat).setHeader(XmppHeaders.PRESENCE_TYPE, - Presence.Type.available).setHeader(XmppHeaders.PRESENCE_STATUS, "She Loves me").build() + return (Math.random() > .5) ? MessageBuilder.withPayload("available").setHeader( + XmppHeaders.PRESENCE_MODE, Presence.Mode.chat) + .setHeader(XmppHeaders.PRESENCE_STATUS, "She Loves me").build() : MessageBuilder.withPayload(StringUtils.EMPTY).setHeader(XmppHeaders.PRESENCE_MODE, Presence.Mode.dnd) - .setHeader(XmppHeaders.PRESENCE_TYPE, Presence.Type.available).setHeader( - XmppHeaders.PRESENCE_STATUS, "She Loves me not").build(); + .setHeader(XmppHeaders.PRESENCE_STATUS, "She Loves me not").build(); } } diff --git a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapperTests.java b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapperTests.java index 66895c8eb4..4b4bfa0b00 100644 --- a/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapperTests.java +++ b/spring-integration-xmpp/src/test/java/org/springframework/integration/xmpp/presence/XmppPresenceMessageMapperTests.java @@ -32,6 +32,14 @@ import org.springframework.integration.xmpp.XmppHeaders; */ public class XmppPresenceMessageMapperTests { + @Test + public void testToMessage() throws Exception{ + Presence presence = new Presence(Type.available, "Hello", 1, Mode.chat); + XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); + Message presenceMessage = mapper.toMessage(presence); + assertEquals(presence, presenceMessage.getPayload()); + // TODO look into why presence attributes are also duplicated as headers + } @Test public void testFromMessageWithPayloadPresence() throws Exception{ Presence presence = new Presence(Type.available, "Hello", 1, Mode.chat); @@ -50,7 +58,6 @@ public class XmppPresenceMessageMapperTests { .setHeader(XmppHeaders.PRESENCE_FROM, "oleg") .setHeader(XmppHeaders.PRESENCE_MODE, Mode.chat) .setHeader(XmppHeaders.PRESENCE_STATUS, "hello") - .setHeader(XmppHeaders.PRESENCE_TYPE, Type.subscribed) .setHeader(XmppHeaders.PRESENCE_PRIORITY, 1) .build(); XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); @@ -66,7 +73,6 @@ public class XmppPresenceMessageMapperTests { .setHeader(XmppHeaders.PRESENCE_FROM, "oleg") .setHeader(XmppHeaders.PRESENCE_MODE, "chat") .setHeader(XmppHeaders.PRESENCE_STATUS, "hello") - .setHeader(XmppHeaders.PRESENCE_TYPE, "subscribed") .setHeader(XmppHeaders.PRESENCE_PRIORITY, 1) .build(); XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); @@ -87,16 +93,6 @@ public class XmppPresenceMessageMapperTests { mapper.fromMessage(message); } - @Test(expected=MessageMappingException.class) - public void testFromMessageWithPayloadPresenceTypeUnsupportedType() throws Exception{ - - Message message = MessageBuilder.withPayload(Type.available) - .setHeader(XmppHeaders.PRESENCE_TYPE, 1) - .build(); - XmppPresenceMessageMapper mapper = new XmppPresenceMessageMapper(); - mapper.fromMessage(message); - } - @Test(expected=MessageMappingException.class) public void testFromMessageWithUnsupportedPayload() throws Exception{ Message message = MessageBuilder.withPayload("hello").build();