1 package org.opentrafficsim.base.parameters.constraint;
2
3 import java.util.IllegalFormatException;
4
5 import org.djutils.exceptions.Throw;
6
7
8
9
10
11
12
13
14
15
16
17 public enum NumericConstraint implements Constraint<Number>
18 {
19
20
21 POSITIVE("Value of parameter '%s' must be above zero.")
22 {
23 @Override
24 public boolean accept(final Number value)
25 {
26 return value.doubleValue() > 0.0;
27 }
28 },
29
30
31 NEGATIVE("Value of parameter '%s' must be below zero.")
32 {
33 @Override
34 public boolean accept(final Number value)
35 {
36 return value.doubleValue() < 0.0;
37 }
38 },
39
40
41 POSITIVEZERO("Value of parameter '%s' may not be below zero.")
42 {
43 @Override
44 public boolean accept(final Number value)
45 {
46 return value.doubleValue() >= 0.0;
47 }
48 },
49
50
51 NEGATIVEZERO("Value of parameter '%s' may not be above zero.")
52 {
53 @Override
54 public boolean accept(final Number value)
55 {
56 return value.doubleValue() <= 0.0;
57 }
58 },
59
60
61 NONZERO("Value of parameter '%s' may not be zero.")
62 {
63 @Override
64 public boolean accept(final Number value)
65 {
66 return value.doubleValue() != 0.0;
67 }
68 },
69
70
71 ATLEASTONE("Value of parameter '%s' may not be below one.")
72 {
73 @Override
74 public boolean accept(final Number value)
75 {
76 return value.doubleValue() >= 1.0;
77 }
78 };
79
80
81 private final String failMessage;
82
83
84
85
86
87
88 NumericConstraint(final String failMessage)
89 {
90 Throw.whenNull(failMessage, "Default parameter constraint '%s' has null as fail message as given to the constructor,"
91 + " which is not allowed.", this);
92 try
93 {
94
95 String.format(failMessage, "dummy");
96 }
97 catch (IllegalFormatException ife)
98 {
99 throw new RuntimeException("Default parameter constraint " + this.toString()
100 + " has an illegal formatting of the fail message as given to the constructor."
101 + " It should contain a single '%s'.", ife);
102 }
103 this.failMessage = failMessage;
104 }
105
106 @Override
107 public String failMessage()
108 {
109 return this.failMessage;
110 }
111
112 }