• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

link-intersystems / lis-commons / #267

05 Nov 2023 03:39PM UTC coverage: 89.39% (-0.4%) from 89.804%
#267

Pull #7

renelink
Added more tests.
Pull Request #7: Migrated swing-view stuff from java-swing-mvc-plugin-architecture.

227 of 292 new or added lines in 15 files covered. (77.74%)

7616 of 8520 relevant lines covered (89.39%)

0.89 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.98
/lis-commons-util-context/src/main/java/com/link_intersystems/util/context/dsl/ContextDsl.java
1
package com.link_intersystems.util.context.dsl;
2

3
import com.link_intersystems.util.context.Context;
4
import com.link_intersystems.util.context.ContextListener;
5
import com.link_intersystems.util.context.ObjectQualifier;
6

7
import java.util.ArrayList;
8
import java.util.List;
9
import java.util.function.Consumer;
10

11
import static java.util.Objects.requireNonNull;
12

13
public class ContextDsl {
14

15
    private static class ContextMediatorListenerAdapter<T> implements ContextListener<T> {
16

17
        private Consumer<T> onInstanceAdded;
18
        private Consumer<T> onInstanceRemoved;
19
        private T setModel;
20
        private T defaultModel;
21

22
        public ContextMediatorListenerAdapter(Consumer<T> modelSetter) {
NEW
23
            this(modelSetter, modelSetter);
×
NEW
24
        }
×
25

26
        public ContextMediatorListenerAdapter(Consumer<T> onInstanceAdded, Consumer<T> onInstanceRemoved) {
1✔
27
            this.onInstanceAdded = onInstanceAdded;
1✔
28
            this.onInstanceRemoved = onInstanceRemoved;
1✔
29
        }
1✔
30

31
        @Override
32
        public void added(Context context, T object) {
33
            if (onInstanceAdded != null) {
1✔
34
                onInstanceAdded.accept(object);
1✔
35
            }
36

37
            this.setModel = object;
1✔
38
        }
1✔
39

40
        @Override
41
        public void removed(Context context, T object) {
42
            if (onInstanceRemoved != null) {
1✔
43
                onInstanceRemoved.accept(object);
1✔
44
            }
45

46
            this.setModel = null;
1✔
47
        }
1✔
48

49
    }
50

51
    private static class RunnableListenerAdapter<T> implements ContextListener<T> {
52

53
        private Runnable addedRunnable;
54
        private Runnable removedRunnable;
55

56
        public RunnableListenerAdapter(Runnable addedRunnable, Runnable removedRunnable) {
1✔
57
            this.addedRunnable = addedRunnable;
1✔
58
            this.removedRunnable = removedRunnable;
1✔
59
        }
1✔
60

61
        @Override
62
        public void added(Context context, T object) {
63
            if (addedRunnable != null) {
1✔
64
                addedRunnable.run();
1✔
65
            }
66
        }
1✔
67

68
        @Override
69
        public void removed(Context context, T object) {
70
            if (removedRunnable != null) {
1✔
71
                removedRunnable.run();
1✔
72
            }
73
        }
1✔
74
    }
75

76
    private static abstract class AbstractWhen<T> implements When<T> {
1✔
77

78
        private final List<Action<?>> actions = new ArrayList<>();
1✔
79

80
        protected Action<T> add(Action<T> action) {
81
            actions.add(action);
1✔
82
            return action;
1✔
83
        }
84

85
        @Override
86
        public void dispose() {
87
            actions.forEach(Action::dispose);
1✔
88
            actions.clear();
1✔
89
        }
1✔
90
    }
91

92
    private static abstract class AbstractAction<T> implements Action<T> {
93

94
        private Context context;
95
        private ObjectQualifier<? super T> objectQualifier;
96

97
        protected final List<ContextListener<T>> listeners = new ArrayList<>();
1✔
98

99
        public AbstractAction(Context context, ObjectQualifier<? super T> objectQualifier) {
1✔
100
            this.context = context;
1✔
101
            this.objectQualifier = objectQualifier;
1✔
102
        }
1✔
103

104

105
        @Override
106
        public void dispose() {
107
            listeners.forEach(l -> context.removeViewContextListener(objectQualifier, l));
1✔
108
            listeners.clear();
1✔
109
        }
1✔
110
    }
111

112
    private List<Runnable> unregisterListenersRunnables = new ArrayList<>();
1✔
113

114
    private Context context;
115

116
    public ContextDsl(Context context) {
1✔
117
        this.context = context;
1✔
118
    }
1✔
119

120
    public <T> When<T> when(Class<? super T> modelType) {
121
        return when(modelType, null);
1✔
122
    }
123

124
    public <T> When<T> when(Class<? super T> modelType, String name) {
125
        ObjectQualifier<? super T> objectQualifier = new ObjectQualifier<>(modelType, name);
1✔
126
        return when(objectQualifier);
1✔
127
    }
128

129
    public <T> When<T> when(ObjectQualifier<? super T> objectQualifier) {
130
        return new AbstractWhen<>() {
1✔
131
            @Override
132
            public Action<T> added() {
133
                return add(new AbstractAction<T>(context, objectQualifier) {
1✔
134

135
                    @Override
136
                    public void then(Consumer<T> consumer) {
137
                        ContextMediatorListenerAdapter<T> listenerAdapter = new ContextMediatorListenerAdapter<>(consumer, null);
1✔
138
                        listeners.add(listenerAdapter);
1✔
139
                        context.addViewContextListener(objectQualifier, listenerAdapter);
1✔
140
                        unregisterListenersRunnables.add(() -> context.removeViewContextListener(objectQualifier, listenerAdapter));
1✔
141
                    }
1✔
142

143
                    @Override
144
                    public void then(Runnable runnable) {
145
                        RunnableListenerAdapter<T> runnableListenerAdapter = new RunnableListenerAdapter<>(requireNonNull(runnable), null);
1✔
146
                        listeners.add(runnableListenerAdapter);
1✔
147
                        context.addViewContextListener(objectQualifier, runnableListenerAdapter);
1✔
148
                        unregisterListenersRunnables.add(() -> context.removeViewContextListener(objectQualifier, runnableListenerAdapter));
1✔
149
                    }
1✔
150
                });
151
            }
152

153
            @Override
154
            public Action<T> removed() {
155
                return add(new AbstractAction<T>(context, objectQualifier) {
1✔
156

157
                    @Override
158
                    public void then(Consumer<T> consumer) {
159
                        ContextMediatorListenerAdapter<T> listenerAdapter = new ContextMediatorListenerAdapter<>(null, or -> consumer.accept(null));
1✔
160
                        listeners.add(listenerAdapter);
1✔
161
                        context.addViewContextListener(objectQualifier, listenerAdapter);
1✔
162
                        unregisterListenersRunnables.add(() -> context.removeViewContextListener(objectQualifier, listenerAdapter));
1✔
163
                    }
1✔
164

165
                    @Override
166
                    public void then(Runnable runnable) {
167
                        RunnableListenerAdapter<T> runnableListenerAdapter = new RunnableListenerAdapter<>(null, requireNonNull(runnable));
1✔
168
                        listeners.add(runnableListenerAdapter);
1✔
169
                        context.addViewContextListener(objectQualifier, runnableListenerAdapter);
1✔
170
                        unregisterListenersRunnables.add(() -> context.removeViewContextListener(objectQualifier, runnableListenerAdapter));
1✔
171
                    }
1✔
172
                });
173
            }
174

175
            @Override
176
            public Action<T> changed() {
177
                return add(new AbstractAction<T>(context, objectQualifier) {
1✔
178
                    @Override
179
                    public void then(Consumer<T> consumer) {
180
                        ContextMediatorListenerAdapter<T> listenerAdapter = new ContextMediatorListenerAdapter<>(consumer, or -> consumer.accept(null));
1✔
181
                        listeners.add(listenerAdapter);
1✔
182
                        context.addViewContextListener(objectQualifier, listenerAdapter);
1✔
183
                        unregisterListenersRunnables.add(() -> context.removeViewContextListener(objectQualifier, listenerAdapter));
1✔
184
                    }
1✔
185

186
                    @Override
187
                    public void then(Runnable runnable) {
188
                        RunnableListenerAdapter<T> runnableListenerAdapter = new RunnableListenerAdapter<>(requireNonNull(runnable), requireNonNull(runnable));
1✔
189
                        listeners.add(runnableListenerAdapter);
1✔
190
                        context.addViewContextListener(objectQualifier, runnableListenerAdapter);
1✔
191
                        unregisterListenersRunnables.add(() -> context.removeViewContextListener(objectQualifier, runnableListenerAdapter));
1✔
192
                    }
1✔
193
                });
194
            }
195
        };
196
    }
197

198
    public void dispose() {
NEW
199
        unregisterListenersRunnables.forEach(Runnable::run);
×
NEW
200
        unregisterListenersRunnables.clear();
×
NEW
201
    }
×
202
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc