diff options
| -rw-r--r-- | src/com/isode/stroke/elements/Message.java | 14 | ||||
| -rw-r--r-- | src/com/isode/stroke/elements/Stanza.java | 34 |
2 files changed, 42 insertions, 6 deletions
diff --git a/src/com/isode/stroke/elements/Message.java b/src/com/isode/stroke/elements/Message.java index 1bb601a..a0c8daa 100644 --- a/src/com/isode/stroke/elements/Message.java +++ b/src/com/isode/stroke/elements/Message.java @@ -1,3 +1,3 @@ /* - * Copyright (c) 2010-2015, Isode Limited, London, England. + * Copyright (c) 2010-2016, Isode Limited, London, England. * All rights reserved. @@ -33,6 +33,7 @@ public class Message extends Stanza { Body body = getPayload(new Body()); + String bodyData = null; if (body != null) { - return body.getText(); + bodyData = body.getText(); } - return ""; + return bodyData; } @@ -40,3 +41,8 @@ public class Message extends Stanza { public void setBody(String body) { - updatePayload(new Body(body)); + if (body != null) { + updatePayload(new Body(body)); + } + else { + removePayload(new Body()); + } } diff --git a/src/com/isode/stroke/elements/Stanza.java b/src/com/isode/stroke/elements/Stanza.java index 11ba1b4..9f03168 100644 --- a/src/com/isode/stroke/elements/Stanza.java +++ b/src/com/isode/stroke/elements/Stanza.java @@ -1,3 +1,3 @@ /* - * Copyright (c) 2010-2015, Isode Limited, London, England. + * Copyright (c) 2010-2016, Isode Limited, London, England. * All rights reserved. @@ -10,2 +10,3 @@ import com.isode.stroke.jid.JID; import java.util.Date; +import java.util.Iterator; import java.util.Vector; @@ -41,2 +42,31 @@ public abstract class Stanza implements Element { } + + /** + * Indicates if a given Payload is of a given type + * @param <T> A type of payload + * @param <P> A Payload + * @param type An instance of the type of payload to check for + * @param payload the payload to check the type of + * @return {@code true} if the Payload is of the same type, + * {@code false} otherwise. + */ + private static <T extends Payload,P extends Payload> boolean isPayloadOfType(T type,P payload) { + return payload.getClass().isAssignableFrom(type.getClass()); + } + + /** + * Removes all the payloads of the given type from the stanza + * @param <T> The payload type + * @param type Object of the payload type to remove, should + * not be {@code null} + */ + public <T extends Payload> void removePayload(T type) { + Iterator<Payload> payloadIterator = payloads_.iterator(); + while (payloadIterator.hasNext()) { + Payload payload = payloadIterator.next(); + if (isPayloadOfType(type, payload)) { + payloadIterator.remove(); + } + } + } @@ -51,3 +81,3 @@ public abstract class Stanza implements Element { for (Payload payload : payloads_) { - if (payload.getClass().isAssignableFrom(type.getClass())) { + if (isPayloadOfType(type, payload)) { return (T)payload; |
Swift