Browse Source

FrameContainer parents are Optional.

Change-Id: Ibaf13d210cd01e73adf08bac359244b14faef088
Depends-On: Ief9fccad45d654ffaee9d7a124ebc39f7af56166
Reviewed-on: http://gerrit.dmdirc.com/3470
Automatic-Compile: DMDirc Build Manager
Reviewed-by: Greg Holmes <greg@dmdirc.com>
pull/1/head
Chris Smith 10 years ago
parent
commit
1ec3b56141

+ 3
- 1
src/com/dmdirc/CustomWindow.java View File

27
 import com.dmdirc.ui.core.components.WindowComponent;
27
 import com.dmdirc.ui.core.components.WindowComponent;
28
 import com.dmdirc.util.URLBuilder;
28
 import com.dmdirc.util.URLBuilder;
29
 
29
 
30
+import com.google.common.base.Optional;
30
 import com.google.common.eventbus.EventBus;
31
 import com.google.common.eventbus.EventBus;
31
 
32
 
32
 import java.util.Arrays;
33
 import java.util.Arrays;
76
 
77
 
77
     @Override
78
     @Override
78
     public Connection getConnection() {
79
     public Connection getConnection() {
79
-        return getParent() == null ? null : getParent().getConnection();
80
+        final Optional<FrameContainer> parent = getParent();
81
+        return parent.isPresent() ? parent.get().getConnection() : null;
80
     }
82
     }
81
 
83
 
82
 }
84
 }

+ 4
- 4
src/com/dmdirc/FrameContainer.java View File

74
     /** The children of this frame. */
74
     /** The children of this frame. */
75
     private final Collection<FrameContainer> children = new CopyOnWriteArrayList<>();
75
     private final Collection<FrameContainer> children = new CopyOnWriteArrayList<>();
76
     /** The parent of this frame. */
76
     /** The parent of this frame. */
77
-    private final FrameContainer parent;
77
+    private final Optional<FrameContainer> parent;
78
     /** The name of the icon being used for this container's frame. */
78
     /** The name of the icon being used for this container's frame. */
79
     private String icon;
79
     private String icon;
80
     /** The name of this container. */
80
     /** The name of this container. */
141
             final URLBuilder urlBuilder,
141
             final URLBuilder urlBuilder,
142
             final EventBus eventBus,
142
             final EventBus eventBus,
143
             final Collection<String> components) {
143
             final Collection<String> components) {
144
-        this.parent = parent;
144
+        this.parent = Optional.fromNullable(parent);
145
         this.configManager = config;
145
         this.configManager = config;
146
         this.name = name;
146
         this.name = name;
147
         this.title = title;
147
         this.title = title;
185
             final MessageSinkManager messageSinkManager,
185
             final MessageSinkManager messageSinkManager,
186
             final EventBus eventbus,
186
             final EventBus eventbus,
187
             final Collection<String> components) {
187
             final Collection<String> components) {
188
-        this.parent = parent;
188
+        this.parent = Optional.fromNullable(parent);
189
         this.configManager = config;
189
         this.configManager = config;
190
         this.name = name;
190
         this.name = name;
191
         this.title = title;
191
         this.title = title;
205
         return notification;
205
         return notification;
206
     }
206
     }
207
 
207
 
208
-    public FrameContainer getParent() {
208
+    public Optional<FrameContainer> getParent() {
209
         return parent;
209
         return parent;
210
     }
210
     }
211
 
211
 

+ 6
- 4
src/com/dmdirc/commandparser/commands/global/Echo.java View File

39
 import com.dmdirc.ui.WindowManager;
39
 import com.dmdirc.ui.WindowManager;
40
 import com.dmdirc.ui.input.AdditionalTabTargets;
40
 import com.dmdirc.ui.input.AdditionalTabTargets;
41
 
41
 
42
+import com.google.common.base.Optional;
43
+
42
 import java.util.ArrayList;
44
 import java.util.ArrayList;
43
 import java.util.Date;
45
 import java.util.Date;
44
 import java.util.List;
46
 import java.util.List;
99
 
101
 
100
         if (results.hasFlag(targetFlag)) {
102
         if (results.hasFlag(targetFlag)) {
101
             FrameContainer frame = null;
103
             FrameContainer frame = null;
102
-            FrameContainer target = origin;
104
+            Optional<FrameContainer> target = Optional.of(origin);
103
 
105
 
104
-            while (frame == null && target != null) {
105
-                frame = windowManager.findCustomWindow(target,
106
+            while (frame == null && target.isPresent()) {
107
+                frame = windowManager.findCustomWindow(target.get(),
106
                         results.getArgumentsAsString(targetFlag));
108
                         results.getArgumentsAsString(targetFlag));
107
-                target = target.getParent();
109
+                target = target.get().getParent();
108
             }
110
             }
109
 
111
 
110
             if (frame == null) {
112
             if (frame == null) {

+ 4
- 2
src/com/dmdirc/commandparser/commands/server/JoinChannelCommand.java View File

40
 import com.dmdirc.ui.messages.Styliser;
40
 import com.dmdirc.ui.messages.Styliser;
41
 import com.dmdirc.util.collections.MapList;
41
 import com.dmdirc.util.collections.MapList;
42
 
42
 
43
+import com.google.common.base.Optional;
43
 import com.google.common.eventbus.EventBus;
44
 import com.google.common.eventbus.EventBus;
44
 import com.google.common.eventbus.Subscribe;
45
 import com.google.common.eventbus.Subscribe;
45
 
46
 
173
         }
174
         }
174
 
175
 
175
         // Check the parent window
176
         // Check the parent window
176
-        if (checkParents && source.getParent() != null) {
177
-            results.addAll(checkSource(source.getParent(), true, false));
177
+        final Optional<FrameContainer> parent = source.getParent();
178
+        if (checkParents && parent.isPresent()) {
179
+            results.addAll(checkSource(parent.get(), true, false));
178
         }
180
         }
179
 
181
 
180
         // Check the children window
182
         // Check the children window

+ 13
- 5
src/com/dmdirc/ui/WindowManager.java View File

29
 import com.dmdirc.interfaces.ui.FrameListener;
29
 import com.dmdirc.interfaces.ui.FrameListener;
30
 import com.dmdirc.util.collections.ListenerList;
30
 import com.dmdirc.util.collections.ListenerList;
31
 
31
 
32
+import com.google.common.base.Optional;
33
+
32
 import java.util.Collection;
34
 import java.util.Collection;
33
 import java.util.Collections;
35
 import java.util.Collections;
34
 import java.util.List;
36
 import java.util.List;
39
 
41
 
40
 import static com.google.common.base.Preconditions.checkArgument;
42
 import static com.google.common.base.Preconditions.checkArgument;
41
 import static com.google.common.base.Preconditions.checkNotNull;
43
 import static com.google.common.base.Preconditions.checkNotNull;
44
+import static com.google.common.base.Preconditions.checkState;
42
 
45
 
43
 /**
46
 /**
44
  * The WindowManager maintains a list of all open windows, and their parent/child relations.
47
  * The WindowManager maintains a list of all open windows, and their parent/child relations.
208
      * @return True if the target is in the hierarchy, false otherise
211
      * @return True if the target is in the hierarchy, false otherise
209
      */
212
      */
210
     protected boolean isInHierarchy(final FrameContainer target) {
213
     protected boolean isInHierarchy(final FrameContainer target) {
211
-        return target != null && (rootWindows.contains(target)
212
-                || isInHierarchy(target.getParent()));
214
+        if (rootWindows.contains(target)) {
215
+            return true;
216
+        }
217
+
218
+        final Optional<FrameContainer> parent = target.getParent();
219
+        return parent.isPresent() && isInHierarchy(parent.get());
213
     }
220
     }
214
 
221
 
215
     /**
222
     /**
237
             fireDeleteWindow(window);
244
             fireDeleteWindow(window);
238
             rootWindows.remove(window);
245
             rootWindows.remove(window);
239
         } else {
246
         } else {
240
-            final FrameContainer parent = window.getParent();
241
-            fireDeleteWindow(parent, window);
242
-            parent.removeChild(window);
247
+            final Optional<FrameContainer> parent = window.getParent();
248
+            checkState(parent.isPresent());
249
+            fireDeleteWindow(parent.get(), window);
250
+            parent.get().removeChild(window);
243
         }
251
         }
244
     }
252
     }
245
 
253
 

+ 18
- 7
test/com/dmdirc/ui/WindowManagerTest.java View File

25
 import com.dmdirc.FrameContainer;
25
 import com.dmdirc.FrameContainer;
26
 import com.dmdirc.interfaces.ui.FrameListener;
26
 import com.dmdirc.interfaces.ui.FrameListener;
27
 
27
 
28
+import com.google.common.base.Optional;
29
+
28
 import java.util.Arrays;
30
 import java.util.Arrays;
29
 import java.util.Collection;
31
 import java.util.Collection;
30
 
32
 
34
 import org.mockito.Mock;
36
 import org.mockito.Mock;
35
 import org.mockito.runners.MockitoJUnitRunner;
37
 import org.mockito.runners.MockitoJUnitRunner;
36
 
38
 
37
-import static org.junit.Assert.*;
38
-import static org.mockito.Mockito.*;
39
+import static org.junit.Assert.assertEquals;
40
+import static org.junit.Assert.assertNull;
41
+import static org.junit.Assert.assertTrue;
42
+import static org.mockito.Matchers.anyBoolean;
43
+import static org.mockito.Matchers.anyObject;
44
+import static org.mockito.Matchers.eq;
45
+import static org.mockito.Matchers.same;
46
+import static org.mockito.Mockito.mock;
47
+import static org.mockito.Mockito.never;
48
+import static org.mockito.Mockito.verify;
49
+import static org.mockito.Mockito.when;
39
 
50
 
40
 @RunWith(MockitoJUnitRunner.class)
51
 @RunWith(MockitoJUnitRunner.class)
41
 public class WindowManagerTest {
52
 public class WindowManagerTest {
90
         manager.addWindow(container, child);
101
         manager.addWindow(container, child);
91
         manager.addListener(frameListener);
102
         manager.addListener(frameListener);
92
 
103
 
93
-        when(child.getParent()).thenReturn(container);
104
+        when(child.getParent()).thenReturn(Optional.of(container));
94
 
105
 
95
         manager.removeWindow(child);
106
         manager.removeWindow(child);
96
 
107
 
148
     public void testRemoveWindowRootWindowWithChildren() {
159
     public void testRemoveWindowRootWindowWithChildren() {
149
         when(container.getChildren()).thenReturn(Arrays.asList(
160
         when(container.getChildren()).thenReturn(Arrays.asList(
150
                 new FrameContainer[]{child, }));
161
                 new FrameContainer[]{child, }));
151
-        when(child.getParent()).thenReturn(container);
162
+        when(child.getParent()).thenReturn(Optional.of(container));
152
 
163
 
153
         manager.addListener(frameListener);
164
         manager.addListener(frameListener);
154
         manager.addWindow(container);
165
         manager.addWindow(container);
162
     public void testRemoveChildWindowNoChildren() {
173
     public void testRemoveChildWindowNoChildren() {
163
         when(container.getChildren()).thenReturn(Arrays.asList(
174
         when(container.getChildren()).thenReturn(Arrays.asList(
164
                 new FrameContainer[]{child, }));
175
                 new FrameContainer[]{child, }));
165
-        when(child.getParent()).thenReturn(container);
176
+        when(child.getParent()).thenReturn(Optional.of(container));
166
 
177
 
167
         manager.addListener(frameListener);
178
         manager.addListener(frameListener);
168
         manager.addWindow(container);
179
         manager.addWindow(container);
178
                 new FrameContainer[]{child, }));
189
                 new FrameContainer[]{child, }));
179
         when(child.getChildren()).thenReturn(Arrays.asList(
190
         when(child.getChildren()).thenReturn(Arrays.asList(
180
                 new FrameContainer[]{grandchild, }));
191
                 new FrameContainer[]{grandchild, }));
181
-        when(child.getParent()).thenReturn(container);
192
+        when(child.getParent()).thenReturn(Optional.of(container));
182
 
193
 
183
         manager.addListener(frameListener);
194
         manager.addListener(frameListener);
184
         manager.addWindow(container);
195
         manager.addWindow(container);
195
         final FrameContainer root2 = mock(FrameContainer.class);
206
         final FrameContainer root2 = mock(FrameContainer.class);
196
         final Collection<FrameContainer> rootWindows
207
         final Collection<FrameContainer> rootWindows
197
                 = Arrays.asList(new FrameContainer[]{root1, root2, });
208
                 = Arrays.asList(new FrameContainer[]{root1, root2, });
198
-        
209
+
199
         manager.addWindow(root1);
210
         manager.addWindow(root1);
200
         manager.addWindow(root2);
211
         manager.addWindow(root2);
201
 
212
 

Loading…
Cancel
Save