8
8
9
9
package org .elasticsearch .geometry .simplify ;
10
10
11
+ import java .util .ArrayList ;
12
+ import java .util .HashMap ;
13
+ import java .util .List ;
11
14
import java .util .Locale ;
12
15
13
16
public interface SimplificationErrorCalculator {
@@ -19,14 +22,41 @@ interface PointLike {
19
22
double y ();
20
23
}
21
24
25
+ class Registry {
26
+ static ArrayList <String > names = new ArrayList <>();
27
+ static HashMap <String , SimplificationErrorCalculator > map = new HashMap <>();
28
+
29
+ static {
30
+ add ("cartesiantrianglearea" , new CartesianTriangleAreaCalculator ());
31
+ add ("trianglearea" , new TriangleAreaCalculator ());
32
+ add ("triangleheight" , new TriangleHeightCalculator ());
33
+ add ("frecheterror" , new FrechetErrorCalculator ());
34
+ }
35
+
36
+ static void add (String name , SimplificationErrorCalculator calculator ) {
37
+ String key = name .toLowerCase (Locale .ROOT );
38
+ if (map .containsKey (key )) {
39
+ throw new IllegalArgumentException ("Duplicate calculator name key: " + key );
40
+ }
41
+ map .put (key , calculator );
42
+ names .add (key );
43
+ }
44
+
45
+ static SimplificationErrorCalculator get (String calculatorName ) {
46
+ SimplificationErrorCalculator calculator = map .get (calculatorName .toLowerCase (Locale .ROOT ));
47
+ if (calculator == null ) {
48
+ throw new IllegalArgumentException ("Unknown geometry simplification error calculator: " + calculatorName );
49
+ }
50
+ return calculator ;
51
+ }
52
+ }
53
+
54
+ static List <String > names () {
55
+ return Registry .names ;
56
+ }
57
+
22
58
static SimplificationErrorCalculator byName (String calculatorName ) {
23
- return switch (calculatorName .toLowerCase (Locale .ROOT )) {
24
- case "cartesiantrianglearea" -> new CartesianTriangleAreaCalculator ();
25
- case "trianglearea" -> new TriangleAreaCalculator ();
26
- case "triangleheight" -> new TriangleHeightCalculator ();
27
- case "frecheterror" -> new FrechetErrorCalculator ();
28
- default -> throw new IllegalArgumentException ("Unknown geometry simplification error calculator: " + calculatorName );
29
- };
59
+ return Registry .get (calculatorName );
30
60
}
31
61
32
62
/**
0 commit comments