diff options
Diffstat (limited to 'src/com/isode/stroke/serializer/payloadserializers')
10 files changed, 468 insertions, 17 deletions
diff --git a/src/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializer.java index b98a741..cfe1c25 100644 --- a/src/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializer.java +++ b/src/com/isode/stroke/serializer/payloadserializers/CapsInfoSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 Isode Limited. + * Copyright (c) 2010-2015 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ @@ -34,4 +34,4 @@ public class CapsInfoSerializer extends GenericPayloadSerializer<CapsInfo> { capsElement.setAttribute("ver", capsInfo.getVersion()); return capsElement.serialize(); } -}
\ No newline at end of file +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java index 0b62e0f..f4caa29 100644 --- a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java +++ b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java @@ -1,9 +1,5 @@ /* - * Copyright (c) 2010-2012, Isode Limited, London, England. - * All rights reserved. - */ -/* - * Copyright (c) 2010, Remko Tronçon. + * Copyright (c) 2010-2015, Isode Limited, London, England. * All rights reserved. */ package com.isode.stroke.serializer.payloadserializers; @@ -34,8 +30,8 @@ public class FullPayloadSerializerCollection extends PayloadSerializerCollection addSerializer(new MUCOwnerPayloadSerializer(this)); addSerializer(new MUCUserPayloadSerializer(this)); addSerializer(new SoftwareVersionSerializer()); - //addSerializer(new StatusSerializer()); - //addSerializer(new StatusShowSerializer()); + addSerializer(new StatusSerializer()); + addSerializer(new StatusShowSerializer()); addSerializer(new DiscoInfoSerializer()); addSerializer(new DiscoItemsSerializer()); addSerializer(new CapsInfoSerializer()); @@ -45,17 +41,19 @@ public class FullPayloadSerializerCollection extends PayloadSerializerCollection //addSerializer(new SecurityLabelsCatalogSerializer()); //addSerializer(new StreamInitiationSerializer()); //addSerializer(new BytestreamsSerializer()); - //addSerializer(new VCardSerializer()); + addSerializer(new VCardSerializer()); //addSerializer(new VCardUpdateSerializer()); addSerializer(new RawXMLPayloadSerializer()); - //addSerializer(new StorageSerializer()); + addSerializer(new StorageSerializer()); addSerializer(new DelaySerializer()); addSerializer(new FormSerializer()); - //addSerializer(new PrivateStorageSerializer(this)); + addSerializer(new PrivateStorageSerializer(this)); addSerializer(new CommandSerializer()); //addSerializer(new NicknameSerializer()); addSerializer(new SearchPayloadSerializer()); + addSerializer(new ReplaceSerializer()); addSerializer(new LastSerializer()); + addSerializer(new IdleSerializer()); addSerializer(new PubSubSerializer(this)); addSerializer(new PubSubEventSerializer(this)); diff --git a/src/com/isode/stroke/serializer/payloadserializers/IdleSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/IdleSerializer.java new file mode 100644 index 0000000..6d1ae93 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/IdleSerializer.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2015 Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2013 Tobias Markmann + * Licensed under the simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.base.DateTime; +import com.isode.stroke.elements.Idle; +import com.isode.stroke.serializer.GenericPayloadSerializer; + +public class IdleSerializer extends GenericPayloadSerializer<Idle> { + + public IdleSerializer() { + super(Idle.class); + } + + @Override + protected String serializePayload(Idle idle) { + return "<idle xmlns='urn:xmpp:idle:1' since='" + DateTime.dateToString(idle.getSince()) + "'/>"; + } +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/MUCInvitationPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/MUCInvitationPayloadSerializer.java index e149aa7..3281b0e 100644 --- a/src/com/isode/stroke/serializer/payloadserializers/MUCInvitationPayloadSerializer.java +++ b/src/com/isode/stroke/serializer/payloadserializers/MUCInvitationPayloadSerializer.java @@ -1,9 +1,5 @@ /* - * Copyright (c) 2012, Isode Limited, London, England. - * All rights reserved. - */ -/* - * Copyright (c) 2011, Kevin Smith + * Copyright (c) 2011-2015, Isode Limited, London, England. * All rights reserved. */ package com.isode.stroke.serializer.payloadserializers; @@ -41,6 +37,9 @@ public class MUCInvitationPayloadSerializer extends GenericPayloadSerializer<MUC if (payload.getThread() != null && !payload.getThread().isEmpty()) { mucElement.setAttribute("thread", payload.getThread()); } + if (payload.getIsImpromptu()) { + mucElement.addNode(new XMLElement("impromptu", "http://swift.im/impromptu")); + } return mucElement.serialize(); } } diff --git a/src/com/isode/stroke/serializer/payloadserializers/PrivateStorageSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/PrivateStorageSerializer.java new file mode 100644 index 0000000..c863f71 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/PrivateStorageSerializer.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2010-2015, Isode Limited, London, England. + * All rights reserved. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.Payload; +import com.isode.stroke.elements.PrivateStorage; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.PayloadSerializer; +import com.isode.stroke.serializer.PayloadSerializerCollection; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLRawTextNode; + +class PrivateStorageSerializer extends GenericPayloadSerializer<PrivateStorage>{ + + private final PayloadSerializerCollection serializers; + + public PrivateStorageSerializer(PayloadSerializerCollection serializers) { + super(PrivateStorage.class); + this.serializers = serializers; + } + + + @Override + protected String serializePayload(PrivateStorage storage) { + XMLElement storageElement = new XMLElement("query", "jabber:iq:private"); + Payload payload = storage.getPayload(); + if (payload != null) { + PayloadSerializer serializer = serializers.getPayloadSerializer(payload); + if (serializer != null) { + storageElement.addNode(new XMLRawTextNode(serializer.serialize(payload))); + } + } + return storageElement.serialize(); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/ReplaceSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/ReplaceSerializer.java new file mode 100644 index 0000000..b6b49e2 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/ReplaceSerializer.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2012-2015, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2011 Vlad Voicu + * Licensed under the Simplified BSD license. + * See Documentation/Licenses/BSD-simplified.txt for more information. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.Replace; +import com.isode.stroke.serializer.GenericPayloadSerializer; + +public class ReplaceSerializer extends GenericPayloadSerializer<Replace> { + + public ReplaceSerializer() { + super(Replace.class); + } + + protected String serializePayload(Replace replace) { + return "<replace id = '" + replace.getID() + "' xmlns='urn:xmpp:message-correct:0'/>"; + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/StatusSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/StatusSerializer.java new file mode 100644 index 0000000..6a9bb23 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/StatusSerializer.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2010-2015, Isode Limited, London, England. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.Status; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLTextNode; + +public class StatusSerializer extends GenericPayloadSerializer<Status> { + + public StatusSerializer() { + super(Status.class); + } + + protected String serializePayload(Status status) { + XMLElement element = new XMLElement("status"); + element.addNode(new XMLTextNode(status.getText())); + return element.serialize(); + } +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/StatusShowSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/StatusShowSerializer.java new file mode 100644 index 0000000..e7cb587 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/StatusShowSerializer.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2010-2015, Isode Limited, London, England. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.StatusShow; +import com.isode.stroke.serializer.GenericPayloadSerializer; + +public class StatusShowSerializer extends GenericPayloadSerializer<StatusShow> { + + public StatusShowSerializer() { + super(StatusShow.class); + } + + protected String serializePayload(StatusShow statusShow) { + if (statusShow.getType () == StatusShow.Type.Online || statusShow.getType() == StatusShow.Type.None) { + return ""; + } + else { + String result = "<show>"; + switch (statusShow.getType()) { + case Away: result += "away"; break; + case XA: result += "xa"; break; + case FFC: result += "chat"; break; + case DND: result += "dnd"; break; + case Online: assert(false); break; + case None: assert(false); break; + } + result += "</show>"; + return result; + } + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/StorageSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/StorageSerializer.java new file mode 100644 index 0000000..2a072ad --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/StorageSerializer.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2010-2015, Isode Limited, London, England. + * All rights reserved. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.Storage; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLTextNode; + +class StorageSerializer extends GenericPayloadSerializer<Storage>{ + + public StorageSerializer() { + super(Storage.class); + } + + @Override + protected String serializePayload(Storage storage) { + XMLElement storageElement = new XMLElement("storage", "storage:bookmarks"); + + for (final Storage.Room room : storage.getRooms()) { + XMLElement conferenceElement = new XMLElement("conference"); + conferenceElement.setAttribute("name", room.name); + conferenceElement.setAttribute("jid", room.jid.toString()); + conferenceElement.setAttribute("autojoin", room.autoJoin ? "1" : "0"); + if (room.nick != null && !room.nick.isEmpty()) { + XMLElement nickElement = new XMLElement("nick"); + nickElement.addNode(new XMLTextNode(room.nick)); + conferenceElement.addNode(nickElement); + } + if (room.password != null) { + XMLElement passwordElement = new XMLElement("password"); + passwordElement.addNode(new XMLTextNode(room.password)); + conferenceElement.addNode(passwordElement); + } + storageElement.addNode(conferenceElement); + } + + for (final Storage.URL url : storage.getURLs()) { + XMLElement urlElement = new XMLElement("url"); + urlElement.setAttribute("name", url.name); + urlElement.setAttribute("url", url.url); + storageElement.addNode(urlElement); + } + + return storageElement.serialize(); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/VCardSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/VCardSerializer.java new file mode 100644 index 0000000..8a98f46 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/VCardSerializer.java @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2010-2015, Isode Limited, London, England. + * All rights reserved. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.base.DateTime; +import com.isode.stroke.elements.VCard; +import com.isode.stroke.jid.JID; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLRawTextNode; +import com.isode.stroke.stringcodecs.Base64; + +class VCardSerializer extends GenericPayloadSerializer<VCard>{ + + public VCardSerializer() { + super(VCard.class); + } + + @Override + protected String serializePayload(VCard vcard) { + XMLElement queryElement = new XMLElement("vCard", "vcard-temp"); + if (vcard.getVersion() != null && !vcard.getVersion().isEmpty()) { + queryElement.addNode(new XMLElement("VERSION", "", vcard.getVersion())); + } + if (vcard.getFullName() != null && !vcard.getFullName().isEmpty()) { + queryElement.addNode(new XMLElement("FN", "", vcard.getFullName())); + } + if (vcard.getGivenName() != null && !vcard.getGivenName().isEmpty() + || vcard.getFamilyName() != null && !vcard.getFamilyName().isEmpty() + || vcard.getMiddleName() != null && !vcard.getMiddleName().isEmpty() + || vcard.getPrefix() != null && !vcard.getPrefix().isEmpty() + || vcard.getSuffix() != null && !vcard.getSuffix().isEmpty()) { + XMLElement nameElement = new XMLElement("N"); + if (vcard.getFamilyName() != null && !vcard.getFamilyName().isEmpty()) { + nameElement.addNode(new XMLElement("FAMILY", "", vcard.getFamilyName())); + } + if (vcard.getGivenName() != null && !vcard.getGivenName().isEmpty()) { + nameElement.addNode(new XMLElement("GIVEN", "", vcard.getGivenName())); + } + if (vcard.getMiddleName() != null && !vcard.getMiddleName().isEmpty()) { + nameElement.addNode(new XMLElement("MIDDLE", "", vcard.getMiddleName())); + } + if (vcard.getPrefix() != null && !vcard.getPrefix().isEmpty()) { + nameElement.addNode(new XMLElement("PREFIX", "", vcard.getPrefix())); + } + if (vcard.getSuffix() != null && !vcard.getSuffix().isEmpty()) { + nameElement.addNode(new XMLElement("SUFFIX", "", vcard.getSuffix())); + } + queryElement.addNode(nameElement); + } + if (vcard.getEMailAddresses() != null) for (final VCard.EMailAddress emailAddress : vcard.getEMailAddresses()) { + XMLElement emailElement = new XMLElement("EMAIL"); + emailElement.addNode(new XMLElement("USERID", "", emailAddress.address)); + if (emailAddress.isHome) { + emailElement.addNode(new XMLElement("HOME")); + } + if (emailAddress.isWork) { + emailElement.addNode(new XMLElement("WORK")); + } + if (emailAddress.isInternet) { + emailElement.addNode(new XMLElement("INTERNET")); + } + if (emailAddress.isPreferred) { + emailElement.addNode(new XMLElement("PREF")); + } + if (emailAddress.isX400) { + emailElement.addNode(new XMLElement("X400")); + } + queryElement.addNode(emailElement); + } + if (vcard.getNickname() != null && !vcard.getNickname().isEmpty()) { + queryElement.addNode(new XMLElement("NICKNAME", "", vcard.getNickname())); + } + if (vcard.getPhoto() != null && !vcard.getPhoto().isEmpty() || vcard.getPhotoType() != null && !vcard.getPhotoType().isEmpty()) { + XMLElement photoElement = new XMLElement("PHOTO"); + if (vcard.getPhotoType() != null && !vcard.getPhotoType().isEmpty()) { + photoElement.addNode(new XMLElement("TYPE", "", vcard.getPhotoType())); + } + if (vcard.getPhoto() != null && !vcard.getPhoto().isEmpty()) { + photoElement.addNode(new XMLElement("BINVAL", "", Base64.encode(vcard.getPhoto()))); + } + queryElement.addNode(photoElement); + } + if (vcard.getBirthday() != null) { + queryElement.addNode(new XMLElement("BDAY", "", DateTime.dateToString(vcard.getBirthday()))); + } + + if (vcard.getTelephones() != null) for (final VCard.Telephone telephone : vcard.getTelephones()) { + XMLElement telElement = new XMLElement("TEL"); + telElement.addNode(new XMLElement("NUMBER", "", telephone.number)); + if (telephone.isHome) { + telElement.addNode(new XMLElement("HOME")); + } + if (telephone.isWork) { + telElement.addNode(new XMLElement("WORK")); + } + if (telephone.isVoice) { + telElement.addNode(new XMLElement("VOICE")); + } + if (telephone.isFax) { + telElement.addNode(new XMLElement("FAX")); + } + if (telephone.isPager) { + telElement.addNode(new XMLElement("PAGER")); + } + if (telephone.isMSG) { + telElement.addNode(new XMLElement("MSG")); + } + if (telephone.isCell) { + telElement.addNode(new XMLElement("CELL")); + } + if (telephone.isVideo) { + telElement.addNode(new XMLElement("VIDEO")); + } + if (telephone.isBBS) { + telElement.addNode(new XMLElement("BBS")); + } + if (telephone.isModem) { + telElement.addNode(new XMLElement("MODEM")); + } + if (telephone.isISDN) { + telElement.addNode(new XMLElement("ISDN")); + } + if (telephone.isPCS) { + telElement.addNode(new XMLElement("PCS")); + } + if (telephone.isPreferred) { + telElement.addNode(new XMLElement("PREF")); + } + queryElement.addNode(telElement); + } + + if (vcard.getAddresses() != null) for (final VCard.Address address : vcard.getAddresses()) { + XMLElement adrElement = new XMLElement("ADR"); + if (!address.poBox.isEmpty()) { + adrElement.addNode(new XMLElement("POBOX", "", address.poBox)); + } + if (!address.addressExtension.isEmpty()) { + adrElement.addNode(new XMLElement("EXTADD", "", address.addressExtension)); + } + if (!address.street.isEmpty()) { + adrElement.addNode(new XMLElement("STREET", "", address.street)); + } + if (!address.locality.isEmpty()) { + adrElement.addNode(new XMLElement("LOCALITY", "", address.locality)); + } + if (!address.region.isEmpty()) { + adrElement.addNode(new XMLElement("REGION", "", address.region)); + } + if (!address.postalCode.isEmpty()) { + adrElement.addNode(new XMLElement("PCODE", "", address.postalCode)); + } + if (!address.country.isEmpty()) { + adrElement.addNode(new XMLElement("CTRY", "", address.country)); + } + + if (address.isHome) { + adrElement.addNode(new XMLElement("HOME")); + } + if (address.isWork) { + adrElement.addNode(new XMLElement("WORK")); + } + if (address.isPostal) { + adrElement.addNode(new XMLElement("POSTAL")); + } + if (address.isParcel) { + adrElement.addNode(new XMLElement("PARCEL")); + } + if (address.deliveryType == VCard.DeliveryType.DomesticDelivery) { + adrElement.addNode(new XMLElement("DOM")); + } + if (address.deliveryType == VCard.DeliveryType.InternationalDelivery) { + adrElement.addNode(new XMLElement("INTL")); + } + if (address.isPreferred) { + adrElement.addNode(new XMLElement("PREF")); + } + queryElement.addNode(adrElement); + } + + if (vcard.getAddressLabels() != null) for (final VCard.AddressLabel addressLabel : vcard.getAddressLabels()) { + XMLElement labelElement = new XMLElement("LABEL"); + + for (final String line : addressLabel.lines) { + labelElement.addNode(new XMLElement("LINE", "", line)); + } + + if (addressLabel.isHome) { + labelElement.addNode(new XMLElement("HOME")); + } + if (addressLabel.isWork) { + labelElement.addNode(new XMLElement("WORK")); + } + if (addressLabel.isPostal) { + labelElement.addNode(new XMLElement("POSTAL")); + } + if (addressLabel.isParcel) { + labelElement.addNode(new XMLElement("PARCEL")); + } + if (addressLabel.deliveryType == VCard.DeliveryType.DomesticDelivery) { + labelElement.addNode(new XMLElement("DOM")); + } + if (addressLabel.deliveryType == VCard.DeliveryType.InternationalDelivery) { + labelElement.addNode(new XMLElement("INTL")); + } + if (addressLabel.isPreferred) { + labelElement.addNode(new XMLElement("PREF")); + } + queryElement.addNode(labelElement); + } + + if (vcard.getJIDs() != null) for (final JID jid : vcard.getJIDs()) { + queryElement.addNode(new XMLElement("JID", "", jid.toString())); + } + + if (vcard.getDescription() != null && !vcard.getDescription().isEmpty()) { + queryElement.addNode(new XMLElement("DESC", "", vcard.getDescription())); + } + + if (vcard.getOrganizations() != null) for (final VCard.Organization org : vcard.getOrganizations()) { + XMLElement orgElement = new XMLElement("ORG"); + if (!org.name.isEmpty()) { + orgElement.addNode(new XMLElement("ORGNAME", "", org.name)); + } + if (!org.units.isEmpty()) { + for (final String unit : org.units) { + orgElement.addNode(new XMLElement("ORGUNIT", "", unit)); + } + } + queryElement.addNode(orgElement); + } + + if (vcard.getTitles() != null) for (final String title : vcard.getTitles()) { + queryElement.addNode(new XMLElement("TITLE", "", title)); + } + + if (vcard.getRoles() != null) for (final String role : vcard.getRoles()) { + queryElement.addNode(new XMLElement("ROLE", "", role)); + } + + if (vcard.getURLs() != null) for (final String url : vcard.getURLs()) { + queryElement.addNode(new XMLElement("URL", "", url)); + } + + if (vcard.getUnknownContent() != null && !vcard.getUnknownContent().isEmpty()) { + queryElement.addNode(new XMLRawTextNode(vcard.getUnknownContent())); + } + return queryElement.serialize(); + } + +} |