diff options
author | Kevin Smith <git@kismith.co.uk> | 2011-07-01 09:19:49 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2011-07-01 09:19:49 (GMT) |
commit | 2da71a8a85486a494343f1662d64fb5ae5a2a44e (patch) | |
tree | 23992f9f2a00bac23b345e5c2cc9c1194efc25be /src/com/isode/stroke/serializer/payloadserializers | |
download | stroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.zip stroke-2da71a8a85486a494343f1662d64fb5ae5a2a44e.tar.bz2 |
Initial import
Diffstat (limited to 'src/com/isode/stroke/serializer/payloadserializers')
10 files changed, 434 insertions, 0 deletions
diff --git a/src/com/isode/stroke/serializer/payloadserializers/BodySerializer.java b/src/com/isode/stroke/serializer/payloadserializers/BodySerializer.java new file mode 100644 index 0000000..31037db --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/BodySerializer.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.Body; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLTextNode; + +/** + * Body to String. + */ +public class BodySerializer extends GenericPayloadSerializer<Body> { + + public BodySerializer() { + super(Body.class); + } + + @Override + protected String serializePayload(Body body) { + XMLTextNode textNode = new XMLTextNode(body.getText()); + return "<body>" + textNode.serialize() + "</body>"; + } +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/ErrorSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/ErrorSerializer.java new file mode 100644 index 0000000..9c34d53 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/ErrorSerializer.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.ErrorPayload; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLTextNode; + +class ErrorSerializer extends GenericPayloadSerializer<ErrorPayload> { + + public ErrorSerializer() { + super(ErrorPayload.class); + } + + @Override + protected String serializePayload(ErrorPayload error) { + String result = "<error type=\""; + switch (error.getType()) { + case Continue: result += "continue"; break; + case Modify: result += "modify"; break; + case Auth: result += "auth"; break; + case Wait: result += "wait"; break; + default: result += "cancel"; break; + } + result += "\">"; + + String conditionElement; + switch (error.getCondition()) { + case BadRequest: conditionElement = "bad-request"; break; + case Conflict: conditionElement = "conflict"; break; + case FeatureNotImplemented: conditionElement = "feature-not-implemented"; break; + case Forbidden: conditionElement = "forbidden"; break; + case Gone: conditionElement = "gone"; break; + case InternalServerError: conditionElement = "internal-server-error"; break; + case ItemNotFound: conditionElement = "item-not-found"; break; + case JIDMalformed: conditionElement = "jid-malformed"; break; + case NotAcceptable: conditionElement = "not-acceptable"; break; + case NotAllowed: conditionElement = "not-allowed"; break; + case NotAuthorized: conditionElement = "not-authorized"; break; + case PaymentRequired: conditionElement = "payment-required"; break; + case RecipientUnavailable: conditionElement = "recipient-unavailable"; break; + case Redirect: conditionElement = "redirect"; break; + case RegistrationRequired: conditionElement = "registration-required"; break; + case RemoteServerNotFound: conditionElement = "remote-server-not-found"; break; + case RemoteServerTimeout: conditionElement = "remote-server-timeout"; break; + case ResourceConstraint: conditionElement = "resource-constraint"; break; + case ServiceUnavailable: conditionElement = "service-unavailable"; break; + case SubscriptionRequired: conditionElement = "subscription-required"; break; + case UnexpectedRequest: conditionElement = "unexpected-request"; break; + default: conditionElement = "undefined-condition"; break; + } + result += "<" + conditionElement + " xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/>"; + + if (error.getText().length() != 0) { + XMLTextNode textNode = new XMLTextNode(error.getText()); + result += "<text xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\">" + textNode.serialize() + "</text>"; + } + + result += "</error>"; + return result; + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java new file mode 100644 index 0000000..52de35b --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/FullPayloadSerializerCollection.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.serializer.PayloadSerializerCollection; + +public class FullPayloadSerializerCollection extends PayloadSerializerCollection { + + public FullPayloadSerializerCollection() { + /*FIXME: Implement what's needed. */ + //addSerializer(new IBBSerializer()); + addSerializer(new BodySerializer()); + //addSerializer(new SubjectSerializer()); + //addSerializer(new ChatStateSerializer()); + //addSerializer(new PrioritySerializer()); + addSerializer(new ErrorSerializer()); + addSerializer(new RosterSerializer()); + //addSerializer(new MUCPayloadSerializer()); + //addSerializer(new MUCUserPayloadSerializer()); + //addSerializer(new MUCOwnerPayloadSerializer(this)); + addSerializer(new SoftwareVersionSerializer()); + //addSerializer(new StatusSerializer()); + //addSerializer(new StatusShowSerializer()); + //addSerializer(new DiscoInfoSerializer()); + //addSerializer(new DiscoItemsSerializer()); + //addSerializer(new CapsInfoSerializer()); + addSerializer(new ResourceBindSerializer()); + addSerializer(new StartSessionSerializer()); + //addSerializer(new SecurityLabelSerializer()); + //addSerializer(new SecurityLabelsCatalogSerializer()); + //addSerializer(new StreamInitiationSerializer()); + //addSerializer(new BytestreamsSerializer()); + //addSerializer(new VCardSerializer()); + //addSerializer(new VCardUpdateSerializer()); + addSerializer(new RawXMLPayloadSerializer()); + //addSerializer(new StorageSerializer()); + //addSerializer(new DelaySerializer()); + //addSerializer(new FormSerializer()); + //addSerializer(new PrivateStorageSerializer(this)); + //addSerializer(new CommandSerializer()); + //addSerializer(new NicknameSerializer()); + addSerializer(new SearchPayloadSerializer()); + addSerializer(new LastSerializer()); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/LastSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/LastSerializer.java new file mode 100644 index 0000000..e78a724 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/LastSerializer.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2011 Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2011 Kevin Smith + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.Last; +import com.isode.stroke.serializer.GenericPayloadSerializer; + +public class LastSerializer extends GenericPayloadSerializer<Last> { + + public LastSerializer() { + super(Last.class); + } + + @Override + protected String serializePayload(Last last) { + return "<query xmlns='jabber:iq:last' seconds='" + Integer.toString(last.getSeconds()) + "'/>"; + } +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java new file mode 100644 index 0000000..4128537 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/RawXMLPayloadSerializer.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.RawXMLPayload; +import com.isode.stroke.serializer.GenericPayloadSerializer; + +class RawXMLPayloadSerializer extends GenericPayloadSerializer<RawXMLPayload> { + + public RawXMLPayloadSerializer() { + super(RawXMLPayloadSerializer.class); + } + + @Override + protected String serializePayload(RawXMLPayload payload) { + return payload.getRawXML(); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/ResourceBindSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/ResourceBindSerializer.java new file mode 100644 index 0000000..a33627b --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/ResourceBindSerializer.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.ResourceBind; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLTextNode; + +class ResourceBindSerializer extends GenericPayloadSerializer<ResourceBind> { + + public ResourceBindSerializer() { + super(ResourceBind.class); + } + + @Override + protected String serializePayload(ResourceBind resourceBind) { + XMLElement bindElement = new XMLElement("bind", "urn:ietf:params:xml:ns:xmpp-bind"); + if (resourceBind.getJID().isValid()) { + XMLElement jidNode = new XMLElement("jid"); + jidNode.addNode(new XMLTextNode(resourceBind.getJID().toString())); + bindElement.addNode(jidNode); + } + else if (resourceBind.getResource().length() != 0) { + XMLElement resourceNode = new XMLElement("resource"); + resourceNode.addNode(new XMLTextNode(resourceBind.getResource())); + bindElement.addNode(resourceNode); + } + return bindElement.serialize(); + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/RosterSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/RosterSerializer.java new file mode 100644 index 0000000..08a4b8e --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/RosterSerializer.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.RosterItemPayload; +import com.isode.stroke.elements.RosterPayload; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLTextNode; + +/** + * Roster to string. + */ +public class RosterSerializer extends GenericPayloadSerializer<RosterPayload> { + + public RosterSerializer() { + super(RosterPayload.class); + } + + @Override + protected String serializePayload(RosterPayload roster) { + XMLElement queryElement = new XMLElement("query", "jabber:iq:roster"); + for (RosterItemPayload item : roster.getItems()) { + XMLElement itemElement = new XMLElement("item"); + itemElement.setAttribute("jid", item.getJID().toString()); + if (item.getName() != null) { + itemElement.setAttribute("name", item.getName()); + } + + if (item.getSubscription() != null) { + switch (item.getSubscription()) { + case To: itemElement.setAttribute("subscription", "to"); break; + case From: itemElement.setAttribute("subscription", "from"); break; + case Both: itemElement.setAttribute("subscription", "both"); break; + case Remove: itemElement.setAttribute("subscription", "remove"); break; + case None: itemElement.setAttribute("subscription", "none"); break; + } + } + + if (item.getSubscriptionRequested()) { + itemElement.setAttribute("ask", "subscribe"); + } + + for (String group : item.getGroups()) { + XMLElement groupElement = new XMLElement("group"); + groupElement.addNode(new XMLTextNode(group)); + itemElement.addNode(groupElement); + } + + queryElement.addNode(itemElement); + } + + return queryElement.serialize(); + + + + } +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/SearchPayloadSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/SearchPayloadSerializer.java new file mode 100644 index 0000000..6928c97 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/SearchPayloadSerializer.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.SearchPayload; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; +import com.isode.stroke.serializer.xml.XMLTextNode; + +/** + * SearchPayload to String. + */ +public class SearchPayloadSerializer extends GenericPayloadSerializer<SearchPayload> { + + public SearchPayloadSerializer() { + super(SearchPayload.class); + } + + @Override + protected String serializePayload(SearchPayload searchPayload) { + XMLElement searchElement = new XMLElement("query", "jabber:iq:search"); + + if (searchPayload.getInstructions() != null) { + searchElement.addNode(new XMLElement("instructions", "", searchPayload.getInstructions())); + } + + if (searchPayload.getNick() != null) { + searchElement.addNode(new XMLElement("nick", "", searchPayload.getNick())); + } + + if (searchPayload.getFirst() != null) { + searchElement.addNode(new XMLElement("first", "", searchPayload.getFirst())); + } + + if (searchPayload.getLast() != null) { + searchElement.addNode(new XMLElement("last", "", searchPayload.getLast())); + } + + if (searchPayload.getEMail() != null) { + searchElement.addNode(new XMLElement("email", "", searchPayload.getEMail())); + } + + for (SearchPayload.Item item : searchPayload.getItems()) { + XMLElement itemElement = new XMLElement("item"); + itemElement.setAttribute("jid", item.jid.toString()); + itemElement.addNode(new XMLElement("first", "", item.first)); + itemElement.addNode(new XMLElement("last", "", item.last)); + itemElement.addNode(new XMLElement("nick", "", item.nick)); + itemElement.addNode(new XMLElement("email", "", item.email)); + + searchElement.addNode(itemElement); + } + + //if (Form::ref form = searchPayload->getForm()) { + // searchElement.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(FormSerializer().serialize(form)))); + //} /* Not ported yet. When the time comes, look at Swiften to check if it's changed. It will have. */ + + return searchElement.serialize(); + } +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/SoftwareVersionSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/SoftwareVersionSerializer.java new file mode 100644 index 0000000..cb2b653 --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/SoftwareVersionSerializer.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2010 Remko Tron¨on + * All rights reserved. + */ +/* + * Copyright (c) 2010 Isode Limited, London, England. + * All rights reserved. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.Version; +import com.isode.stroke.serializer.GenericPayloadSerializer; + +public class SoftwareVersionSerializer extends GenericPayloadSerializer<Version>{ + + public SoftwareVersionSerializer() { + super(Version.class); + } + + @Override + protected String serializePayload(Version version) { + StringBuilder result = new StringBuilder(); + result.append("<query xmlns=\"jabber:iq:version\">"); + if (version.getName() != null && version.getName().length() > 0) { + result.append("<name>").append(version.getName()).append("</name>"); + } + if (version.getVersion() != null && version.getVersion().length() > 0) { + result.append("<version>").append(version.getVersion()).append("</version>"); + } + if (version.getOS() != null && version.getOS().length() > 0) { + result.append("<os>").append(version.getOS()).append("</os>"); + } + result.append("</query>"); + return result.toString(); + + } + +} diff --git a/src/com/isode/stroke/serializer/payloadserializers/StartSessionSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/StartSessionSerializer.java new file mode 100644 index 0000000..8d36b8c --- /dev/null +++ b/src/com/isode/stroke/serializer/payloadserializers/StartSessionSerializer.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2010, Isode Limited, London, England. + * All rights reserved. + */ +/* + * Copyright (c) 2010, Remko Tron¨on. + * All rights reserved. + */ + +package com.isode.stroke.serializer.payloadserializers; + +import com.isode.stroke.elements.StartSession; +import com.isode.stroke.serializer.GenericPayloadSerializer; +import com.isode.stroke.serializer.xml.XMLElement; + +class StartSessionSerializer extends GenericPayloadSerializer<StartSession> { + + public StartSessionSerializer() { + super(StartSession.class); + } + + @Override + protected String serializePayload(StartSession payload) { + return new XMLElement("session", "urn:ietf:params:xml:ns:xmpp-session").serialize(); + } + +} |