Skip to content

Commit ec8ce99

Browse files
gselzerhinerm
authored andcommitted
Extract similar logic to AbstractHints
This also allows us to write an equals() method that is identical for all Hints implementations (essentially just comparing the Hints maps).
1 parent d713192 commit ec8ce99

4 files changed

Lines changed: 78 additions & 115 deletions

File tree

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.scijava.ops.hints;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.NoSuchElementException;
6+
7+
/**
8+
* Default Implementation of
9+
* @author G
10+
*
11+
*/
12+
public abstract class AbstractHints implements Hints {
13+
14+
// Hints are stored by their hint type (the middle term)
15+
final Map<String, String> hints;
16+
17+
public AbstractHints(String... startingHints) {
18+
hints = new HashMap<>();
19+
for(String hint : startingHints)
20+
setHint(hint);
21+
}
22+
23+
AbstractHints(Map<String, String> hints) {
24+
this.hints = hints;
25+
}
26+
27+
@Override
28+
public String setHint(String hint) {
29+
String prefix = getPrefix(hint);
30+
return hints.put(prefix, hint);
31+
}
32+
33+
@Override
34+
public boolean containsHintType(String prefix) {
35+
return hints.containsKey(prefix);
36+
}
37+
38+
@Override
39+
public boolean containsHint(String hint) {
40+
String prefix = getPrefix(hint);
41+
return hints.containsKey(prefix) && hint.equals(hints.get(prefix));
42+
}
43+
44+
@Override
45+
public String getHint(String prefix) {
46+
if (!hints.containsKey(prefix)) throw new NoSuchElementException(
47+
"No hint of type " + prefix + " is contained!");
48+
return hints.get(prefix);
49+
}
50+
51+
private String getPrefix(String hint) {
52+
return hint.split("\\.")[0];
53+
}
54+
55+
@Override
56+
public Map<String, String> getHints() {
57+
return hints;
58+
}
59+
60+
@Override
61+
public boolean equals(Object that) {
62+
if(!(that instanceof AbstractHints)) return false;
63+
AbstractHints thoseHints = (AbstractHints) that;
64+
return getHints().equals(thoseHints.getHints());
65+
}
66+
67+
}

scijava/scijava-ops/src/main/java/org/scijava/ops/hints/AdaptationHints.java

Lines changed: 4 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
1+
12
package org.scijava.ops.hints;
23

34
import java.util.HashMap;
45
import java.util.Map;
5-
import java.util.NoSuchElementException;
66

77
import org.scijava.ops.hints.DefaultOpHints.Adaptable;
88

9-
public class AdaptationHints implements Hints{
10-
11-
Map<String, String> hints;
9+
public class AdaptationHints extends AbstractHints {
1210

1311
private AdaptationHints(Map<String, String> map) {
14-
this.hints = map;
12+
super(map);
1513
}
1614

1715
public static AdaptationHints generateHints(Hints hints) {
@@ -32,35 +30,7 @@ public static AdaptationHints generateHints(Hints hints) {
3230
public String setHint(String hint) {
3331
if (hint.equals(Adaptable.YES)) throw new IllegalArgumentException(
3432
"We cannot allow adaptation during adaptation; this would cause a recursive loop!");
35-
String prefix = getPrefix(hint);
36-
return hints.put(prefix, hint);
37-
}
38-
39-
@Override
40-
public String getHint(String prefix) {
41-
if (!hints.containsKey(prefix)) throw new NoSuchElementException(
42-
"No hint of type " + prefix + " is contained!");
43-
return hints.get(prefix);
44-
}
45-
46-
@Override
47-
public boolean containsHint(String hint) {
48-
String prefix = getPrefix(hint);
49-
return containsHintType(prefix) && hint.equals(hints.get(prefix));
50-
}
51-
52-
@Override
53-
public boolean containsHintType(String prefix) {
54-
return hints.containsKey(prefix);
55-
}
56-
57-
private String getPrefix(String hint) {
58-
return hint.split("\\.")[0];
59-
}
60-
61-
@Override
62-
public Map<String, String> getHints() {
63-
return hints;
33+
return super.setHint(hint);
6434
}
6535

6636
@Override

scijava/scijava-ops/src/main/java/org/scijava/ops/hints/DefaultHints.java

Lines changed: 3 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,57 +12,14 @@
1212
* @author G
1313
*
1414
*/
15-
public class DefaultHints implements Hints {
16-
17-
// Hints are stored by their hint type (the middle term)
18-
private final Map<String, String> hints;
15+
public class DefaultHints extends AbstractHints {
1916

2017
public DefaultHints() {
21-
this(new String[] {Simplifiable.YES, Adaptable.YES});
22-
}
23-
24-
public DefaultHints(String... startingHints) {
25-
hints = new HashMap<>();
26-
for(String hint : startingHints)
27-
setHint(hint);
18+
super(new String[] {Simplifiable.YES, Adaptable.YES});
2819
}
2920

3021
private DefaultHints(Map<String, String> hints) {
31-
this.hints = hints;
32-
}
33-
34-
@Override
35-
public String setHint(String hint) {
36-
String prefix = getPrefix(hint);
37-
return hints.put(prefix, hint);
38-
}
39-
40-
@Override
41-
public boolean containsHintType(String prefix) {
42-
return hints.containsKey(prefix);
43-
}
44-
45-
@Override
46-
public boolean containsHint(String hint) {
47-
String prefix = getPrefix(hint);
48-
return hints.containsKey(prefix) && hints.get(prefix).equals(
49-
hint);
50-
}
51-
52-
@Override
53-
public String getHint(String prefix) {
54-
if (!hints.containsKey(prefix)) throw new NoSuchElementException(
55-
"No hint of type " + prefix + " is contained!");
56-
return hints.get(prefix);
57-
}
58-
59-
private String getPrefix(String hint) {
60-
return hint.split("\\.")[0];
61-
}
62-
63-
@Override
64-
public Map<String, String> getHints() {
65-
return hints;
22+
super(hints);
6623
}
6724

6825
@Override

scijava/scijava-ops/src/main/java/org/scijava/ops/hints/SimplificationHints.java

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
1+
12
package org.scijava.ops.hints;
23

34
import java.util.HashMap;
45
import java.util.Map;
5-
import java.util.NoSuchElementException;
66

77
import org.scijava.ops.hints.DefaultOpHints.Simplifiable;
88

9-
10-
public class SimplificationHints implements Hints {
11-
12-
Map<String, String> hints;
9+
public class SimplificationHints extends AbstractHints {
1310

1411
private SimplificationHints(Map<String, String> map) {
15-
this.hints = map;
12+
super(map);
1613
}
1714

1815
public static SimplificationHints generateHints(Hints hints) {
@@ -33,35 +30,7 @@ public static SimplificationHints generateHints(Hints hints) {
3330
public String setHint(String hint) {
3431
if (hint.equals(Simplifiable.YES)) throw new IllegalArgumentException(
3532
"We cannot allow simplification during simplification; this would cause a recursive loop!");
36-
String prefix = getPrefix(hint);
37-
return hints.put(prefix, hint);
38-
}
39-
40-
@Override
41-
public String getHint(String prefix) {
42-
if (!hints.containsKey(prefix)) throw new NoSuchElementException(
43-
"No hint of type " + prefix + " is contained!");
44-
return hints.get(prefix);
45-
}
46-
47-
@Override
48-
public boolean containsHint(String hint) {
49-
String prefix = getPrefix(hint);
50-
return containsHintType(prefix) && hint.equals(hints.get(prefix));
51-
}
52-
53-
@Override
54-
public boolean containsHintType(String prefix) {
55-
return hints.containsKey(prefix);
56-
}
57-
58-
private String getPrefix(String hint) {
59-
return hint.split("\\.")[0];
60-
}
61-
62-
@Override
63-
public Map<String, String> getHints() {
64-
return hints;
33+
return super.setHint(hint);
6534
}
6635

6736
@Override

0 commit comments

Comments
 (0)