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 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}