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
22 import java.util.ArrayList;
23 import java.util.EnumMap;
24 import java.util.Iterator;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.concurrent.atomic.AtomicInteger;
28
29
30
31
32 public class MetisViewerManagerImpl
33 implements MetisViewerManager {
34
35
36
37 private final OceanusEventManager<MetisViewerEvent> theEventManager;
38
39
40
41
42 private final List<MetisViewerEntry> theRootList;
43
44
45
46
47 private final Map<MetisViewerStandardEntry, MetisViewerEntry> theStdEntries;
48
49
50
51
52 private static final AtomicInteger NEXT_ENTRY_ID = new AtomicInteger(1);
53
54
55
56
57 private MetisViewerEntry theFocused;
58
59
60
61
62 public MetisViewerManagerImpl() {
63
64 theEventManager = new OceanusEventManager<>();
65
66
67 theRootList = new ArrayList<>();
68
69
70 theStdEntries = new EnumMap<>(MetisViewerStandardEntry.class);
71 createStandardEntries();
72 }
73
74 @Override
75 public OceanusEventRegistrar<MetisViewerEvent> getEventRegistrar() {
76 return theEventManager.getEventRegistrar();
77 }
78
79 @Override
80 public Iterator<MetisViewerEntry> rootIterator() {
81 return theRootList.iterator();
82 }
83
84 @Override
85 public MetisViewerEntry getFocus() {
86 return theFocused;
87 }
88
89 @Override
90 public void setFocus(final MetisViewerEntry pEntry) {
91
92 if (!pEntry.equals(theFocused)) {
93
94 theFocused = pEntry;
95 fireEvent(MetisViewerEvent.FOCUS, pEntry);
96 }
97 }
98
99 @Override
100 public void fireEvent(final MetisViewerEvent pEventId,
101 final Object pValue) {
102 theEventManager.fireEvent(pEventId, pValue);
103 }
104
105 @Override
106 public int getNextId() {
107 return NEXT_ENTRY_ID.getAndIncrement();
108 }
109
110 @Override
111 public MetisViewerEntry newEntry(final String pName) {
112
113 final MetisViewerEntry myEntry = new MetisViewerEntryImpl(this, null, pName);
114 theRootList.add(myEntry);
115 fireEvent(MetisViewerEvent.ENTRY, myEntry);
116 return myEntry;
117 }
118
119 @Override
120 public MetisViewerEntry newEntry(final MetisViewerEntry pParent,
121 final String pName) {
122
123 final MetisViewerEntry myEntry = new MetisViewerEntryImpl(this, pParent, pName);
124 fireEvent(MetisViewerEvent.ENTRY, myEntry);
125 return myEntry;
126 }
127
128
129
130
131 private void createStandardEntries() {
132
133 for (MetisViewerStandardEntry myId : MetisViewerStandardEntry.values()) {
134
135 final MetisViewerEntry myEntry = newEntry(myId.toString());
136 myEntry.setVisible(false);
137 theStdEntries.put(myId, myEntry);
138 }
139 }
140
141 @Override
142 public MetisViewerEntry getStandardEntry(final MetisViewerStandardEntry pEntry) {
143 final MetisViewerEntry myEntry = theStdEntries.get(pEntry);
144 myEntry.setVisible(true);
145 return myEntry;
146 }
147 }