Skip to content

Commit 3e60899

Browse files
rogintonygermano
authored andcommitted
DestinationSet should implement java.util.Set
Signed-off-by: Richard Ogin <rogin@users.noreply.github.com>
1 parent 8ec5ab7 commit 3e60899

File tree

2 files changed

+496
-64
lines changed

2 files changed

+496
-64
lines changed
Lines changed: 118 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,17 @@
1-
/*
2-
* Copyright (c) Mirth Corporation. All rights reserved.
3-
*
4-
* http://www.mirthcorp.com
5-
*
6-
* The software in this package is published under the terms of the MPL license a copy of which has
7-
* been included with this distribution in the LICENSE.txt file.
8-
*/
1+
// SPDX-License-Identifier: MPL-2.0
2+
// SPDX-FileCopyrightText: Mirth Corporation
3+
// SPDX-FileCopyrightText: 2025 Richard Ogin
94

105
package com.mirth.connect.server.userutil;
116

127
import java.util.Collection;
138
import java.util.Collections;
149
import java.util.HashSet;
10+
import java.util.Iterator;
1511
import java.util.Map;
12+
import java.util.Optional;
1613
import java.util.Set;
14+
import java.util.stream.Collectors;
1715

1816
import org.mozilla.javascript.Context;
1917

@@ -24,9 +22,9 @@
2422
* Utility class used in the preprocessor or source filter/transformer to prevent the message from
2523
* being sent to specific destinations.
2624
*/
27-
public class DestinationSet {
25+
public class DestinationSet implements Set<Integer> {
2826

29-
private Map<String, Integer> destinationIdMap;
27+
private Map<String, Integer> destinationIdMap = Collections.emptyMap();
3028
private Set<Integer> metaDataIds;
3129

3230
/**
@@ -43,6 +41,7 @@ public DestinationSet(ImmutableConnectorMessage connectorMessage) {
4341
this.metaDataIds = (Set<Integer>) connectorMessage.getSourceMap().get(Constants.DESTINATION_SET_KEY);
4442
}
4543
} catch (Exception e) {
44+
metaDataIds = new HashSet<>();
4645
}
4746
}
4847

@@ -56,15 +55,7 @@ public DestinationSet(ImmutableConnectorMessage connectorMessage) {
5655
* from processing for this message.
5756
*/
5857
public boolean remove(Object metaDataIdOrConnectorName) {
59-
if (metaDataIds != null) {
60-
Integer metaDataId = convertToMetaDataId(metaDataIdOrConnectorName);
61-
62-
if (metaDataId != null) {
63-
return metaDataIds.remove(metaDataId);
64-
}
65-
}
66-
67-
return false;
58+
return remove(Collections.singleton(metaDataIdOrConnectorName));
6859
}
6960

7061
/**
@@ -77,15 +68,15 @@ public boolean remove(Object metaDataIdOrConnectorName) {
7768
* from processing for this message.
7869
*/
7970
public boolean remove(Collection<Object> metaDataIdOrConnectorNames) {
80-
boolean removed = false;
81-
82-
for (Object metaDataIdOrConnectorName : metaDataIdOrConnectorNames) {
83-
if (remove(metaDataIdOrConnectorName)) {
84-
removed = true;
85-
}
86-
}
87-
88-
return removed;
71+
if(metaDataIdOrConnectorNames == null) { return false; }
72+
73+
return metaDataIdOrConnectorNames.stream()
74+
.map(this::convertToMetaDataId)
75+
.filter(Optional::isPresent)
76+
.map(Optional::get)
77+
.map(metaDataIds::remove)
78+
.filter(Boolean::booleanValue)
79+
.count() > 0;
8980
}
9081

9182
/**
@@ -98,15 +89,7 @@ public boolean remove(Collection<Object> metaDataIdOrConnectorNames) {
9889
* from processing for this message.
9990
*/
10091
public boolean removeAllExcept(Object metaDataIdOrConnectorName) {
101-
if (metaDataIds != null) {
102-
Integer metaDataId = convertToMetaDataId(metaDataIdOrConnectorName);
103-
104-
Set<Integer> set = (metaDataId != null) ? Collections.singleton(metaDataId) : Collections.emptySet();
105-
106-
return metaDataIds.retainAll(set);
107-
}
108-
109-
return false;
92+
return removeAllExcept(Collections.singleton(metaDataIdOrConnectorName));
11093
}
11194

11295
/**
@@ -119,21 +102,15 @@ public boolean removeAllExcept(Object metaDataIdOrConnectorName) {
119102
* from processing for this message.
120103
*/
121104
public boolean removeAllExcept(Collection<Object> metaDataIdOrConnectorNames) {
122-
if (metaDataIds != null) {
123-
Set<Integer> set = new HashSet<Integer>();
124-
125-
for (Object metaDataIdOrConnectorName : metaDataIdOrConnectorNames) {
126-
Integer metaDataId = convertToMetaDataId(metaDataIdOrConnectorName);
127-
128-
if (metaDataId != null) {
129-
set.add(metaDataId);
130-
}
131-
}
132-
133-
return metaDataIds.retainAll(set);
134-
}
135-
136-
return false;
105+
if(metaDataIdOrConnectorNames == null) { return false; }
106+
107+
Set<Integer> set = metaDataIdOrConnectorNames.stream()
108+
.map(this::convertToMetaDataId)
109+
.filter(Optional::isPresent)
110+
.map(Optional::get)
111+
.collect(Collectors.toSet());
112+
113+
return metaDataIds.retainAll(set);
137114
}
138115

139116
/**
@@ -144,25 +121,102 @@ public boolean removeAllExcept(Collection<Object> metaDataIdOrConnectorNames) {
144121
* from processing for this message.
145122
*/
146123
public boolean removeAll() {
147-
if (metaDataIds != null && metaDataIds.size() > 0) {
148-
metaDataIds.clear();
149-
return true;
150-
}
151-
152-
return false;
124+
int origSize = size();
125+
clear();
126+
return origSize > 0;
153127
}
154128

155-
private Integer convertToMetaDataId(Object metaDataIdOrConnectorName) {
129+
private Optional<Integer> convertToMetaDataId(Object metaDataIdOrConnectorName) {
130+
Integer result = null;
131+
156132
if (metaDataIdOrConnectorName != null) {
157133
if (metaDataIdOrConnectorName instanceof Number) {
158-
return ((Number) metaDataIdOrConnectorName).intValue();
134+
result = Integer.valueOf(((Number) metaDataIdOrConnectorName).intValue());
159135
} else if (metaDataIdOrConnectorName.getClass().getName().equals("org.mozilla.javascript.NativeNumber")) {
160-
return (Integer) Context.jsToJava(metaDataIdOrConnectorName, int.class);
161-
} else if (destinationIdMap != null) {
162-
return destinationIdMap.get(metaDataIdOrConnectorName.toString());
136+
result = (Integer) Context.jsToJava(metaDataIdOrConnectorName, int.class);
137+
} else {
138+
result = destinationIdMap.get(metaDataIdOrConnectorName.toString());
163139
}
164140
}
165141

166-
return null;
142+
return Optional.ofNullable(result);
143+
}
144+
145+
@Override
146+
public int size() {
147+
return metaDataIds.size();
148+
}
149+
150+
@Override
151+
public boolean isEmpty() {
152+
return metaDataIds.isEmpty();
153+
}
154+
155+
@Override
156+
public boolean contains(Object metaDataIdOrConnectorName) {
157+
Optional<Integer> m = convertToMetaDataId(metaDataIdOrConnectorName);
158+
159+
return m.isPresent() && metaDataIds.contains(m.get());
160+
}
161+
162+
@Override
163+
public Iterator<Integer> iterator() {
164+
return Collections.unmodifiableSet(metaDataIds).iterator();
165+
}
166+
167+
@Override
168+
public Object[] toArray() {
169+
return metaDataIds.toArray();
170+
}
171+
172+
@Override
173+
public <T> T[] toArray(T[] a) {
174+
return metaDataIds.toArray(a);
175+
}
176+
177+
@Override
178+
public boolean add(Integer metaDataId) {
179+
return metaDataId != null && metaDataIds.add(metaDataId);
180+
}
181+
182+
@Override
183+
public boolean containsAll(Collection<?> metaDataIdOrConnectorNames) {
184+
if(metaDataIdOrConnectorNames == null) { return false; }
185+
186+
return metaDataIdOrConnectorNames.stream()
187+
.map(this::contains)
188+
.allMatch(Boolean::booleanValue);
189+
}
190+
191+
@Override
192+
public boolean addAll(Collection<? extends Integer> metaDataIdOrConnectorNames) {
193+
boolean changed = false;
194+
195+
if(metaDataIdOrConnectorNames != null) {
196+
for(Object item : metaDataIdOrConnectorNames) {
197+
Optional<Integer> m = convertToMetaDataId(item);
198+
199+
if(m.isPresent() && metaDataIds.add(m.get())) {
200+
changed = true;
201+
}
202+
}
203+
}
204+
205+
return changed;
206+
}
207+
208+
@Override
209+
public boolean retainAll(Collection<?> metaDataIdOrConnectorNames) {
210+
return removeAllExcept((Collection<Object>)metaDataIdOrConnectorNames);
211+
}
212+
213+
@Override
214+
public boolean removeAll(Collection<?> metaDataIdOrConnectorNames) {
215+
return remove((Collection<Object>)metaDataIdOrConnectorNames);
216+
}
217+
218+
@Override
219+
public void clear() {
220+
metaDataIds.clear();
167221
}
168222
}

0 commit comments

Comments
 (0)