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