1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package io.github.tonywasher.joceanus.metis.viewer;
18
19 import io.github.tonywasher.joceanus.oceanus.event.OceanusEventManager;
20 import io.github.tonywasher.joceanus.oceanus.event.OceanusEventRegistrar;
21 import io.github.tonywasher.joceanus.oceanus.event.OceanusEventRegistrar.OceanusEventProvider;
22
23 import java.util.ArrayList;
24 import java.util.EnumMap;
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.concurrent.atomic.AtomicInteger;
29
30
31
32
33 public class MetisViewerManager
34 implements OceanusEventProvider<MetisViewerEvent> {
35
36
37
38 private final OceanusEventManager<MetisViewerEvent> theEventManager;
39
40
41
42
43 private final List<MetisViewerEntry> theRootList;
44
45
46
47
48 private final Map<MetisViewerStandardEntry, MetisViewerEntry> theStdEntries;
49
50
51
52
53 private static final AtomicInteger NEXT_ENTRY_ID = new AtomicInteger(1);
54
55
56
57
58 private MetisViewerEntry theFocused;
59
60
61
62
63 public MetisViewerManager() {
64
65 theEventManager = new OceanusEventManager<>();
66
67
68 theRootList = new ArrayList<>();
69
70
71 theStdEntries = new EnumMap<>(MetisViewerStandardEntry.class);
72 createStandardEntries();
73 }
74
75 @Override
76 public OceanusEventRegistrar<MetisViewerEvent> getEventRegistrar() {
77 return theEventManager.getEventRegistrar();
78 }
79
80
81
82
83
84
85 public Iterator<MetisViewerEntry> rootIterator() {
86 return theRootList.iterator();
87 }
88
89
90
91
92
93
94 protected MetisViewerEntry getFocus() {
95 return theFocused;
96 }
97
98
99
100
101
102
103 protected void setFocus(final MetisViewerEntry pEntry) {
104
105 if (!pEntry.equals(theFocused)) {
106
107 theFocused = pEntry;
108 fireEvent(MetisViewerEvent.FOCUS, pEntry);
109 }
110 }
111
112
113
114
115
116
117
118 protected void fireEvent(final MetisViewerEvent pEventId,
119 final Object pValue) {
120 theEventManager.fireEvent(pEventId, pValue);
121 }
122
123
124
125
126
127
128 protected int getNextId() {
129 return NEXT_ENTRY_ID.getAndIncrement();
130 }
131
132
133
134
135
136
137
138 public MetisViewerEntry newEntry(final String pName) {
139
140 final MetisViewerEntry myEntry = new MetisViewerEntry(this, null, pName);
141 theRootList.add(myEntry);
142 fireEvent(MetisViewerEvent.ENTRY, myEntry);
143 return myEntry;
144 }
145
146
147
148
149
150
151
152
153 public MetisViewerEntry newEntry(final MetisViewerEntry pParent,
154 final String pName) {
155
156 final MetisViewerEntry myEntry = new MetisViewerEntry(this, pParent, pName);
157 fireEvent(MetisViewerEvent.ENTRY, myEntry);
158 return myEntry;
159 }
160
161
162
163
164 private void createStandardEntries() {
165
166 for (MetisViewerStandardEntry myId : MetisViewerStandardEntry.values()) {
167
168 final MetisViewerEntry myEntry = newEntry(myId.toString());
169 myEntry.setVisible(false);
170 theStdEntries.put(myId, myEntry);
171 }
172 }
173
174
175
176
177
178
179
180 public MetisViewerEntry getStandardEntry(final MetisViewerStandardEntry pEntry) {
181 final MetisViewerEntry myEntry = theStdEntries.get(pEntry);
182 myEntry.setVisible(true);
183 return myEntry;
184 }
185 }