Skip to content

Commit e3245ea

Browse files
committed
No longer require that Resources implement equals() and hashCode().
Two problems: 1. Most corresponding underlying middleware implementations don't require them to be implemented, so it's probably futile to require it at this level. 2. Resources are now intrinsically tied to Sessions, which means that equality doesn't quite make sense anymore.
1 parent 095789d commit e3245ea

14 files changed

+7
-456
lines changed

src/main/java/crud/core/Resource.java

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,5 @@
3838
* @author Rick Warren
3939
*/
4040
public interface Resource extends AsyncCloseable {
41-
42-
/**
43-
* A resource is considered to have an intrinsic identity. Two resource
44-
* objects are considered to be equal if they have the same identity.
45-
* For example, two resources available via HTTP would be equal if they
46-
* point to the same URI. Equality should <em>not</em> require performing
47-
* expensive value retrievals and comparing the results.
48-
*/
49-
@Override
50-
public abstract boolean equals(Object other);
51-
52-
@Override
53-
public abstract int hashCode();
54-
41+
// empty
5542
}

src/main/java/crud/pattern/ResourceMerger.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package crud.pattern;
1616

1717
import crud.core.ReadableResource;
18-
import crud.core.Resource;
1918
import crud.core.WritableResource;
2019
import crud.transform.TransformedReadableResource;
2120
import crud.transform.TransformedWritableResource;
@@ -84,16 +83,6 @@ public static <RRSRC, WRSRC, RESPONSE> ResourceMerger<RESPONSE> mapToWriter(
8483
*/
8584
public abstract Func0<Observable<RESPONSE>> toFunction();
8685

87-
/**
88-
* Two mergers are considered to be equal if and only if their
89-
* constituent {@link Resource}s and {@link Function}s (if any) are equal.
90-
*/
91-
@Override
92-
public abstract boolean equals(Object other);
93-
94-
@Override // overridden here to avoid compiler warnings; see impl. below
95-
public abstract int hashCode();
96-
9786
private ResourceMerger() {
9887
// restrict visibility
9988
}

src/main/java/crud/transform/DelegateObjectMethods.java

Lines changed: 0 additions & 103 deletions
This file was deleted.

src/main/java/crud/transform/TransformedReadableResource.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package crud.transform;
1616

1717
import java.util.Objects;
18-
import java.util.concurrent.Callable;
1918

2019
import crud.core.ReadableResource;
2120
import rx.Observable;
@@ -64,21 +63,7 @@ public <TO> TransformedReadableResource<TO> mapValue(
6463
* this resource.
6564
*/
6665
public Func0<Observable<RSRC>> toFunction() {
67-
return toResourceCallable();
68-
}
69-
70-
/**
71-
* Return a {@link Callable} that delegates to {@link #read()}.
72-
* The {@code Callable} overrides {@link Object#equals(Object)},
73-
* {@link Object#hashCode()}, and {@link Object#toString()} in terms of
74-
* this resource.
75-
*/
76-
public Callable<Observable<RSRC>> toCallable() {
77-
return toResourceCallable();
78-
}
79-
80-
private DelegateObjectMethods.Callable<Observable<RSRC>> toResourceCallable() {
81-
return new DelegateObjectMethods.Callable<Observable<RSRC>>(this) {
66+
return new Func0<Observable<RSRC>>() {
8267
@Override
8368
public Observable<RSRC> call() {
8469
return TransformedReadableResource.this.read();

src/main/java/crud/transform/TransformedReadableResourceSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public TransformedReadableResource<RSRC> get(final K key, final Session session)
6969
}
7070

7171
public Func2<KEY, Session, TransformedReadableResource<RSRC>> toFunction() {
72-
return new DelegateObjectMethods.Function2<KEY, Session, TransformedReadableResource<RSRC>>(this) {
72+
return new Func2<KEY, Session, TransformedReadableResource<RSRC>>() {
7373
@Override
7474
public TransformedReadableResource<RSRC> call(final KEY key, final Session session) {
7575
return get(key, session);

src/main/java/crud/transform/TransformedWritableResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public <TO> TransformedWritableResource<TO, RESPONSE> adaptNewValue(
7878
* this resource.
7979
*/
8080
public Func1<RSRC, Observable<RESPONSE>> toFunction() {
81-
return new DelegateObjectMethods.Function1<RSRC, Observable<RESPONSE>>(this) {
81+
return new Func1<RSRC, Observable<RESPONSE>>() {
8282
@Override
8383
public Observable<RESPONSE> call(final RSRC newValue) {
8484
return TransformedWritableResource.this.write(newValue);

src/main/java/crud/transform/TransformedWritableResourceSet.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public TransformedWritableResource<RSRC, RESPONSE> get(final K key, final Sessio
8383
}
8484

8585
public Func2<KEY, Session, TransformedWritableResource<RSRC, RESPONSE>> toFunction() {
86-
return new DelegateObjectMethods.Function2<KEY, Session, TransformedWritableResource<RSRC, RESPONSE>>(this) {
86+
return new Func2<KEY, Session, TransformedWritableResource<RSRC, RESPONSE>>() {
8787
@Override
8888
public TransformedWritableResource<RSRC, RESPONSE> call(final KEY key, final Session session) {
8989
return get(key, session);

src/test/java/crud/core/ResourceSetTest.java

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
*/
1515
package crud.core;
1616

17-
import static org.junit.Assert.assertEquals;
1817
import static org.junit.Assert.assertNotNull;
1918
import static org.mockito.Mockito.mock;
2019

@@ -42,20 +41,6 @@ public void getDefaultKeyReturnsNonNullResource() {
4241
assertNotNull(resource);
4342
}
4443

45-
@Test
46-
public void twoResourcesFromSameKeyAreEqual() {
47-
// given:
48-
final ResourceSet<KEY, ?> rsrcSet = createDefaultResourceSet();
49-
final KEY key = createDefaultKey();
50-
51-
// when:
52-
final Resource resource1 = rsrcSet.get(key, this.mockSession);
53-
final Resource resource2 = rsrcSet.get(key, this.mockSession);
54-
55-
// then:
56-
assertEquals(resource1, resource2);
57-
}
58-
5944
/**
6045
* Create and return a new instance of the {@link ResourceSet} class
6146
* under test.

src/test/java/crud/core/ResourceTest.java

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright 2014 Rick Warren
1+
/* Copyright 2014–2015 Rick Warren
22
*
33
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
44
* use this file except in compliance with the License. You may obtain a copy of
@@ -14,10 +14,6 @@
1414
*/
1515
package crud.core;
1616

17-
import static org.junit.Assert.assertEquals;
18-
19-
import org.junit.Test;
20-
2117

2218
/**
2319
* A base class for all unit test classes that operate on
@@ -26,26 +22,6 @@
2622
*/
2723
public abstract class ResourceTest {
2824

29-
@Test
30-
public void twoDefaultInstancesAreEqual() {
31-
// given:
32-
final Resource resource1 = createDefaultResource();
33-
final Resource resource2 = createDefaultResource();
34-
35-
// then:
36-
assertEquals(resource1, resource2);
37-
}
38-
39-
@Test
40-
public void twoDefaultInstancesHaveSameHashcode() {
41-
// given:
42-
final Resource resource1 = createDefaultResource();
43-
final Resource resource2 = createDefaultResource();
44-
45-
// then:
46-
assertEquals(resource1.hashCode(), resource2.hashCode());
47-
}
48-
4925
/**
5026
* Create a new instance of the resource.
5127
*/

src/test/java/crud/pattern/ResourceMergerTest.java

Lines changed: 1 addition & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package crud.pattern;
1616

1717
import static crud.core.RxAssertions.assertObservablesEqual;
18-
import static org.junit.Assert.assertEquals;
1918
import static org.mockito.Mockito.mock;
2019
import static org.mockito.Mockito.times;
2120
import static org.mockito.Mockito.verify;
@@ -37,71 +36,7 @@ public abstract class ResourceMergerTest {
3736

3837
@Before
3938
public void setup() {
40-
when(this.mockReader.read()).thenReturn(mockReaderState);
41-
}
42-
43-
@Test
44-
public void twoDefaultMergersAreEqual() {
45-
// given:
46-
final ResourceMerger<Object> merger1 = createDefaultMerger(this.mockReader);
47-
final ResourceMerger<Object> merger2 = createDefaultMerger(this.mockReader);
48-
49-
// then:
50-
assertEquals(merger1, merger2);
51-
}
52-
53-
@Test
54-
public void hashCodesOfEqualMergersAreEqual() {
55-
// given:
56-
final ResourceMerger<Object> merger1 = createDefaultMerger(this.mockReader);
57-
final ResourceMerger<Object> merger2 = createDefaultMerger(this.mockReader);
58-
59-
// then:
60-
assertEquals(merger1.hashCode(), merger2.hashCode());
61-
}
62-
63-
@Test
64-
public void toStringResultsOfEqualMergersAreEqual() {
65-
// given:
66-
final ResourceMerger<Object> merger1 = createDefaultMerger(this.mockReader);
67-
final ResourceMerger<Object> merger2 = createDefaultMerger(this.mockReader);
68-
69-
// then:
70-
assertEquals(merger1.toString(), merger2.toString());
71-
}
72-
73-
@Test
74-
public void functionsOfEqualMergersAreEqual() {
75-
// given:
76-
final ResourceMerger<Object> merger1 = createDefaultMerger(this.mockReader);
77-
final ResourceMerger<Object> merger2 = createDefaultMerger(this.mockReader);
78-
79-
// then:
80-
assertEquals(merger1.toFunction(), merger2.toFunction());
81-
}
82-
83-
@Test
84-
public void functionsOfEqualMergersHaveEqualHashCodes() {
85-
// given:
86-
final ResourceMerger<Object> merger1 = createDefaultMerger(this.mockReader);
87-
final ResourceMerger<Object> merger2 = createDefaultMerger(this.mockReader);
88-
final Func0<Observable<Object>> function1 = merger1.toFunction();
89-
final Func0<Observable<Object>> function2 = merger2.toFunction();
90-
91-
// then:
92-
assertEquals(function1.hashCode(), function2.hashCode());
93-
}
94-
95-
@Test
96-
public void functionsOfEqualMergersHaveEqualStrings() {
97-
// given:
98-
final ResourceMerger<Object> merger1 = createDefaultMerger(this.mockReader);
99-
final ResourceMerger<Object> merger2 = createDefaultMerger(this.mockReader);
100-
final Func0<Observable<Object>> function1 = merger1.toFunction();
101-
final Func0<Observable<Object>> function2 = merger2.toFunction();
102-
103-
// then:
104-
assertEquals(function1.toString(), function2.toString());
39+
when(this.mockReader.read()).thenReturn(this.mockReaderState);
10540
}
10641

10742
@Test

0 commit comments

Comments
 (0)