1 package org.opentrafficsim.editor.extensions;
2
3 import java.awt.Color;
4 import java.util.LinkedHashMap;
5
6 import org.djunits.value.vdouble.scalar.Angle;
7 import org.djunits.value.vdouble.scalar.Direction;
8 import org.djunits.value.vdouble.scalar.Length;
9 import org.djunits.value.vdouble.scalar.LinearDensity;
10 import org.djutils.draw.point.Point2d;
11 import org.djutils.exceptions.Throw;
12 import org.opentrafficsim.base.StripeElement.StripeLateralSync;
13 import org.opentrafficsim.xml.bindings.AngleAdapter;
14 import org.opentrafficsim.xml.bindings.ArcDirectionAdapter;
15 import org.opentrafficsim.xml.bindings.BooleanAdapter;
16 import org.opentrafficsim.xml.bindings.ColorAdapter;
17 import org.opentrafficsim.xml.bindings.DirectionAdapter;
18 import org.opentrafficsim.xml.bindings.DoubleAdapter;
19 import org.opentrafficsim.xml.bindings.ExpressionAdapter;
20 import org.opentrafficsim.xml.bindings.IntegerAdapter;
21 import org.opentrafficsim.xml.bindings.LengthAdapter;
22 import org.opentrafficsim.xml.bindings.LengthBeginEndAdapter;
23 import org.opentrafficsim.xml.bindings.LinearDensityAdapter;
24 import org.opentrafficsim.xml.bindings.Point2dAdapter;
25 import org.opentrafficsim.xml.bindings.StringAdapter;
26 import org.opentrafficsim.xml.bindings.StripeLateralSyncAdapter;
27 import org.opentrafficsim.xml.bindings.types.ArcDirectionType.ArcDirection;
28 import org.opentrafficsim.xml.bindings.types.ExpressionType;
29 import org.opentrafficsim.xml.bindings.types.LengthBeginEndType.LengthBeginEnd;
30
31
32
33
34
35
36
37
38
39
40 public final class Adapters
41 {
42
43
44 private static final java.util.Map<Class<?>, ExpressionAdapter<?, ?>> ADAPTERS = new LinkedHashMap<>();
45
46 static
47 {
48 ADAPTERS.put(Angle.class, new AngleAdapter());
49 ADAPTERS.put(ArcDirection.class, new ArcDirectionAdapter());
50 ADAPTERS.put(Boolean.class, new BooleanAdapter());
51 ADAPTERS.put(Color.class, new ColorAdapter());
52 ADAPTERS.put(Direction.class, new DirectionAdapter());
53 ADAPTERS.put(Double.class, new DoubleAdapter());
54 ADAPTERS.put(Integer.class, new IntegerAdapter());
55 ADAPTERS.put(Length.class, new LengthAdapter());
56 ADAPTERS.put(LengthBeginEnd.class, new LengthBeginEndAdapter());
57 ADAPTERS.put(LinearDensity.class, new LinearDensityAdapter());
58 ADAPTERS.put(Point2d.class, new Point2dAdapter());
59 ADAPTERS.put(String.class, new StringAdapter());
60 ADAPTERS.put(StripeLateralSync.class, new StripeLateralSyncAdapter());
61 }
62
63
64 private Adapters()
65 {
66
67 }
68
69
70
71
72
73
74
75
76
77
78 @SuppressWarnings("unchecked")
79 public static <T, E extends ExpressionType<T>> ExpressionAdapter<T, E> get(final Class<T> clazz)
80 {
81 Throw.when(!ADAPTERS.containsKey(clazz), RuntimeException.class,
82 "No adapter for class %s available. Add it in the static code block of MapData or create one directly.");
83 return (ExpressionAdapter<T, E>) ADAPTERS.get(clazz);
84 }
85
86
87
88
89
90
91
92
93 public static <T, E extends ExpressionType<T>> void set(final Class<T> clazz, final ExpressionAdapter<T, E> adapter)
94 {
95 Throw.whenNull(clazz, "Class may not be null.");
96 Throw.whenNull(adapter, "Adapter may not be null.");
97 ADAPTERS.put(clazz, adapter);
98 }
99
100 }