aboutsummaryrefslogtreecommitdiffstats
path: root/src/de/gultsch/chat/xml/Tag.java
blob: 275229cf4c35ab47de79e38455e4815962daac2f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package de.gultsch.chat.xml;

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;

public class Tag {
	public static final int NO = -1;
	public static final int START = 0;
	public static final int END = 1;
	public static final int EMPTY = 2;
	
	protected int type;
	protected String name;
	protected Hashtable<String, String> attributes = new Hashtable<String, String>();
	
	protected Tag(int type, String name) {
		this.type = type;
		this.name = name;
	}


	public static Tag no(String text) {
		return new Tag(NO,text);
	}
	
	public static Tag start(String name) {
		return new Tag(START,name);
	}
	
	public static Tag end(String name) {
		return new Tag(END,name);
	}
	
	public static Tag empty(String name) {
		return new Tag(EMPTY,name);
	}
	
	public String getName() {
		return name;
	}
	
	public String getAttribute(String attrName) {
		return this.attributes.get(attrName);
	}
	
	public Tag setAttribute(String attrName, String attrValue) {
		this.attributes.put(attrName, attrValue);
		return this;
	}
	
	public Tag setAtttributes(Hashtable<String, String> attributes) {
		this.attributes = attributes;
		return this;
	}
	
	public boolean isStart(String needle) {
		return (this.type == START) && (this.name.equals(needle));
	}
	
	public boolean isEnd(String needle) {
		return (this.type == END) && (this.name.equals(needle));
	}
	
	public boolean isNo() {
		return (this.type == NO);
	}
	
	public String toString() {
		StringBuilder tagOutput = new StringBuilder();
		tagOutput.append('<');
		if (type==END) {
			tagOutput.append('/');
		}
		tagOutput.append(name);
		if(type!=END) {
			Set<Entry<String, String>> attributeSet = attributes.entrySet();
			Iterator<Entry<String, String>> it = attributeSet.iterator();
			while(it.hasNext()) {
				Entry<String,String> entry = it.next();
				tagOutput.append(' ');
				tagOutput.append(entry.getKey());
				tagOutput.append("=\"");
				tagOutput.append(entry.getValue());
				tagOutput.append('"');
			}
		}
		if (type==EMPTY) {
			tagOutput.append('/');
		}
		tagOutput.append('>');
		return tagOutput.toString();
	}

	public Hashtable<String, String> getAttributes() {
		return this.attributes;
	}
}