DefaultExpressionEngineSymbols.java
- /*
- * 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;
- /**
- * <p>
- * A class representing the various symbols that are supported in keys recognized by {@link DefaultExpressionEngine}.
- * </p>
- * <p>
- * 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.
- * </p>
- * <p>
- * Instances are created using the nested {@code Builder} class. They are immutable and can be shared between arbitrary
- * components.
- * </p>
- *
- * @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();
- }
- }