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

link-intersystems / lis-commons / #264

05 Nov 2023 11:38AM UTC coverage: 88.527% (-1.3%) from 89.804%
#264

Pull #7

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

249 of 400 new or added lines in 23 files covered. (62.25%)

7639 of 8629 relevant lines covered (88.53%)

0.89 hits per line

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

95.08
/lis-commons-util-context/src/main/java/com/link_intersystems/util/context/AbstractContext.java
1
package com.link_intersystems.util.context;
2

3

4
import java.util.ArrayList;
5
import java.util.List;
6
import java.util.Objects;
7

8
import static java.util.Objects.requireNonNull;
9

10
public abstract class AbstractContext implements Context {
1✔
11

12
    protected abstract QualifiedObject<?> removeInstance(ObjectQualifier<?> objectQualifier);
13

14
    protected abstract <T> QualifiedObject<T> getInstance(ObjectQualifier<? super T> objectQualifier);
15

16
    @SuppressWarnings("CanBeFinal")
17
    private static class ViewContextListenerRegistration<T> {
18

19
        private ObjectQualifier<? super T> objectQualifier;
20
        private ContextListener<T> contextListener;
21

22
        public ViewContextListenerRegistration(ObjectQualifier<? super T> objectQualifier, ContextListener<T> contextListener) {
1✔
23
            this.objectQualifier = requireNonNull(objectQualifier);
1✔
24
            this.contextListener = requireNonNull(contextListener);
1✔
25
        }
1✔
26

27
        @SuppressWarnings("unchecked")
28
        public <T> ContextListener<T> cast(ObjectQualifier<? super T> objectQualifier) {
29
            if (accept(objectQualifier)) {
1✔
30
                return (ContextListener<T>) contextListener;
1✔
31
            }
32
            return null;
1✔
33
        }
34

35
        public <T> boolean accept(ObjectQualifier<? super T> objectQualifier) {
36
            return this.objectQualifier.equals(objectQualifier);
1✔
37
        }
38

39
        @Override
40
        public boolean equals(Object o) {
41
            if (this == o) return true;
1✔
42
            if (o == null || getClass() != o.getClass()) return false;
1✔
43
            ViewContextListenerRegistration<?> that = (ViewContextListenerRegistration<?>) o;
1✔
44
            return Objects.equals(objectQualifier, that.objectQualifier) && Objects.equals(contextListener, that.contextListener);
1✔
45
        }
46

47
        @Override
48
        public int hashCode() {
NEW
49
            return Objects.hash(objectQualifier, contextListener);
×
50
        }
51
    }
52

53
    private List<ViewContextListenerRegistration<?>> viewContextListenerRegistrations = new ArrayList<>();
1✔
54

55
    @Override
56
    public <T> void addViewContextListener(ObjectQualifier<? super T> objectQualifier, ContextListener<T> contextListener) {
57
        ViewContextListenerRegistration<T> listenerRegistration = new ViewContextListenerRegistration<>(objectQualifier, contextListener);
1✔
58
        viewContextListenerRegistrations.add(listenerRegistration);
1✔
59

60
        onViewContextListenerAdded(objectQualifier, contextListener);
1✔
61
    }
1✔
62

63
    protected <T> void onViewContextListenerAdded(ObjectQualifier<? super T> objectQualifier, ContextListener<T> contextListener) {
64
        QualifiedObject<T> registration = getInstance(objectQualifier);
1✔
65
        if (registration != null) {
1✔
66
            T object = registration.getObject();
1✔
67
            contextListener.added(this, object);
1✔
68
        }
69
    }
1✔
70

71

72
    @Override
73
    public <T> void removeViewContextListener(ObjectQualifier<? super T> objectQualifier, ContextListener<T> contextListener) {
74
        ViewContextListenerRegistration<T> listenerRegistration = new ViewContextListenerRegistration<>(objectQualifier, contextListener);
1✔
75
        if (viewContextListenerRegistrations.remove(listenerRegistration)) {
1✔
76
            onViewContextListenerRemoved(listenerRegistration.contextListener);
1✔
77
        }
78
    }
1✔
79

80
    protected <T> void onViewContextListenerRemoved(ContextListener<T> contextListener) {
81
    }
1✔
82

83
    @Override
84
    public <T, O extends T> void put(ObjectQualifier<? super T> objectQualifier, O object) {
85
        QualifiedObject<O> qualifiedObject = new QualifiedObject<>(objectQualifier, object);
1✔
86

87
        if (putInstance(qualifiedObject)) {
1✔
88
            onPutInstance(qualifiedObject);
1✔
89
            return;
1✔
90
        }
91

92
        throw new DuplicateObjectException(objectQualifier);
1✔
93
    }
94

95
    protected abstract boolean putInstance(QualifiedObject<?> qualifiedObject);
96

97

98
    protected <T> void onPutInstance(QualifiedObject<T> qualifiedObject) {
99
        for (ViewContextListenerRegistration<?> listenerRegistration : viewContextListenerRegistrations) {
1✔
100
            ObjectQualifier<? super T> objectQualifier = qualifiedObject.getQualifier();
1✔
101
            ContextListener<T> contextListener = listenerRegistration.cast(objectQualifier);
1✔
102
            if (contextListener != null) {
1✔
103
                T object = qualifiedObject.getObject();
1✔
104
                contextListener.added(this, object);
1✔
105
            }
106
        }
1✔
107
    }
1✔
108

109
    @SuppressWarnings("unchecked")
110
    @Override
111
    public <T> T get(ObjectQualifier<T> objectQualifier) {
112
        if (objectQualifier == null) {
1✔
NEW
113
            return null;
×
114
        }
115

116
        QualifiedObject<?> qualifiedObject = getInstance(objectQualifier);
1✔
117

118
        if (qualifiedObject == null) {
1✔
119
            throw new NoSuchObjectException(objectQualifier);
1✔
120
        }
121

122
        return (T) qualifiedObject.getObject();
1✔
123
    }
124

125
    @Override
126
    public boolean remove(ObjectQualifier<?> objectQualifier) {
127
        QualifiedObject<?> removedInstance = removeInstance(objectQualifier);
1✔
128

129
        if (removedInstance != null) {
1✔
130
            onRemoveInstance(removedInstance);
1✔
131
        }
132

133
        return removedInstance != null;
1✔
134
    }
135

136
    protected <T> void onRemoveInstance(QualifiedObject<T> removedRegistration) {
137
        for (ViewContextListenerRegistration<?> listenerRegistration : viewContextListenerRegistrations) {
1✔
138
            ObjectQualifier<? super T> objectQualifier = removedRegistration.getQualifier();
1✔
139
            ContextListener<T> contextListener = listenerRegistration.cast(objectQualifier);
1✔
140
            if (contextListener != null) {
1✔
141
                T removedObject = removedRegistration.getObject();
1✔
142
                contextListener.removed(this, removedObject);
1✔
143
            }
144
        }
1✔
145
    }
1✔
146

147
    @Override
148
    public String toString() {
NEW
149
        return getClass().getName() + "[" + Integer.toHexString(System.identityHashCode(this)) + "]";
×
150
    }
151
}
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