/* * This file is part of the URI Template library. * * For licensing information please see the file license.txt included in the release. * A copy of this licence can also be found at * http://www.opensource.org/licenses/artistic-license-2.0.php */ package org.weborganic.furi; import java.util.ArrayList; import java.util.List; /** * An abstract token for use as a base for other tokens. * * <p>This class is a base implementation of the {@link Token} interface. * * @author Christophe Lauret * @version 30 December 2008 */ abstract class TokenBase implements Token { /** * The expression for this token. */ private final String _exp; /** * Creates a new expansion token. * * @param exp The expression corresponding to this URI token. * * @throws NullPointerException If the specified expression is <code>null</code>. */ public TokenBase(String exp) throws NullPointerException { if (exp == null) { throw new NullPointerException("Cannot create a token with a null value."); } this._exp = exp; } /** * {@inheritDoc} * * By default a token is resolvable if it can be matched. */ public boolean isResolvable() { return this instanceof Matchable; } /** * {@inheritDoc} */ public String expression() { return this._exp; } /** * Two tokens are equals if and only if their string expression is equal. * * {@inheritDoc} */ @Override public boolean equals(Object o) { if (o == this) { return true; } if ((o == null) || (o.getClass() != this.getClass())) { return false; } TokenBase t = (TokenBase) o; return (this._exp == t._exp || (_exp != null && _exp.equals(t._exp))); } /** * {@inheritDoc} */ @Override public int hashCode() { return 31 * this._exp.hashCode() + this._exp.hashCode(); } /** * {@inheritDoc} */ @Override public String toString() { return this._exp; } // functions provided for convenience --------------------------------------- /** * Removes the curly brackets from the specified expression. * * If the expression is already stripped, this method returns the same string. * * @param exp The expression to 'strip'. * * @return The raw expression (without the curly brackets). */ protected final static String strip(String exp) { if (exp.length() < 2) { return exp; } if (exp.charAt(0) == '{' && exp.charAt(exp.length() - 1) == '}') { return exp.substring(1, exp.length() - 1); } else { return exp; } } /** * Returns the variables for a given expression containing a list of variables. * * @param exp An expression containing a comma separated list of variables. * * @return A list of variables. * * @throws URITemplateSyntaxException If thrown by the Variable parse method. */ protected static final List<Variable> toVariables(String exp) throws URITemplateSyntaxException { String[] exps = exp.split(","); List<Variable> vars = new ArrayList<Variable>(exps.length); for (String e : exps) { vars.add(Variable.parse(e)); } return vars; } }