1package eu.siacs.conversations.xmpp.forms;
2
3import java.util.ArrayList;
4import java.util.Collection;
5import java.util.Iterator;
6import java.util.List;
7
8import eu.siacs.conversations.xml.Element;
9
10public class Data extends Element {
11
12 public static final String FORM_TYPE = "FORM_TYPE";
13
14 public Data() {
15 super("x");
16 this.setAttribute("xmlns","jabber:x:data");
17 }
18
19 public List<Field> getFields() {
20 ArrayList<Field> fields = new ArrayList<Field>();
21 for(Element child : getChildren()) {
22 if (child.getName().equals("field")
23 && !FORM_TYPE.equals(child.getAttribute("var"))) {
24 fields.add(Field.parse(child));
25 }
26 }
27 return fields;
28 }
29
30 public Field getFieldByName(String needle) {
31 for(Element child : getChildren()) {
32 if (child.getName().equals("field")
33 && needle.equals(child.getAttribute("var"))) {
34 return Field.parse(child);
35 }
36 }
37 return null;
38 }
39
40 public void put(String name, String value) {
41 Field field = getFieldByName(name);
42 if (field == null) {
43 field = new Field(name);
44 this.addChild(field);
45 }
46 field.setValue(value);
47 }
48
49 public void put(String name, Collection<String> values) {
50 Field field = getFieldByName(name);
51 if (field == null) {
52 field = new Field(name);
53 this.addChild(field);
54 }
55 field.setValues(values);
56 }
57
58 public void submit() {
59 this.setAttribute("type","submit");
60 removeUnnecessaryChildren();
61 for(Field field : getFields()) {
62 field.removeNonValueChildren();
63 }
64 }
65
66 private void removeUnnecessaryChildren() {
67 for(Iterator<Element> iterator = this.children.iterator(); iterator.hasNext();) {
68 Element element = iterator.next();
69 if (!element.getName().equals("field") && !element.getName().equals("title")) {
70 iterator.remove();
71 }
72 }
73 }
74
75 public static Data parse(Element element) {
76 Data data = new Data();
77 data.setAttributes(element.getAttributes());
78 data.setChildren(element.getChildren());
79 return data;
80 }
81
82 public void setFormType(String formType) {
83 this.put(FORM_TYPE, formType);
84 }
85
86 public String getFormType() {
87 String type = getValue(FORM_TYPE);
88 return type == null ? "" : type;
89 }
90
91 public String getValue(String name) {
92 Field field = this.getFieldByName(name);
93 return field == null ? null : field.getValue();
94 }
95
96 public String getTitle() {
97 return findChildContent("title");
98 }
99}