1 package cz.cuni.amis.pogamut.ut2004.bot.impl;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import cz.cuni.amis.pogamut.ut2004.communication.messages.gbcommands.Configuration;
10 import cz.cuni.amis.utils.SafeEquals;
11
12
13
14
15
16 public class UT2004BotName {
17
18 private UT2004Bot bot;
19
20 private String base;
21
22 private Map<String, String> infos = new HashMap<String, String>();
23
24 private String nullKeyValue = null;
25
26 public UT2004BotName(UT2004Bot bot, String base) {
27 this.bot = bot;
28 this.base = base;
29 }
30
31 public void setNameBase(String base) {
32 this.base = base;
33 updateName();
34 }
35
36
37
38
39
40 public void setTag(String tag) {
41 if (tag == null) deleteTag();
42 else setInfo(null, tag);
43 }
44
45
46
47
48 public void deleteTag() {
49 deleteInfo(null);
50 }
51
52
53
54
55
56 public void setInfo(String value) {
57 setInfo(null, value);
58 }
59
60
61
62
63
64 public void setInfo(String key, String value) {
65 if (value == null) {
66 deleteInfo(key);
67 return;
68 }
69 if (key == null) {
70 if (SafeEquals.equals(value, nullKeyValue)) return;
71 nullKeyValue = value;
72 } else {
73 String oldValue = infos.get(key);
74 if (SafeEquals.equals(oldValue, value)) return;
75 infos.put(key, value);
76 }
77 updateName();
78 }
79
80
81
82
83 public void deleteInfo(String key) {
84 if (key == null) {
85 if (nullKeyValue == null) return;
86 nullKeyValue = null;
87 updateName();
88 } else {
89 if (infos.remove(key) != null) {
90 updateName();
91 }
92 }
93 }
94
95 public void updateName() {
96 List<String> keys = new ArrayList<String>(infos.keySet());
97 Collections.sort(keys);
98 StringBuffer name = new StringBuffer();
99 name.append(base);
100 if (nullKeyValue != null) {
101 name.append(" [");
102 name.append(nullKeyValue);
103 name.append("]");
104 }
105 for (String key : keys) {
106 String value = infos.get(key);
107 name.append(" [");
108 name.append(key);
109 if (value != null) {
110 name.append(": ");
111 name.append(value);
112 }
113 name.append("]");
114 }
115 bot.getAct().act(new Configuration().setName(name.toString()));
116 }
117
118 }