Skip to content

Commit 9cdec83

Browse files
authored
Adding equals, hashcode and toString to RuleFilter implementations (Azure#27825)
* Adding equals, hashcode and toString to Rule filters * Update changelog * Adding overrides in base class for equals and hashcode * Removing the addition of Overrides in base class
1 parent 1f03405 commit 9cdec83

File tree

5 files changed

+235
-2
lines changed

5 files changed

+235
-2
lines changed

sdk/servicebus/azure-messaging-servicebus/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
## 7.8.0-beta.1 (Unreleased)
44

55
### Features Added
6-
6+
- Implemented equals and hashCode methods for CorrelationRuleFilter and SqlRuleFilter objects
77
### Breaking Changes
88

99
### Bugs Fixed

sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/administration/models/CorrelationRuleFilter.java

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import java.util.HashMap;
1111
import java.util.Map;
12+
import java.util.Objects;
1213

1314
/**
1415
* Represents the correlation rule filter expression. It holds a set of conditions that are matched against one or more
@@ -285,8 +286,45 @@ public String toString() {
285286
return builder.toString();
286287
}
287288

289+
/**
290+
* Compares this RuleFilter to the specified object. The result is true if and only if the argument is not null
291+
* and is a CorrelationRuleFilter object that with the same parameters as this object.
292+
*
293+
* @param other - the object to which the current CorrelationRuleFilter should be compared.
294+
* @return True, if the passed object is a CorrelationRuleFilter with the same parameter values, False otherwise.
295+
*/
296+
@Override
297+
public boolean equals(Object other) {
298+
if (this == other) {
299+
return true;
300+
}
301+
if (!(other instanceof CorrelationRuleFilter)) {
302+
return false;
303+
}
304+
CorrelationRuleFilter that = (CorrelationRuleFilter) other;
305+
return Objects.equals(properties, that.properties)
306+
&& Objects.equals(correlationId, that.correlationId)
307+
&& Objects.equals(contentType, that.contentType)
308+
&& Objects.equals(label, that.label)
309+
&& Objects.equals(messageId, that.messageId)
310+
&& Objects.equals(replyTo, that.replyTo)
311+
&& Objects.equals(replyToSessionId, that.replyToSessionId)
312+
&& Objects.equals(sessionId, that.sessionId)
313+
&& Objects.equals(to, that.to);
314+
}
315+
316+
/**
317+
* Returns a hash code for this CorrelationRuleFilter.
318+
*
319+
* @return a hash code value for this object.
320+
*/
321+
@Override
322+
public int hashCode() {
323+
return Objects.hash(correlationId, messageId, sessionId);
324+
}
325+
288326
private static boolean appendPropertyExpression(boolean isFirstExpression, StringBuilder builder, String display,
289-
String value) {
327+
String value) {
290328

291329
if (value == null) {
292330
return true;

sdk/servicebus/azure-messaging-servicebus/src/main/java/com/azure/messaging/servicebus/administration/models/SqlRuleFilter.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.HashMap;
1010
import java.util.Map;
11+
import java.util.Objects;
1112

1213
/**
1314
* Represents a filter which is a composition of an expression and an action that is executed in the pub/sub pipeline.
@@ -99,4 +100,46 @@ public Map<String, Object> getParameters() {
99100
public String getSqlExpression() {
100101
return sqlExpression;
101102
}
103+
104+
/**
105+
* Converts the value of the current instance to its equivalent string representation.
106+
*
107+
* @return A string representation of the current instance.
108+
*/
109+
@Override
110+
public String toString() {
111+
return String.format("SqlRuleFilter: %s", sqlExpression);
112+
}
113+
114+
/**
115+
* Compares this RuleFilter to the specified object. The result is true if and only if the argument is not null
116+
* and is a SqlRuleFilter object that with the same parameters as this object.
117+
*
118+
* @param other - the object to which the current SqlRuleFilter should be compared.
119+
* @return True, if the passed object is a SqlRuleFilter with the same parameter values, False otherwise.
120+
*/
121+
@Override
122+
public boolean equals(Object other) {
123+
if (this == other) {
124+
return true;
125+
}
126+
if (!(other instanceof SqlRuleFilter)) {
127+
return false;
128+
}
129+
SqlRuleFilter that = (SqlRuleFilter) other;
130+
return sqlExpression.equals(that.sqlExpression)
131+
&& Objects.equals(compatibilityLevel, that.compatibilityLevel)
132+
&& Objects.equals(requiresPreprocessing, that.requiresPreprocessing)
133+
&& Objects.equals(properties, that.properties);
134+
}
135+
136+
/**
137+
* Returns a hash code for this SqlRuleFilter, which is the hashcode for the SqlExpression.
138+
*
139+
* @return a hash code value for this object.
140+
*/
141+
@Override
142+
public int hashCode() {
143+
return sqlExpression.hashCode();
144+
}
102145
}

sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/models/CorrelationRuleFilterTest.java

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import static org.junit.jupiter.api.Assertions.assertEquals;
99
import static org.junit.jupiter.api.Assertions.assertFalse;
10+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
1011
import static org.junit.jupiter.api.Assertions.assertNotNull;
1112
import static org.junit.jupiter.api.Assertions.assertNull;
1213
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -138,4 +139,73 @@ void setProperties() {
138139
assertTrue(toString.contains(key2));
139140
assertTrue(toString.contains(value2));
140141
}
142+
143+
@Test
144+
void testEqualsAndHashCode() {
145+
final CorrelationRuleFilter someFilter = new CorrelationRuleFilter("some-id");
146+
final CorrelationRuleFilter otherFilter = new CorrelationRuleFilter("other-id");
147+
assertNotEquals(someFilter, otherFilter);
148+
assertNotEquals(someFilter.hashCode(), otherFilter.hashCode());
149+
150+
final CorrelationRuleFilter similarFilter = new CorrelationRuleFilter("some-id");
151+
assertEquals(someFilter, similarFilter);
152+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
153+
154+
someFilter.setMessageId("some-message-id");
155+
assertNotEquals(someFilter, similarFilter);
156+
assertNotEquals(someFilter.hashCode(), similarFilter.hashCode());
157+
similarFilter.setMessageId("other-message-id");
158+
assertNotEquals(someFilter, similarFilter);
159+
assertNotEquals(someFilter.hashCode(), similarFilter.hashCode());
160+
similarFilter.setMessageId("some-message-id");
161+
assertEquals(someFilter, similarFilter);
162+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
163+
164+
someFilter.setSessionId("some-session-id");
165+
assertNotEquals(someFilter, similarFilter);
166+
assertNotEquals(someFilter.hashCode(), similarFilter.hashCode());
167+
similarFilter.setSessionId("other-session-id");
168+
assertNotEquals(someFilter, similarFilter);
169+
assertNotEquals(someFilter.hashCode(), similarFilter.hashCode());
170+
similarFilter.setSessionId("some-session-id");
171+
assertEquals(someFilter, similarFilter);
172+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
173+
174+
someFilter.setContentType("some-content-type");
175+
assertNotEquals(someFilter, similarFilter);
176+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
177+
similarFilter.setContentType("some-content-type");
178+
assertEquals(someFilter, similarFilter);
179+
180+
someFilter.setLabel("some-label");
181+
assertNotEquals(someFilter, similarFilter);
182+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
183+
similarFilter.setLabel("some-label");
184+
assertEquals(someFilter, similarFilter);
185+
186+
someFilter.getProperties().put("some-key1", "some-value1");
187+
assertNotEquals(someFilter, similarFilter);
188+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
189+
similarFilter.getProperties().put("some-key1", "some-value1");
190+
assertEquals(someFilter, similarFilter);
191+
192+
someFilter.setReplyTo("some-reply-id");
193+
assertNotEquals(someFilter, similarFilter);
194+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
195+
similarFilter.setReplyTo("some-reply-id");
196+
assertEquals(someFilter, similarFilter);
197+
198+
someFilter.setReplyToSessionId("some-reply-session-id");
199+
assertNotEquals(someFilter, similarFilter);
200+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
201+
similarFilter.setReplyToSessionId("some-reply-session-id");
202+
assertEquals(someFilter, similarFilter);
203+
204+
someFilter.setTo("some-to");
205+
assertNotEquals(someFilter, similarFilter);
206+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
207+
similarFilter.setTo("some-to");
208+
assertEquals(someFilter, similarFilter);
209+
210+
}
141211
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.azure.messaging.servicebus.administration.models;
5+
6+
import org.junit.jupiter.api.Test;
7+
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
10+
import static org.junit.jupiter.api.Assertions.assertNotNull;
11+
import static org.junit.jupiter.api.Assertions.assertNull;
12+
13+
/**
14+
* Tests for {@link SqlRuleFilter}.
15+
*/
16+
class SqlRuleFilterTest {
17+
@Test
18+
void testConstructor() {
19+
// Arrange
20+
final String expectedToString = "SqlRuleFilter: some-expression";
21+
final String expectedSqlExpression = "some-expression";
22+
23+
// Act
24+
final SqlRuleFilter actual = new SqlRuleFilter("some-expression");
25+
26+
// Assert
27+
assertEquals(expectedSqlExpression, actual.getSqlExpression());
28+
assert (actual.getParameters().isEmpty());
29+
assertNull(actual.getCompatibilityLevel());
30+
assertNull(actual.isPreprocessingRequired());
31+
32+
final String toString = actual.toString();
33+
assertNotNull(toString);
34+
assertEquals(expectedToString, toString);
35+
}
36+
37+
@Test
38+
void testEqualsAndHashCode() {
39+
final SqlRuleFilter someFilter = new SqlRuleFilter("some-expression");
40+
final SqlRuleFilter otherFilter = new SqlRuleFilter("other-expression");
41+
assertNotEquals(someFilter, otherFilter);
42+
assertNotEquals(someFilter.hashCode(), otherFilter.hashCode());
43+
final SqlRuleFilter similarFilter = new SqlRuleFilter("some-expression");
44+
assertEquals(someFilter, similarFilter);
45+
assertEquals(someFilter.hashCode(), similarFilter.hashCode());
46+
47+
final SqlRuleFilter filter = new SqlRuleFilter("some-expression",
48+
"some-compatibility-level", true);
49+
50+
assertNotEquals(filter, someFilter);
51+
assertEquals(filter.hashCode(), someFilter.hashCode());
52+
53+
final SqlRuleFilter differentCompatibilityFilter = new SqlRuleFilter("some-expression",
54+
"other-compatibility-level", true);
55+
assertNotEquals(filter, differentCompatibilityFilter);
56+
assertEquals(filter.hashCode(), differentCompatibilityFilter.hashCode());
57+
58+
final SqlRuleFilter differentPreprocessingFilter = new SqlRuleFilter("some-expression",
59+
"some-compatibility-level", false);
60+
assertNotEquals(filter, differentPreprocessingFilter);
61+
assertEquals(filter.hashCode(), differentPreprocessingFilter.hashCode());
62+
63+
final SqlRuleFilter allSameFilter = new SqlRuleFilter("some-expression",
64+
"some-compatibility-level", true);
65+
assertEquals(filter, allSameFilter);
66+
}
67+
68+
@Test
69+
void testEqualsAndHashCodeTrueAndFalseFilters() {
70+
final TrueRuleFilter trueRuleFilter = new TrueRuleFilter();
71+
final TrueRuleFilter otherTrueRuleFilter = new TrueRuleFilter();
72+
assertEquals(trueRuleFilter, otherTrueRuleFilter);
73+
assertEquals(trueRuleFilter.hashCode(), otherTrueRuleFilter.hashCode());
74+
75+
final FalseRuleFilter falseRuleFilter = new FalseRuleFilter();
76+
final FalseRuleFilter otherFalseRuleFilter = new FalseRuleFilter();
77+
assertEquals(falseRuleFilter, otherFalseRuleFilter);
78+
assertEquals(falseRuleFilter.hashCode(), otherFalseRuleFilter.hashCode());
79+
80+
assertNotEquals(trueRuleFilter.hashCode(), falseRuleFilter.hashCode());
81+
}
82+
}

0 commit comments

Comments
 (0)