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

org.apache.sling.commons.json.util.ParserConfiguration Maven / Gradle / Ivy

There is a newer version: 2024.11.18751.20241128T090041Z-241100
Show newest version
package org.apache.sling.commons.json.util;
/*
Public Domain.
*/

/**
 * Configuration base object for parsers. The configuration is immutable.
 */
@Deprecated
@SuppressWarnings({ "" })
public class ParserConfiguration {
    /**
     * Used to indicate there's no defined limit to the maximum nesting depth when
     * parsing a document.
     */
    public static final int UNDEFINED_MAXIMUM_NESTING_DEPTH = -1;

    /**
     * The default maximum nesting depth when parsing a document.
     */
    public static final int DEFAULT_MAXIMUM_NESTING_DEPTH = 512;

    /**
     * Specifies if values should be kept as strings (true), or if
     * they should try to be guessed into JSON values (numeric, boolean, string)
     */
    protected boolean keepStrings;

    /**
     * The maximum nesting depth when parsing a document.
     */
    protected int maxNestingDepth;

    /**
     * Constructs a new ParserConfiguration with default settings.
     */
    public ParserConfiguration() {
        this.keepStrings = false;
        this.maxNestingDepth = DEFAULT_MAXIMUM_NESTING_DEPTH;
    }

    /**
     * Constructs a new ParserConfiguration with the specified settings.
     *
     * @param keepStrings     A boolean indicating whether to preserve strings
     *                        during parsing.
     * @param maxNestingDepth An integer representing the maximum allowed nesting
     *                        depth.
     */
    protected ParserConfiguration(final boolean keepStrings, final int maxNestingDepth) {
        this.keepStrings = keepStrings;
        this.maxNestingDepth = maxNestingDepth;
    }

    /**
     * Provides a new instance of the same configuration.
     */
    @Override
    protected ParserConfiguration clone() {
        // future modifications to this method should always ensure a "deep"
        // clone in the case of collections. i.e. if a Map is added as a configuration
        // item, a new map instance should be created and if possible each value in the
        // map should be cloned as well. If the values of the map are known to also
        // be immutable, then a shallow clone of the map is acceptable.
        return new ParserConfiguration(
                this.keepStrings,
                this.maxNestingDepth);
    }

    /**
     * When parsing the XML into JSONML, specifies if values should be kept as
     * strings (true), or if
     * they should try to be guessed into JSON values (numeric, boolean, string)
     *
     * @return The keepStrings configuration value.
     */
    public boolean isKeepStrings() {
        return this.keepStrings;
    }

    /**
     * When parsing the XML into JSONML, specifies if values should be kept as
     * strings (true), or if
     * they should try to be guessed into JSON values (numeric, boolean, string)
     *
     * @param newVal
     *               new value to use for the keepStrings configuration
     *               option.
     * @param     the type of the configuration object
     * 
     * @return The existing configuration will not be modified. A new configuration
     *         is returned.
     */
    @SuppressWarnings("unchecked")
    public  T withKeepStrings(final boolean newVal) {
        T newConfig = (T) this.clone();
        newConfig.keepStrings = newVal;
        return newConfig;
    }

    /**
     * The maximum nesting depth that the parser will descend before throwing an
     * exception
     * when parsing the XML into JSONML.
     * 
     * @return the maximum nesting depth set for this configuration
     */
    public int getMaxNestingDepth() {
        return maxNestingDepth;
    }

    /**
     * Defines the maximum nesting depth that the parser will descend before
     * throwing an exception
     * when parsing the XML into JSONML. The default max nesting depth is 512, which
     * means the parser
     * will throw a JsonException if the maximum depth is reached.
     * Using any negative value as a parameter is equivalent to setting no limit to
     * the nesting depth,
     * which means the parses will go as deep as the maximum call stack size allows.
     * 
     * @param maxNestingDepth the maximum nesting depth allowed to the XML parser
     * @param              the type of the configuration object
     * 
     * @return The existing configuration will not be modified. A new configuration
     *         is returned.
     */
    @SuppressWarnings("unchecked")
    public  T withMaxNestingDepth(int maxNestingDepth) {
        T newConfig = (T) this.clone();

        if (maxNestingDepth > UNDEFINED_MAXIMUM_NESTING_DEPTH) {
            newConfig.maxNestingDepth = maxNestingDepth;
        } else {
            newConfig.maxNestingDepth = UNDEFINED_MAXIMUM_NESTING_DEPTH;
        }

        return newConfig;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy