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 }