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

org.deephacks.tools4j.config.internal.core.runtime.typesafe.ConfigValue Maven / Gradle / Ivy

There is a newer version: 0.15.0
Show newest version
/**
 *   Copyright (C) 2011-2012 Typesafe Inc. 
 */
package org.deephacks.tools4j.config.internal.core.runtime.typesafe;

/**
 * An immutable value, following the JSON type
 * schema.
 *
 * 

* Because this object is immutable, it is safe to use from multiple threads and * there's no need for "defensive copies." * *

* Do not implement {@code ConfigValue}; it should only be implemented * by the typesafe library. Arbitrary implementations will not work because the * library internals assume a specific concrete implementation. Also, this * interface is likely to grow new methods over time, so third-party * implementations will break. */ public interface ConfigValue extends ConfigMergeable { /** * The origin of the value (file, line number, etc.), for debugging and * error messages. * * @return where the value came from */ ConfigOrigin origin(); /** * The {@link ConfigValueType} of the value; matches the JSON type schema. * * @return value's type */ ConfigValueType valueType(); /** * Returns the value as a plain Java boxed value, that is, a {@code String}, * {@code Number}, {@code Boolean}, {@code Map}, * {@code List}, or {@code null}, matching the {@link #valueType()} * of this {@code ConfigValue}. If the value is a {@link ConfigObject} or * {@link ConfigList}, it is recursively unwrapped. */ Object unwrapped(); /** * Renders the typesafe value as a HOCON string. This method is primarily * intended for debugging, so it tries to add helpful comments and * whitespace. * *

* If the typesafe value has not been resolved (see {@link Config#resolve}), * it's possible that it can't be rendered as valid HOCON. In that case the * rendering should still be useful for debugging but you might not be able * to parse it. * *

* This method is equivalent to * {@code render(ConfigRenderOptions.defaults())}. * * @return the rendered value */ String render(); /** * Renders the typesafe value to a string, using the provided options. * *

* If the typesafe value has not been resolved (see {@link Config#resolve}), * it's possible that it can't be rendered as valid HOCON. In that case the * rendering should still be useful for debugging but you might not be able * to parse it. * *

* If the typesafe value has been resolved and the options disable list * HOCON-specific features (such as comments), the rendering will be valid * JSON. If you enable HOCON-only features such as comments, the rendering * will not be valid JSON. * * @param options * the rendering options * @return the rendered value */ String render(ConfigRenderOptions options); @Override ConfigValue withFallback(ConfigMergeable other); /** * Places the value inside a {@code Config} at the given path. See also * atKey(). * * @param path * path to store this value at. * @return a {@code Config} instance containing this value at the given * path. */ Config atPath(String path); /** * Places the value inside a {@code Config} at the given key. See also * atPath(). * * @param key * key to store this value at. * @return a {@code Config} instance containing this value at the given key. */ Config atKey(String key); }