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