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			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		Field typeFiled = this.getFieldByName("FORM_TYPE");
84		return typeFiled == null ? "" : typeFiled.getValue();
85	}
86
87	public String getTitle() {
88		return findChildContent("title");
89	}
90}