All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.configuration2.tree.DefaultExpressionEngineSymbols Maven / Gradle / Ivy

Go to download

Tools to assist in the reading of configuration/preferences files in various formats

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.commons.configuration2.tree;

import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;

/**
 * 

* A class representing the various symbols that are supported in keys recognized by {@link DefaultExpressionEngine}. *

*

* An instance of this class is associated with each instance of {@code DefaultExpressionEngine}. It determines which * concrete symbols are used to define elements like separators, attributes, etc. within a configuration key. *

*

* Instances are created using the nested {@code Builder} class. They are immutable and can be shared between arbitrary * components. *

* * @since 2.0 */ public final class DefaultExpressionEngineSymbols { /** * A builder class for creating instances of {@code DefaultExpressionEngineSymbols}. */ public static class Builder { /** Stores the property delimiter. */ private String propertyDelimiter; /** Stores the escaped property delimiter. */ private String escapedDelimiter; /** Stores the attribute start marker. */ private String attributeStart; /** Stores the attribute end marker. */ private String attributeEnd; /** Stores the index start marker. */ private String indexStart; /** Stores the index end marker. */ private String indexEnd; /** * Creates a new, uninitialized instance of {@code Builder}. All symbols are undefined. */ public Builder() { } /** * Creates a new instance of {@code Builder} whose properties are initialized from the passed in * {@code DefaultExpressionEngineSymbols} object. This is useful if symbols are to be created which are similar to the * passed in instance. * * @param c the {@code DefaultExpressionEngineSymbols} object serving as starting point for this builder */ public Builder(final DefaultExpressionEngineSymbols c) { propertyDelimiter = c.getPropertyDelimiter(); escapedDelimiter = c.getEscapedDelimiter(); indexStart = c.getIndexStart(); indexEnd = c.getIndexEnd(); attributeStart = c.getAttributeStart(); attributeEnd = c.getAttributeEnd(); } /** * Creates the {@code DefaultExpressionEngineSymbols} instance based on the properties set for this builder object. This * method does not change the state of this builder. So it is possible to change properties and create another * {@code DefaultExpressionEngineSymbols} instance. * * @return the newly created {@code DefaultExpressionEngineSymbols} instance */ public DefaultExpressionEngineSymbols create() { return new DefaultExpressionEngineSymbols(this); } /** * Sets the string representing the end marker of an attribute in a property key. * * @param attributeEnd the attribute end marker * @return a reference to this object for method chaining */ public Builder setAttributeEnd(final String attributeEnd) { this.attributeEnd = attributeEnd; return this; } /** * Sets the string representing the start marker of an attribute in a property key. Attribute start and end marker are * used together to detect attributes in a property key. * * @param attributeStart the attribute start marker * @return a reference to this object for method chaining */ public Builder setAttributeStart(final String attributeStart) { this.attributeStart = attributeStart; return this; } /** * Sets the string representing an escaped property delimiter. With this string a delimiter that belongs to the key of a * property can be escaped. If for instance "." is used as property delimiter, you can set the escaped * delimiter to "\." and can then escape the delimiter with a back slash. * * @param escapedDelimiter the escaped property delimiter * @return a reference to this object for method chaining */ public Builder setEscapedDelimiter(final String escapedDelimiter) { this.escapedDelimiter = escapedDelimiter; return this; } /** * Sets the string representing the end of an index in a property key. * * @param indexEnd the index end * @return a reference to this object for method chaining */ public Builder setIndexEnd(final String indexEnd) { this.indexEnd = indexEnd; return this; } /** * Sets the string representing the start of an index in a property key. Index start and end marker are used together to * detect indices in a property key. * * @param is the index start * @return a reference to this object for method chaining */ public Builder setIndexStart(final String is) { this.indexStart = is; return this; } /** * Sets the string representing a delimiter for properties. * * @param propertyDelimiter the property delimiter * @return a reference to this object for method chaining */ public Builder setPropertyDelimiter(final String propertyDelimiter) { this.propertyDelimiter = propertyDelimiter; return this; } } /** Constant for the default property delimiter. */ public static final String DEFAULT_PROPERTY_DELIMITER = "."; /** Constant for the default escaped property delimiter. */ public static final String DEFAULT_ESCAPED_DELIMITER = DEFAULT_PROPERTY_DELIMITER + DEFAULT_PROPERTY_DELIMITER; /** Constant for the default attribute start marker. */ public static final String DEFAULT_ATTRIBUTE_START = "[@"; /** Constant for the default attribute end marker. */ public static final String DEFAULT_ATTRIBUTE_END = "]"; /** Constant for the default index start marker. */ public static final String DEFAULT_INDEX_START = "("; /** Constant for the default index end marker. */ public static final String DEFAULT_INDEX_END = ")"; /** * An instance with default symbols. This instance is used by the default instance of {@code DefaultExpressionEngine}. */ public static final DefaultExpressionEngineSymbols DEFAULT_SYMBOLS = createDefaultSmybols(); /** * Creates the {@code DefaultExpressionEngineSymbols} object with default symbols. * * @return the default symbols instance */ private static DefaultExpressionEngineSymbols createDefaultSmybols() { return new Builder().setPropertyDelimiter(DEFAULT_PROPERTY_DELIMITER).setEscapedDelimiter(DEFAULT_ESCAPED_DELIMITER).setIndexStart(DEFAULT_INDEX_START) .setIndexEnd(DEFAULT_INDEX_END).setAttributeStart(DEFAULT_ATTRIBUTE_START).setAttributeEnd(DEFAULT_ATTRIBUTE_END).create(); } /** Stores the property delimiter. */ private final String propertyDelimiter; /** Stores the escaped property delimiter. */ private final String escapedDelimiter; /** Stores the attribute start marker. */ private final String attributeStart; /** Stores the attribute end marker. */ private final String attributeEnd; /** Stores the index start marker. */ private final String indexStart; /** Stores the index end marker. */ private final String indexEnd; /** * Creates a new instance of {@code DefaultExpressionEngineSymbols}. * * @param b the builder for defining the properties of this instance */ private DefaultExpressionEngineSymbols(final Builder b) { propertyDelimiter = b.propertyDelimiter; escapedDelimiter = b.escapedDelimiter; indexStart = b.indexStart; indexEnd = b.indexEnd; attributeStart = b.attributeStart; attributeEnd = b.attributeEnd; } /** * Compares this object with another one. Two instances of {@code DefaultExpressionEngineSymbols} are considered equal * if all of their properties are equal. * * @param obj the object to compare to * @return a flag whether these objects are equal */ @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!(obj instanceof DefaultExpressionEngineSymbols)) { return false; } final DefaultExpressionEngineSymbols c = (DefaultExpressionEngineSymbols) obj; return new EqualsBuilder().append(getPropertyDelimiter(), c.getPropertyDelimiter()).append(getEscapedDelimiter(), c.getEscapedDelimiter()) .append(getIndexStart(), c.getIndexStart()).append(getIndexEnd(), c.getIndexEnd()).append(getAttributeStart(), c.getAttributeStart()) .append(getAttributeEnd(), c.getAttributeEnd()).isEquals(); } /** * Gets the string representing an attribute end marker. * * @return the attribute end marker */ public String getAttributeEnd() { return attributeEnd; } /** * Gets the string representing an attribute start marker. * * @return the attribute start marker */ public String getAttributeStart() { return attributeStart; } /** * Gets the string representing an escaped property delimiter. * * @return the escaped property delimiter */ public String getEscapedDelimiter() { return escapedDelimiter; } /** * Gets the string representing the end of an index in a property key. * * @return the index end marker */ public String getIndexEnd() { return indexEnd; } /** * Gets the string representing the start of an index in a property key. * * @return the index start marker */ public String getIndexStart() { return indexStart; } /** * Gets the string used as delimiter in property keys. * * @return the property delimiter */ public String getPropertyDelimiter() { return propertyDelimiter; } /** * Returns a hash code for this object. * * @return a hash code */ @Override public int hashCode() { return new HashCodeBuilder().append(getPropertyDelimiter()).append(getEscapedDelimiter()).append(getIndexStart()).append(getIndexEnd()) .append(getAttributeStart()).append(getAttributeEnd()).toHashCode(); } /** * Returns a string representation for this object. This string contains the values of all properties. * * @return a string for this object */ @Override public String toString() { return new ToStringBuilder(this).append("propertyDelimiter", getPropertyDelimiter()).append("escapedDelimiter", getEscapedDelimiter()) .append("indexStart", getIndexStart()).append("indexEnd", getIndexEnd()).append("attributeStart", getAttributeStart()) .append("attributeEnd", getAttributeEnd()).toString(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy