Skip to content

Commit e0fd2e4

Browse files
Add getExtensionMembers method
1 parent d04d98c commit e0fd2e4

2 files changed

Lines changed: 26 additions & 10 deletions

File tree

src/main/java/io/github/malczuuu/problem4j/core/Problem.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,18 @@ static Extension extension(String key, Object value) {
100100
*/
101101
boolean hasExtension(String extension);
102102

103+
/**
104+
* Returns a map of all extension members.
105+
*
106+
* <p>This method provides a complete view of all extension key–value pairs, which is useful when
107+
* callers need to handle extensions in bulk rather than querying them individually. It
108+
* complements {@link #getExtensionValue(String)} and {@link #hasExtension(String)} by exposing
109+
* the full extension payload at once.
110+
*
111+
* @return an unmodifiable map of extension members
112+
*/
113+
Map<String, Object> getExtensionMembers();
114+
103115
/**
104116
* Converts this problem instance into a {@link Problem} builder, pre-populated with its values.
105117
* Useful for creating a modified copy.

src/main/java/io/github/malczuuu/problem4j/core/ProblemImpl.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,26 +93,32 @@ public boolean hasExtension(String extension) {
9393
return extensions.containsKey(extension);
9494
}
9595

96+
@Override
97+
public Map<String, Object> getExtensionMembers() {
98+
return Collections.unmodifiableMap(extensions);
99+
}
100+
96101
@Override
97102
public boolean equals(Object obj) {
98103
if (this == obj) {
99104
return true;
100105
}
101-
if (obj == null || getClass() != obj.getClass()) {
106+
if (!(obj instanceof Problem)) {
102107
return false;
103108
}
104-
ProblemImpl problem = (ProblemImpl) obj;
109+
Problem problem = (Problem) obj;
105110
return Objects.equals(getType(), problem.getType())
106111
&& Objects.equals(getTitle(), problem.getTitle())
107112
&& getStatus() == problem.getStatus()
108113
&& Objects.equals(getDetail(), problem.getDetail())
109114
&& Objects.equals(getInstance(), problem.getInstance())
110-
&& Objects.equals(extensions, problem.extensions);
115+
&& Objects.equals(getExtensionMembers(), problem.getExtensionMembers());
111116
}
112117

113118
@Override
114119
public int hashCode() {
115-
return Objects.hash(getType(), getTitle(), getStatus(), getDetail(), getInstance(), extensions);
120+
return Objects.hash(
121+
getType(), getTitle(), getStatus(), getDetail(), getInstance(), getExtensionMembers());
116122
}
117123

118124
@Override
@@ -132,11 +138,9 @@ public String toString() {
132138
lines.add("\"instance\" : \"" + quote(getInstance().toString()) + "\"");
133139
}
134140

135-
getExtensions()
141+
getExtensionMembers()
136142
.forEach(
137-
field -> {
138-
Object value = getExtensionValue(field);
139-
143+
(field, value) -> {
140144
if (value == null) {
141145
return;
142146
}
@@ -193,10 +197,10 @@ public boolean equals(Object obj) {
193197
if (this == obj) {
194198
return true;
195199
}
196-
if (obj == null || getClass() != obj.getClass()) {
200+
if (!(obj instanceof Extension)) {
197201
return false;
198202
}
199-
ExtensionImpl extension = (ExtensionImpl) obj;
203+
Extension extension = (Extension) obj;
200204
return Objects.equals(getKey(), extension.getKey())
201205
&& Objects.equals(getValue(), extension.getValue());
202206
}

0 commit comments

Comments
 (0)