diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java index 1b9b30bf3..df378978b 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/FormField.java @@ -113,7 +113,16 @@ public class FormField implements NamedElement { } } + /** + * Get a form field type from the given string. If string is null, then null will be returned. + * + * @param string the string to transform or null. + * @return the type or null. + */ public static Type fromString(String string) { + if (string == null) { + return null; + } switch (string) { case "boolean": return bool; diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java index 2b52a4404..e94775d00 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/provider/DataFormProvider.java @@ -94,12 +94,18 @@ public class DataFormProvider extends PacketExtensionProvider { private FormField parseField(XmlPullParser parser) throws XmlPullParserException, IOException { final int initialDepth = parser.getDepth(); - FormField formField = new FormField(parser.getAttributeValue("", "var")); - formField.setLabel(parser.getAttributeValue("", "label")); - String typeString = parser.getAttributeValue("", "type"); - if (typeString != null) { - formField.setType(FormField.Type.fromString(typeString)); + final String var = parser.getAttributeValue("", "var"); + final FormField.Type type = FormField.Type.fromString(parser.getAttributeValue("", "type")); + + final FormField formField; + if (type == FormField.Type.fixed) { + formField = new FormField(); + } else { + formField = new FormField(var); + formField.setType(type); } + formField.setLabel(parser.getAttributeValue("", "label")); + outerloop: while (true) { int eventType = parser.next(); switch (eventType) { diff --git a/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java b/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java index 0424dd7db..6e52115f6 100644 --- a/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java +++ b/smack-extensions/src/test/java/org/jivesoftware/smackx/xdata/packet/DataFormTest.java @@ -25,6 +25,7 @@ import org.jivesoftware.smack.SmackException; import org.jivesoftware.smack.packet.Element; import org.jivesoftware.smack.util.PacketParserUtils; import org.jivesoftware.smackx.xdata.FormField; +import org.jivesoftware.smackx.xdata.FormField.Type; import org.jivesoftware.smackx.xdata.provider.DataFormProvider; import org.jivesoftware.smackx.xdatalayout.packet.DataLayout; import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Fieldref; @@ -32,7 +33,6 @@ import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Section; import org.jivesoftware.smackx.xdatalayout.packet.DataLayout.Text; import org.jivesoftware.smackx.xdatavalidation.packet.ValidateElement; import org.jivesoftware.smackx.xdatavalidation.packet.ValidateElement.RangeValidateElement; - import org.junit.Test; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -48,6 +48,8 @@ public class DataFormTest { private static final String TEST_OUTPUT_2 = "InstructionTest1
SectionText
PageText
"; private static final String TEST_OUTPUT_3 = "InstructionTest1"; + DataFormProvider pr = new DataFormProvider(); + @Test public void test() throws XmlPullParserException, IOException, SmackException { //Build a Form @@ -61,8 +63,6 @@ public class DataFormTest { String output = df.toXML().toString(); assertEquals(TEST_OUTPUT_1, output); - DataFormProvider pr = new DataFormProvider(); - XmlPullParser parser = PacketParserUtils.getParserFor(output); df = pr.parse(parser); @@ -101,8 +101,6 @@ public class DataFormTest { String output = df.toXML().toString(); assertEquals(TEST_OUTPUT_2, output); - DataFormProvider pr = new DataFormProvider(); - XmlPullParser parser = PacketParserUtils.getParserFor(output); df = pr.parse(parser); @@ -137,8 +135,6 @@ public class DataFormTest { String output = df.toXML().toString(); assertEquals(TEST_OUTPUT_3, output); - DataFormProvider pr = new DataFormProvider(); - XmlPullParser parser = PacketParserUtils.getParserFor(output); df = pr.parse(parser); @@ -156,4 +152,11 @@ public class DataFormTest { output = df.toXML().toString(); assertEquals(TEST_OUTPUT_3, output); } + + @Test + public void testFixedField() throws XmlPullParserException, IOException, SmackException { + final String formWithFixedField = "InstructionTest1"; + DataForm df = pr.parse(PacketParserUtils.getParserFor(formWithFixedField)); + assertEquals(Type.fixed, df.getFields().get(0).getType()); + } }