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 }
41 field.setValue(value);
42 }
43
44 public void put(String name, Collection<String> values) {
45 Field field = getFieldByName(name);
46 if (field == null) {
47 field = new Field(name);
48 }
49 field.setValues(values);
50 }
51
52 public void submit() {
53 this.setAttribute("type","submit");
54 removeNonFieldChildren();
55 for(Field field : getFields()) {
56 field.removeNonValueChildren();
57 }
58 }
59
60 private void removeNonFieldChildren() {
61 for(Iterator<Element> iterator = this.children.iterator(); iterator.hasNext();) {
62 Element element = iterator.next();
63 if (!element.getName().equals("field")) {
64 iterator.remove();
65 }
66 }
67 }
68
69 public static Data parse(Element element) {
70 Data data = new Data();
71 data.setAttributes(element.getAttributes());
72 data.setChildren(element.getChildren());
73 return data;
74 }
75}