Data.java

 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}