Skip to content

Commit cd2c52e

Browse files
authored
Merge pull request #19 from JavaWebStack/qol
Implemented equals methods and concat
2 parents 7c15a41 + 57ac5b9 commit cd2c52e

File tree

5 files changed

+90
-0
lines changed

5 files changed

+90
-0
lines changed

src/main/java/org/javawebstack/abstractdata/AbstractArray.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,4 +343,41 @@ public AbstractElement clone() {
343343
return new AbstractArrayCollector<>(e -> e);
344344
}
345345

346+
public boolean equals(Object obj, boolean strict) {
347+
if (obj == null)
348+
return false;
349+
if (!(obj instanceof AbstractElement))
350+
return false;
351+
try {
352+
AbstractArray arr = ((AbstractElement) obj).array(strict);
353+
if (arr.size() != arr.size())
354+
return false;
355+
356+
for (int i = 0; i < size(); i++) {
357+
if (!(get(i).equals(arr.get(i), strict)))
358+
return false;
359+
}
360+
return true;
361+
} catch (AbstractCoercingException ignored) {
362+
return false;
363+
}
364+
}
365+
366+
public boolean equals (Object obj) {
367+
return equals(obj, false);
368+
}
369+
370+
public AbstractArray addAll(AbstractArray array) {
371+
elements.addAll(array.elements);
372+
return this;
373+
}
374+
375+
public AbstractArray concat(AbstractArray... array) {
376+
AbstractArray newArr = new AbstractArray();
377+
newArr.addAll(this);
378+
for (AbstractArray arr : array)
379+
newArr.addAll(arr);
380+
381+
return newArr;
382+
}
346383
}

src/main/java/org/javawebstack/abstractdata/AbstractElement.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,4 +246,5 @@ public boolean isPrimitive() {
246246
}
247247
}
248248

249+
boolean equals(Object obj, boolean strict);
249250
}

src/main/java/org/javawebstack/abstractdata/AbstractNull.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,12 @@ public AbstractElement clone() {
5555
public Type getType() {
5656
return Type.NULL;
5757
}
58+
59+
public boolean equals(Object obj, boolean strict) {
60+
return obj == null || obj instanceof AbstractNull;
61+
}
62+
63+
public boolean equals (Object obj) {
64+
return equals(obj, false);
65+
}
5866
}

src/main/java/org/javawebstack/abstractdata/AbstractObject.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,4 +267,28 @@ public AbstractElement clone() {
267267
return new AbstractObjectCollector<>(keyFunction, valueFunction);
268268
}
269269

270+
public boolean equals(Object obj, boolean strict) {
271+
if (obj == null)
272+
return false;
273+
if (!(obj instanceof AbstractElement))
274+
return false;
275+
try {
276+
AbstractObject object = ((AbstractElement) obj).object(strict);
277+
if (size() != object.size())
278+
return false;
279+
for (String key : keys()) {
280+
if (!object.has(key))
281+
return false;
282+
if (!object.get(key).equals(get(key), strict))
283+
return false;
284+
}
285+
return true;
286+
} catch (AbstractCoercingException ignored) {
287+
return false;
288+
}
289+
}
290+
291+
public boolean equals (Object obj) {
292+
return equals(obj, false);
293+
}
270294
}

src/main/java/org/javawebstack/abstractdata/AbstractPrimitive.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,24 @@ public AbstractElement clone() {
175175
return from(value);
176176
}
177177

178+
public boolean equals(Object obj, boolean strict) {
179+
if (obj == null)
180+
return false;
181+
if (!(obj instanceof AbstractPrimitive))
182+
return false;
183+
AbstractPrimitive primitive = (AbstractPrimitive) obj;
184+
try {
185+
if(isBoolean())
186+
return bool() == primitive.bool(strict);
187+
if(isNumber())
188+
return number().equals(primitive.number(strict));
189+
if(isString())
190+
return string().equals(primitive.string(strict));
191+
} catch (AbstractCoercingException ignored) {}
192+
return false;
193+
}
194+
195+
public boolean equals (Object obj) {
196+
return equals(obj, false);
197+
}
178198
}

0 commit comments

Comments
 (0)