diff options
author | Tim Robbings <tim.robbings@isode.com> | 2014-10-22 09:06:10 (GMT) |
---|---|---|
committer | Swift Review <review@swift.im> | 2014-10-28 10:00:39 (GMT) |
commit | 47cad5fd7883b8c7273ea11073643aa585b485c6 (patch) | |
tree | 1d7bc39fc1c847e0bbe88716257a9a0710ac8745 /src/com/isode/stroke/serializer | |
parent | 244aff320257d178bbe35d87b0e09d939bd2f893 (diff) | |
download | stroke-47cad5fd7883b8c7273ea11073643aa585b485c6.zip stroke-47cad5fd7883b8c7273ea11073643aa585b485c6.tar.bz2 |
Stroke FormField refactoring
Changes to catch up with Swiften changes to FormField in commit 00284e5,
also adds <reported/> and <item/> elements, added to Swiften in commit 83afa3d.
Changes include refactoring of the FormField class, changes to Form parser
and serializer classes and updates to JUnit tests.
Test-information:
Tested using updated JUnit tests, all tests complete successfully.
Change-Id: Ic91ad4a11a335fb3d2b2a2c4a1865f836e2af70b
Reviewer: Alex Clayton <alex.clayton@isode.com>
Reviewer: Gurmeen Bindra <gurmeen.bindra@isode.com>
Diffstat (limited to 'src/com/isode/stroke/serializer')
-rw-r--r-- | src/com/isode/stroke/serializer/payloadserializers/FormSerializer.java | 217 |
1 files changed, 106 insertions, 111 deletions
diff --git a/src/com/isode/stroke/serializer/payloadserializers/FormSerializer.java b/src/com/isode/stroke/serializer/payloadserializers/FormSerializer.java index 9ab5e37..23160c6 100644 --- a/src/com/isode/stroke/serializer/payloadserializers/FormSerializer.java +++ b/src/com/isode/stroke/serializer/payloadserializers/FormSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012 Isode Limited, London, England. + * Copyright (c) 2012-2014 Isode Limited, London, England. * All rights reserved. */ /* @@ -9,23 +9,9 @@ package com.isode.stroke.serializer.payloadserializers; -import java.util.List; - import com.isode.stroke.elements.Form; import com.isode.stroke.elements.FormField; -import com.isode.stroke.elements.FormField.BooleanFormField; -import com.isode.stroke.elements.FormField.FixedFormField; -import com.isode.stroke.elements.FormField.GenericFormField; -import com.isode.stroke.elements.FormField.HiddenFormField; -import com.isode.stroke.elements.FormField.JIDMultiFormField; -import com.isode.stroke.elements.FormField.JIDSingleFormField; -import com.isode.stroke.elements.FormField.ListMultiFormField; -import com.isode.stroke.elements.FormField.ListSingleFormField; -import com.isode.stroke.elements.FormField.Option; -import com.isode.stroke.elements.FormField.TextMultiFormField; -import com.isode.stroke.elements.FormField.TextPrivateFormField; -import com.isode.stroke.elements.FormField.TextSingleFormField; -import com.isode.stroke.jid.JID; +import com.isode.stroke.elements.FormItem; import com.isode.stroke.serializer.GenericPayloadSerializer; import com.isode.stroke.serializer.xml.XMLElement; import com.isode.stroke.serializer.xml.XMLTextNode; @@ -34,9 +20,7 @@ import com.isode.stroke.serializer.xml.XMLTextNode; * Serializer for {@link Form} element. */ public class FormSerializer extends GenericPayloadSerializer<Form> { - /** - * Constructor - */ + public FormSerializer() { super(Form.class); } @@ -45,7 +29,7 @@ public class FormSerializer extends GenericPayloadSerializer<Form> { if (form == null) { throw new NullPointerException("'form' must not be null"); } - + XMLElement formElement = new XMLElement("x", "jabber:x:data"); String type = form.getType().getStringForm(); formElement.setAttribute(Form.FORM_ATTRIBUTE_TYPE, type); @@ -56,13 +40,35 @@ public class FormSerializer extends GenericPayloadSerializer<Form> { multiLineify(form.getInstructions(), Form.FORM_ELEMENT_INSTRUCTIONS, formElement); } + + // Add reported element + + if (!form.getReportedFields().isEmpty()) { + XMLElement reportedElement = new XMLElement("reported"); + for (FormField field : form.getReportedFields()) { + reportedElement.addNode(fieldToXML(field, true)); + } + formElement.addNode(reportedElement); + } + + // Add item elements + for (FormItem item : form.getItems()) { + XMLElement itemElement = new XMLElement("item"); + for (FormField ff : item.getItemFields()) { + itemElement.addNode(fieldToXML(ff, false)); + } + formElement.addNode(itemElement); + } + + // Add fields for (FormField field : form.getFields()) { - formElement.addNode(fieldToXML(field)); + formElement.addNode(fieldToXML(field, true)); } + return formElement.serialize(); } - - private XMLElement fieldToXML(FormField field) { + + private XMLElement fieldToXML(FormField field, boolean withTypeAttribute) { if (field == null) { throw new NullPointerException("'field' must not be null"); } @@ -86,87 +92,87 @@ public class FormSerializer extends GenericPayloadSerializer<Form> { descriptionElement.addNode(new XMLTextNode(field.getDescription())); fieldElement.addNode(descriptionElement); } - - // Set the value and type - String fieldType = ""; - if (field instanceof BooleanFormField) { - fieldType = FormField.FORM_FIELD_TYPE_BOOLEAN; - XMLElement valueElement = new XMLElement( - FormField.FORM_FIELD_ELEMENT_VALUE); - valueElement.addNode(XMLTextNode.create(((BooleanFormField) field) - .getValue() ? "1" : "0")); - fieldElement.addNode(valueElement); - } else if (field instanceof FixedFormField) { - fieldType = FormField.FORM_FIELD_TYPE_FIXED; - serializeValueAsString((FixedFormField) field, fieldElement); - } else if (field instanceof HiddenFormField) { - fieldType = FormField.FORM_FIELD_TYPE_HIDDEN; - serializeValueAsString((HiddenFormField) field, fieldElement); - } else if (field instanceof ListSingleFormField) { - fieldType = FormField.FORM_FIELD_TYPE_LIST_SINGLE; - serializeValueAsString((ListSingleFormField) field, fieldElement); - } else if (field instanceof TextPrivateFormField) { - fieldType = FormField.FORM_FIELD_TYPE_TEXT_PRIVATE; - serializeValueAsString((TextPrivateFormField) field, fieldElement); - } else if (field instanceof TextSingleFormField) { - fieldType = FormField.FORM_FIELD_TYPE_TEXT_SINGLE; - serializeValueAsString((TextSingleFormField) field, fieldElement); - } else if (field instanceof JIDMultiFormField) { - fieldType = FormField.FORM_FIELD_TYPE_JID_MULTI; - List<JID> jids = ((JIDMultiFormField) (field)).getValue(); - for (JID jid : jids) { - XMLElement valueElement = new XMLElement( - FormField.FORM_FIELD_ELEMENT_VALUE); - valueElement.addNode(XMLTextNode.create(jid.toString())); - fieldElement.addNode(valueElement); - } - } else if (field instanceof JIDSingleFormField) { - fieldType = FormField.FORM_FIELD_TYPE_JID_SINGLE; - XMLElement valueElement = new XMLElement( - FormField.FORM_FIELD_ELEMENT_VALUE); - JIDSingleFormField jidSingleFormField = (JIDSingleFormField) field; - valueElement.addNode(XMLTextNode.create(jidSingleFormField - .getValue().toString())); - fieldElement.addNode(valueElement); - } else if (field instanceof ListMultiFormField) { - fieldType = FormField.FORM_FIELD_TYPE_LIST_MULTI; - List<String> lines = ((ListMultiFormField) (field)).getValue(); - for (String line : lines) { - XMLElement valueElement = new XMLElement( - FormField.FORM_FIELD_ELEMENT_VALUE); - valueElement.addNode(XMLTextNode.create(line)); - fieldElement.addNode(valueElement); - } - } else if (field instanceof TextMultiFormField) { - fieldType = FormField.FORM_FIELD_TYPE_TEXT_MULTI; - multiLineify(((TextMultiFormField) field).getValue(), + + String fieldType = field.getType().getDescription(); + + if (!fieldType.isEmpty() && withTypeAttribute) { + fieldElement.setAttribute("type", fieldType); + } + + if (fieldType.equals("boolean")) { + XMLElement valueElement = new XMLElement("value"); + if (field.getBoolValue() == true) { + valueElement.addNode(XMLTextNode.create("1")); + } else { + valueElement.addNode(XMLTextNode.create("0")); + } + fieldElement.addNode(valueElement); + } + + else if (fieldType.equals("jid-single")) { + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(field.getJIDSingleValue().toString())); + fieldElement.addNode(valueElement); + } + + else if (fieldType.equals("jid-multi")) { + for (String jid : field.getValues()){ + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(jid)); + fieldElement.addNode(valueElement); + } + } + + else if (fieldType.equals("text-private")) { + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(field.getTextPrivateValue())); + fieldElement.addNode(valueElement); + } + + else if (fieldType.equals("fixed")) { + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(field.getFixedValue())); + fieldElement.addNode(valueElement); + } + + else if (fieldType.equals("text-single") || + fieldType.equals("unknown")) { + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(field.getTextSingleValue())); + fieldElement.addNode(valueElement); + } + + else if (fieldType.equals("text-multi")) { + multiLineify(field.getTextMultiValue(), FormField.FORM_FIELD_ELEMENT_VALUE, fieldElement); - } else { - assert (false); + } + + else if (fieldType.equals("list-multi") || + fieldType.equals("list-single")) { + for (String s : field.getValues()) { + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(s)); + fieldElement.addNode(valueElement); + } } - - if (!fieldType.isEmpty()) { - fieldElement.setAttribute(FormField.FORM_FIELD_ATTRIBUTE_TYPE, - fieldType); + + else { // Unknown type + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(field.getValues().get(0))); + fieldElement.addNode(valueElement); } - - for (Option option : field.getOptions()) { - XMLElement optionElement = new XMLElement( - FormField.FORM_FIELD_ELEMENT_OPTION); - if (!option.label.isEmpty()) { - optionElement.setAttribute( - FormField.FORM_FIELD_ATTRIBUTE_OPTION_LABEL, - option.label); - } - - XMLElement valueElement = new XMLElement( - FormField.FORM_FIELD_ELEMENT_OPTION_VALUE); - valueElement.addNode(XMLTextNode.create(option.value)); - optionElement.addNode(valueElement); - - fieldElement.addNode(optionElement); + + for (FormField.Option option : field.getOptions()) { + XMLElement optionElement = new XMLElement("option"); + if (!option.label_.isEmpty()) { + optionElement.setAttribute("label", option.label_); + } + XMLElement valueElement = new XMLElement("value"); + valueElement.addNode(XMLTextNode.create(option.value_)); + optionElement.addNode(valueElement); + fieldElement.addNode(optionElement); } - + return fieldElement; } @@ -188,17 +194,6 @@ public class FormSerializer extends GenericPayloadSerializer<Form> { } } - private static void serializeValueAsString(GenericFormField<String> field, - XMLElement parent) { - String value = field.getValue(); - // FIXME with the proper fix after Swiften is fixed: if (!value.isEmpty()) { - XMLElement valueElement = new XMLElement( - FormField.FORM_FIELD_ELEMENT_VALUE); - valueElement.addNode(XMLTextNode.create(value)); - parent.addNode(valueElement); - // } - } - @Override public String toString() { return FormSerializer.class.getSimpleName(); |