Project Tiles has retired. For details please refer to its Attic page.
Expression xref
View Javadoc

1   /*
2    * $Id: Expression.java 788032 2009-06-24 14:08:32Z apetrelli $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   * http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  package org.apache.tiles;
23  
24  import static org.apache.tiles.CompareUtil.*;
25  
26  /**
27   * It is an expression, along with the expression language (e.g. EL, MVEL, OGNL)
28   * it is expressed with.
29   *
30   * @version $Rev: 788032 $ $Date: 2009-06-25 00:08:32 +1000 (Thu, 25 Jun 2009) $
31   * @since 2.2.0
32   */
33  public class Expression {
34  
35      /**
36       * The expression itself.
37       */
38      private String expression;
39  
40      /**
41       * The language of the expression.
42       */
43      private String language;
44  
45      /**
46       * Constructor.
47       *
48       * @param expression The expression itself.
49       * @param language The language of the expression.
50       * @since 2.2.0
51       */
52      public Expression(String expression, String language) {
53          this.expression = expression;
54          this.language = language;
55      }
56  
57      /**
58       * Constructor, using the default (i.e. <code>null</code>) language.
59       *
60       * @param expression The expression itself.
61       * @since 2.2.0
62       */
63      public Expression(String expression) {
64          this(expression, null);
65      }
66  
67      /**
68       * Copy constructor.
69       *
70       * @param toCopy The expression to copy.
71       * @since 2.2.0
72       */
73      public Expression(Expression toCopy) {
74          this.expression = toCopy.expression;
75          this.language = toCopy.language;
76      }
77  
78      /**
79       * Creates an Expression object from a string in the form
80       * <code>LANGUAGE:EXPRESSION</code>.
81       *
82       * @param describedExpression The expression in the form
83       * <code>LANGUAGE:EXPRESSION</code>. The LANGUAGE part should be expressed
84       * only with letters and numbers.
85       * @return The created object, or <code>null</code> if the expression is null.
86       * @since 2.2.0
87       */
88      public static Expression createExpressionFromDescribedExpression(String describedExpression) {
89          if (describedExpression != null) {
90              String language = null;
91              String expression = describedExpression;
92              if (describedExpression.matches("[a-zA-Z0-9]+:.+")) {
93                  language = describedExpression.substring(0, describedExpression.indexOf(':'));
94                  expression = describedExpression.substring(describedExpression.indexOf(':') + 1);
95              }
96              return new Expression(expression, language);
97          }
98  
99          return null;
100     }
101 
102     /**
103      * Creates an Expression object from the expression and its language.
104      *
105      * @param expression The expression itself.
106      * @param language The language of the expression.
107      * @return The created object, or <code>null</code> if the expression is null.
108      * @since 2.2.0
109      */
110     public static Expression createExpression(String expression, String language) {
111         if (expression != null) {
112             return new Expression(expression, language);
113         }
114 
115         return null;
116     }
117 
118     /**
119      * Returns the expression string.
120      *
121      * @return The expression itself.
122      * @since 2.2.0
123      */
124     public String getExpression() {
125         return expression;
126     }
127 
128     /**
129      * Returns the language in which the expression is expressed.
130      *
131      * @return The expression language.
132      * @since 2.2.0
133      */
134     public String getLanguage() {
135         return language;
136     }
137 
138     /** {@inheritDoc} */
139     @Override
140     public boolean equals(Object obj) {
141         Expression exp = (Expression) obj;
142         return nullSafeEquals(expression, exp.expression)
143                 && nullSafeEquals(language, exp.language);
144     }
145 
146     /** {@inheritDoc} */
147     @Override
148     public int hashCode() {
149         return nullSafeHashCode(expression) + nullSafeHashCode(language);
150     }
151 
152     /** {@inheritDoc} */
153     @Override
154     public String toString() {
155         return (language == null ? "DEFAULT" : language) + ":" + expression;
156     }
157 }