Skip to content

Commit 3bf738d

Browse files
committed
#23 Reduce code duplication in equalsQueryString() implememtations
Signed-off-by: Sven Strittmatter <sven.strittmatter@iteratec.com>
1 parent 9f6b45d commit 3bf738d

File tree

16 files changed

+291
-44
lines changed

16 files changed

+291
-44
lines changed

src/main/java/io/securecodebox/persistence/defectdojo/model/Endpoint.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
@AllArgsConstructor
1717
@EqualsAndHashCode
1818
@JsonInclude(JsonInclude.Include.NON_NULL)
19-
public final class Endpoint implements Model {
19+
public final class Endpoint implements Model, HasId {
2020
@JsonProperty
2121
private long id;
2222

@@ -49,10 +49,11 @@ public final class Endpoint implements Model {
4949

5050
@Override
5151
public boolean equalsQueryString(Map<String, Object> queryParams) {
52-
if (queryParams == null) {
52+
if (QueryParamsComparator.isNull(queryParams)) {
5353
return false;
5454
}
5555

56-
return queryParams.containsKey("id") && queryParams.get("id").equals(this.id);
56+
return QueryParamsComparator.isIdEqual(this, queryParams);
5757
}
58+
5859
}

src/main/java/io/securecodebox/persistence/defectdojo/model/Engagement.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
@AllArgsConstructor
1818
@EqualsAndHashCode
1919
@JsonInclude(JsonInclude.Include.NON_NULL)
20-
public final class Engagement implements Model {
20+
public final class Engagement implements Model, HasId, HasName {
2121
@JsonProperty("branch_tag")
2222
private String branch;
2323

2424
@JsonProperty
25-
private Long id;
25+
private long id;
2626

2727
@JsonProperty
2828
private String name;
@@ -94,15 +94,15 @@ public final class Engagement implements Model {
9494

9595
@Override
9696
public boolean equalsQueryString(Map<String, Object> queryParams) {
97-
if (queryParams == null) {
97+
if (QueryParamsComparator.isNull(queryParams)) {
9898
return false;
9999
}
100100

101-
if (queryParams.containsKey("id") && queryParams.get("id") != null && queryParams.get("id").equals(this.id)) {
101+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
102102
return true;
103103
}
104104

105-
if (queryParams.containsKey("name") && queryParams.get("name") != null && queryParams.get("name").equals(this.name)) {
105+
if (QueryParamsComparator.isNameEqual(this, queryParams)) {
106106
return true;
107107
}
108108

src/main/java/io/securecodebox/persistence/defectdojo/model/Finding.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
@AllArgsConstructor
2222
@EqualsAndHashCode
2323
@JsonInclude(JsonInclude.Include.NON_NULL)
24-
public final class Finding implements Model {
24+
public final class Finding implements Model, HasId {
2525
@JsonProperty
2626
private long id;
2727

@@ -121,11 +121,11 @@ public String getNumericalSeverity() {
121121

122122
@Override
123123
public boolean equalsQueryString(Map<String, Object> queryParams) {
124-
if (queryParams == null) {
124+
if (QueryParamsComparator.isNull(queryParams)) {
125125
return false;
126126
}
127127

128-
return queryParams.containsKey("id") && queryParams.get("id").equals(this.id);
128+
return QueryParamsComparator.isIdEqual(this, queryParams);
129129
}
130130

131131
public enum Severity {

src/main/java/io/securecodebox/persistence/defectdojo/model/Group.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
@AllArgsConstructor
1818
@EqualsAndHashCode
1919
@JsonInclude(JsonInclude.Include.NON_NULL)
20-
public final class Group implements Model {
20+
public final class Group implements Model, HasId, HasName {
2121
@JsonProperty
2222
private long id;
2323

@@ -36,15 +36,15 @@ public final class Group implements Model {
3636

3737
@Override
3838
public boolean equalsQueryString(Map<String, Object> queryParams) {
39-
if (queryParams == null) {
39+
if (QueryParamsComparator.isNull(queryParams)) {
4040
return false;
4141
}
4242

43-
if (queryParams.containsKey("id") && queryParams.get("id").equals(this.id)) {
43+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
4444
return true;
4545
}
4646

47-
if (queryParams.containsKey("name") && queryParams.get("name").equals(this.name)) {
47+
if (QueryParamsComparator.isNameEqual(this, queryParams)) {
4848
return true;
4949
}
5050

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// SPDX-FileCopyrightText: the secureCodeBox authors
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package io.securecodebox.persistence.defectdojo.model;
6+
7+
/**
8+
* Interface to mark {@link Model models} which have an id
9+
* <p>
10+
* This type is package private because it is an implementation detail of the models and
11+
* z should not be used outside of this package.
12+
* </p>
13+
*/
14+
interface HasId {
15+
long getId();
16+
17+
void setId(long id);
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// SPDX-FileCopyrightText: the secureCodeBox authors
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package io.securecodebox.persistence.defectdojo.model;
6+
7+
/**
8+
* Interface to mark {@link Model models} which have a name
9+
* <p>
10+
* This type is package private because it is an implementation detail of the models and
11+
* z should not be used outside of this package.
12+
* </p>
13+
*/
14+
interface HasName {
15+
String getName();
16+
17+
void setName(String id);
18+
}

src/main/java/io/securecodebox/persistence/defectdojo/model/Product.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
@AllArgsConstructor
1818
@EqualsAndHashCode
1919
@JsonInclude(JsonInclude.Include.NON_NULL)
20-
public final class Product implements Model {
20+
public final class Product implements Model, HasId, HasName {
2121
@JsonProperty
2222
private long id;
2323

@@ -53,15 +53,15 @@ public final class Product implements Model {
5353

5454
@Override
5555
public boolean equalsQueryString(Map<String, Object> queryParams) {
56-
if (queryParams == null) {
56+
if (QueryParamsComparator.isNull(queryParams)) {
5757
return false;
5858
}
5959

60-
if (queryParams.containsKey("id") && queryParams.get("id").equals(this.id)) {
60+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
6161
return true;
6262
}
6363

64-
if (queryParams.containsKey("name") && queryParams.get("name").equals(this.name)) {
64+
if (QueryParamsComparator.isNameEqual(this, queryParams)) {
6565
return true;
6666
}
6767

src/main/java/io/securecodebox/persistence/defectdojo/model/ProductType.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
@AllArgsConstructor
1717
@EqualsAndHashCode
1818
@JsonInclude(JsonInclude.Include.NON_NULL)
19-
public final class ProductType implements Model {
19+
public final class ProductType implements Model, HasId, HasName {
2020
@JsonProperty
2121
private long id;
2222

@@ -32,15 +32,15 @@ public final class ProductType implements Model {
3232

3333
@Override
3434
public boolean equalsQueryString(Map<String, Object> queryParams) {
35-
if (queryParams == null) {
35+
if (QueryParamsComparator.isNull(queryParams)) {
3636
return false;
3737
}
3838

39-
if (queryParams.containsKey("id") && queryParams.get("id").equals(this.id)) {
39+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
4040
return true;
4141
}
4242

43-
if (queryParams.containsKey("name") && queryParams.get("name").equals(this.name)) {
43+
if (QueryParamsComparator.isNameEqual(this, queryParams)) {
4444
return true;
4545
}
4646

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// SPDX-FileCopyrightText: the secureCodeBox authors
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
5+
package io.securecodebox.persistence.defectdojo.model;
6+
7+
import java.util.Map;
8+
9+
/**
10+
* Pure static helper class
11+
* <p>
12+
* This type is package private because it is an implementation detail of the models and
13+
* should not be used outside of this package.
14+
* </p>
15+
*/
16+
final class QueryParamsComparator {
17+
18+
static final String QUERY_PARAM_KEY_FOR_ID = "id";
19+
static final String QUERY_PARAM_KEY_FOR_NAME = "name";
20+
21+
private QueryParamsComparator() {
22+
super();
23+
}
24+
25+
static boolean isNull(Object o) {
26+
return o == null;
27+
}
28+
29+
static boolean isIdEqual(HasId model, Map<String, Object> queryParams) {
30+
if (isNull(model)) {
31+
return false;
32+
}
33+
34+
if (isNull(queryParams)) {
35+
return false;
36+
}
37+
38+
if (!queryParams.containsKey(QUERY_PARAM_KEY_FOR_ID)) {
39+
return false;
40+
}
41+
42+
// FIXME: Since th generic type for value is Object, possible NPE here!
43+
return queryParams.get(QUERY_PARAM_KEY_FOR_ID).equals(model.getId());
44+
}
45+
46+
static boolean isNameEqual(HasName model, Map<String, Object> queryParams) {
47+
if (isNull(model)) {
48+
return false;
49+
}
50+
51+
if (isNull(queryParams)) {
52+
return false;
53+
}
54+
55+
if (!queryParams.containsKey(QUERY_PARAM_KEY_FOR_NAME)) {
56+
return false;
57+
}
58+
59+
if (isNull(queryParams.get(QUERY_PARAM_KEY_FOR_NAME))) {
60+
return false;
61+
}
62+
63+
return queryParams.get(QUERY_PARAM_KEY_FOR_NAME).equals(model.getName());
64+
}
65+
}

src/main/java/io/securecodebox/persistence/defectdojo/model/RiskAcceptance.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
@AllArgsConstructor
1818
@EqualsAndHashCode
1919
@JsonInclude(JsonInclude.Include.NON_NULL)
20-
public final class RiskAcceptance implements Model {
20+
public final class RiskAcceptance implements Model, HasId {
2121
@JsonProperty
2222
private long id;
2323

@@ -58,10 +58,10 @@ public final class RiskAcceptance implements Model {
5858

5959
@Override
6060
public boolean equalsQueryString(Map<String, Object> queryParams) {
61-
if (queryParams == null) {
61+
if (QueryParamsComparator.isNull(queryParams)) {
6262
return false;
6363
}
6464

65-
return queryParams.containsKey("id") && queryParams.get("id").equals(this.id);
65+
return QueryParamsComparator.isIdEqual(this, queryParams);
6666
}
6767
}

src/main/java/io/securecodebox/persistence/defectdojo/model/Test.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
@AllArgsConstructor
1919
@EqualsAndHashCode
2020
@JsonInclude(JsonInclude.Include.NON_NULL)
21-
public final class Test implements Model {
21+
public final class Test implements Model, HasId {
2222
@JsonProperty
2323
private long id;
2424

@@ -63,11 +63,11 @@ public final class Test implements Model {
6363

6464
@Override
6565
public boolean equalsQueryString(Map<String, Object> queryParams) {
66-
if (queryParams == null) {
66+
if (QueryParamsComparator.isNull(queryParams)) {
6767
return false;
6868
}
6969

70-
if (queryParams.containsKey("id") && queryParams.get("id").equals(this.id)) {
70+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
7171
return true;
7272
}
7373

src/main/java/io/securecodebox/persistence/defectdojo/model/TestType.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
@AllArgsConstructor
1717
@EqualsAndHashCode
1818
@JsonInclude(JsonInclude.Include.NON_NULL)
19-
public final class TestType implements Model {
19+
public final class TestType implements Model, HasId, HasName {
2020
@JsonProperty
2121
private long id;
2222

@@ -33,15 +33,15 @@ public final class TestType implements Model {
3333

3434
@Override
3535
public boolean equalsQueryString(Map<String, Object> queryParams) {
36-
if (queryParams == null) {
36+
if (QueryParamsComparator.isNull(queryParams)) {
3737
return false;
3838
}
3939

40-
if (queryParams.containsKey("id") && queryParams.get("id").equals(this.id)) {
40+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
4141
return true;
4242
}
4343

44-
if (queryParams.containsKey("name") && queryParams.get("name").equals(this.name)) {
44+
if (QueryParamsComparator.isNameEqual(this, queryParams)) {
4545
return true;
4646
}
4747

src/main/java/io/securecodebox/persistence/defectdojo/model/ToolConfig.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
@AllArgsConstructor
1717
@EqualsAndHashCode
1818
@JsonInclude(JsonInclude.Include.NON_NULL)
19-
public final class ToolConfig implements Model {
19+
public final class ToolConfig implements Model, HasId, HasName {
2020
@JsonProperty
2121
private long id;
2222

@@ -38,15 +38,15 @@ public final class ToolConfig implements Model {
3838

3939
@Override
4040
public boolean equalsQueryString(Map<String, Object> queryParams) {
41-
if (queryParams == null) {
41+
if (QueryParamsComparator.isNull(queryParams)) {
4242
return false;
4343
}
4444

45-
if (queryParams.containsKey("id") && queryParams.get("id").equals(this.id)) {
45+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
4646
return true;
4747
}
4848

49-
if (queryParams.containsKey("name") && queryParams.get("name").equals(this.name)) {
49+
if (QueryParamsComparator.isNameEqual(this, queryParams)) {
5050
return true;
5151
}
5252

src/main/java/io/securecodebox/persistence/defectdojo/model/ToolType.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
@AllArgsConstructor
1717
@EqualsAndHashCode
1818
@JsonInclude(JsonInclude.Include.NON_NULL)
19-
public final class ToolType implements Model {
19+
public final class ToolType implements Model, HasId, HasName {
2020
@JsonProperty
2121
private long id;
2222

@@ -29,15 +29,15 @@ public final class ToolType implements Model {
2929

3030
@Override
3131
public boolean equalsQueryString(Map<String, Object> queryParams) {
32-
if (queryParams == null) {
32+
if (QueryParamsComparator.isNull(queryParams)) {
3333
return false;
3434
}
3535

36-
if (queryParams.containsKey("id") && queryParams.get("id").equals(this.id)) {
36+
if (QueryParamsComparator.isIdEqual(this, queryParams)) {
3737
return true;
3838
}
3939

40-
if (queryParams.containsKey("name") && queryParams.get("name").equals(this.name)) {
40+
if (QueryParamsComparator.isNameEqual(this, queryParams)) {
4141
return true;
4242
}
4343

0 commit comments

Comments
 (0)