77
88public interface StringExpression <PROPERTY > extends PropertyMetamodel <PROPERTY > {
99
10- abstract class AbstractStringExpression <PROPERTY > implements StringExpression <PROPERTY > {
10+ abstract class OneArgumentStringExpression <PROPERTY > implements StringExpression <PROPERTY > {
11+ private final String name ;
12+ public final PropertyMetamodel <?> argument ;
13+
14+ protected OneArgumentStringExpression (String name , PropertyMetamodel <?> argument ) {
15+ this .name = Objects .requireNonNull (name );
16+ this .argument = Objects .requireNonNull (argument );
17+ }
18+
19+ @ Override
20+ public String getName () {
21+ return name ;
22+ }
23+
24+ @ Override
25+ public Class <?> asClass () {
26+ return argument .asClass ();
27+ }
28+
29+ @ Override
30+ public EntityPropertyType <?, ?> asType () {
31+ return argument .asType ();
32+ }
33+
34+ @ Override
35+ public boolean equals (Object o ) {
36+ if (this == o ) return true ;
37+ if (!(o instanceof StringExpression .OneArgumentStringExpression )) return false ;
38+ OneArgumentStringExpression <?> that = (OneArgumentStringExpression <?>) o ;
39+ return argument .equals (that .argument );
40+ }
41+
42+ @ Override
43+ public int hashCode () {
44+ return Objects .hash (argument );
45+ }
46+ }
47+
48+ abstract class TwoArgumentsStringExpression <PROPERTY > implements StringExpression <PROPERTY > {
49+ private final String name ;
1150 private final PropertyMetamodel <?> propertyMetamodel ;
12- public final Operand left ;
13- public final Operand right ;
51+ public final Operand first ;
52+ public final Operand second ;
1453
15- protected AbstractStringExpression (
16- PropertyMetamodel <?> propertyMetamodel , Operand left , Operand right ) {
54+ protected TwoArgumentsStringExpression (
55+ String name , PropertyMetamodel <?> propertyMetamodel , Operand first , Operand second ) {
56+ this .name = Objects .requireNonNull (name );
1757 this .propertyMetamodel = Objects .requireNonNull (propertyMetamodel );
18- this .left = Objects .requireNonNull (left );
19- this .right = Objects .requireNonNull (right );
58+ this .first = Objects .requireNonNull (first );
59+ this .second = Objects .requireNonNull (second );
60+ }
61+
62+ @ Override
63+ public String getName () {
64+ return name ;
2065 }
2166
2267 @ Override
@@ -32,28 +77,98 @@ public Class<?> asClass() {
3277 @ Override
3378 public boolean equals (Object o ) {
3479 if (this == o ) return true ;
35- if (!(o instanceof StringExpression .AbstractStringExpression )) return false ;
36- AbstractStringExpression <?> that = (AbstractStringExpression <?>) o ;
80+ if (!(o instanceof StringExpression .TwoArgumentsStringExpression )) return false ;
81+ TwoArgumentsStringExpression <?> that = (TwoArgumentsStringExpression <?>) o ;
3782 return propertyMetamodel .equals (that .propertyMetamodel )
38- && left .equals (that .left )
39- && right .equals (that .right );
83+ && first .equals (that .first )
84+ && second .equals (that .second );
4085 }
4186
4287 @ Override
4388 public int hashCode () {
44- return Objects .hash (propertyMetamodel , left , right );
89+ return Objects .hash (propertyMetamodel , first , second );
4590 }
4691 }
4792
48- class Concat <PROPERTY > extends AbstractStringExpression <PROPERTY > {
93+ class Concat <PROPERTY > extends TwoArgumentsStringExpression <PROPERTY > {
4994
5095 public Concat (PropertyMetamodel <?> propertyMetamodel , Operand left , Operand right ) {
51- super (propertyMetamodel , left , right );
96+ super ("concat" , propertyMetamodel , left , right );
5297 }
5398
5499 @ Override
55- public String getName () {
56- return "concat" ;
100+ public void accept (PropertyMetamodel .Visitor visitor ) {
101+ if (visitor instanceof StringExpression .Visitor ) {
102+ StringExpression .Visitor v = (StringExpression .Visitor ) visitor ;
103+ v .visit (this );
104+ }
105+ }
106+ }
107+
108+ class Lower <PROPERTY > extends OneArgumentStringExpression <PROPERTY > {
109+
110+ public Lower (PropertyMetamodel <?> propertyMetamodel ) {
111+ super ("lower" , propertyMetamodel );
112+ }
113+
114+ @ Override
115+ public void accept (PropertyMetamodel .Visitor visitor ) {
116+ if (visitor instanceof StringExpression .Visitor ) {
117+ StringExpression .Visitor v = (StringExpression .Visitor ) visitor ;
118+ v .visit (this );
119+ }
120+ }
121+ }
122+
123+ class Ltrim <PROPERTY > extends OneArgumentStringExpression <PROPERTY > {
124+
125+ public Ltrim (PropertyMetamodel <?> propertyMetamodel ) {
126+ super ("ltrim" , propertyMetamodel );
127+ }
128+
129+ @ Override
130+ public void accept (PropertyMetamodel .Visitor visitor ) {
131+ if (visitor instanceof StringExpression .Visitor ) {
132+ StringExpression .Visitor v = (StringExpression .Visitor ) visitor ;
133+ v .visit (this );
134+ }
135+ }
136+ }
137+
138+ class Rtrim <PROPERTY > extends OneArgumentStringExpression <PROPERTY > {
139+
140+ public Rtrim (PropertyMetamodel <?> propertyMetamodel ) {
141+ super ("rtrim" , propertyMetamodel );
142+ }
143+
144+ @ Override
145+ public void accept (PropertyMetamodel .Visitor visitor ) {
146+ if (visitor instanceof StringExpression .Visitor ) {
147+ StringExpression .Visitor v = (StringExpression .Visitor ) visitor ;
148+ v .visit (this );
149+ }
150+ }
151+ }
152+
153+ class Trim <PROPERTY > extends OneArgumentStringExpression <PROPERTY > {
154+
155+ public Trim (PropertyMetamodel <?> propertyMetamodel ) {
156+ super ("trim" , propertyMetamodel );
157+ }
158+
159+ @ Override
160+ public void accept (PropertyMetamodel .Visitor visitor ) {
161+ if (visitor instanceof StringExpression .Visitor ) {
162+ StringExpression .Visitor v = (StringExpression .Visitor ) visitor ;
163+ v .visit (this );
164+ }
165+ }
166+ }
167+
168+ class Upper <PROPERTY > extends OneArgumentStringExpression <PROPERTY > {
169+
170+ public Upper (PropertyMetamodel <?> propertyMetamodel ) {
171+ super ("upper" , propertyMetamodel );
57172 }
58173
59174 @ Override
@@ -67,5 +182,15 @@ public void accept(PropertyMetamodel.Visitor visitor) {
67182
68183 interface Visitor {
69184 void visit (StringExpression .Concat <?> concat );
185+
186+ void visit (StringExpression .Lower <?> lower );
187+
188+ void visit (StringExpression .Ltrim <?> ltrim );
189+
190+ void visit (StringExpression .Rtrim <?> rtrim );
191+
192+ void visit (StringExpression .Trim <?> trim );
193+
194+ void visit (StringExpression .Upper <?> upper );
70195 }
71196}
0 commit comments