This is an automated email from the ASF dual-hosted git repository. jamesbognar pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/juneau.git
The following commit(s) were added to refs/heads/master by this push: new e92db67 Javadoc updates. e92db67 is described below commit e92db67039ad2c283643c971f5cf10f18fe9639f Author: JamesBognar <jamesbog...@apache.org> AuthorDate: Wed Feb 7 21:05:41 2018 -0500 Javadoc updates. --- .../java/org/apache/juneau/ini/ConfigFileImpl.java | 1 + .../org/apache/juneau/ini/ConfigFileWrapped.java | 1 + .../juneau/ini/{ => vars}/ConfigFileVar.java | 9 +- .../org/apache/juneau/ini/vars/package-info.java} | 62 +-- .../java/org/apache/juneau/svl/DefaultingVar.java | 10 +- .../main/java/org/apache/juneau/svl/MapVar.java | 5 +- .../apache/juneau/svl/MultipartResolvingVar.java | 10 +- .../java/org/apache/juneau/svl/MultipartVar.java | 11 +- .../org/apache/juneau/svl/ResolvingObjectMap.java | 5 + .../main/java/org/apache/juneau/svl/SimpleVar.java | 12 +- .../java/org/apache/juneau/svl/StreamedVar.java | 14 +- .../src/main/java/org/apache/juneau/svl/Var.java | 19 +- .../java/org/apache/juneau/svl/VarResolver.java | 79 +-- .../org/apache/juneau/svl/VarResolverBuilder.java | 9 +- .../org/apache/juneau/svl/VarResolverContext.java | 5 +- .../org/apache/juneau/svl/VarResolverSession.java | 9 +- .../juneau/svl/{MapVar.java => package-info.java} | 34 +- .../main/java/org/apache/juneau/svl/package.html | 302 ------------ .../juneau/svl/vars/CoalesceAndRecurseVar.java | 7 +- .../org/apache/juneau/svl/vars/CoalesceVar.java | 7 +- .../apache/juneau/svl/vars/EnvVariablesVar.java | 9 +- .../java/org/apache/juneau/svl/vars/IfVar.java | 11 +- .../java/org/apache/juneau/svl/vars/SwitchVar.java | 9 +- .../juneau/svl/vars/SystemPropertiesVar.java | 9 +- juneau-doc/src/main/javadoc/overview.html | 529 +++++++++++++++++---- .../apache/juneau/microservice/Microservice.java | 2 + .../org/apache/juneau/microservice/Resource.java | 2 +- .../apache/juneau/microservice/ResourceGroup.java | 2 +- .../juneau/microservice/ResourceJenaGroup.java | 2 +- .../apache/juneau/microservice}/vars/ArgsVar.java | 2 +- .../juneau/microservice}/vars/ManifestFileVar.java | 2 +- .../juneau/microservice/vars/package-info.java | 62 +-- .../org/apache/juneau/rest/RestContextBuilder.java | 1 + .../juneau/rest/annotation/ResourceSwagger.java | 2 +- .../java/org/apache/juneau/rest/vars/FileVar.java | 2 +- 35 files changed, 638 insertions(+), 619 deletions(-) diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java index a504261..820abb8 100644 --- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java +++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileImpl.java @@ -23,6 +23,7 @@ import java.util.*; import java.util.concurrent.locks.*; import org.apache.juneau.*; +import org.apache.juneau.ini.vars.*; import org.apache.juneau.internal.*; import org.apache.juneau.json.*; import org.apache.juneau.parser.*; diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java index a1db452..11dd437 100644 --- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java +++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileWrapped.java @@ -19,6 +19,7 @@ import java.lang.reflect.*; import java.util.*; import org.apache.juneau.*; +import org.apache.juneau.ini.vars.*; import org.apache.juneau.parser.*; import org.apache.juneau.serializer.*; import org.apache.juneau.svl.*; diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileVar.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/ConfigFileVar.java similarity index 91% rename from juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileVar.java rename to juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/ConfigFileVar.java index 70406cc..75f25df 100644 --- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/ConfigFileVar.java +++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/ConfigFileVar.java @@ -10,8 +10,9 @@ // * "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.juneau.ini; +package org.apache.juneau.ini.vars; +import org.apache.juneau.ini.*; import org.apache.juneau.svl.*; /** @@ -42,8 +43,10 @@ import org.apache.juneau.svl.*; * Since this is a {@link SimpleVar}, any variables contained in the result will be recursively resolved. * Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. * - * @see org.apache.juneau.ini.ConfigFile - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.VarResolvers">Overview > juneau-svl > VarResolvers and VarResolverSessions</a> + * </ul> */ public class ConfigFileVar extends DefaultingVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/package-info.java old mode 100644 new mode 100755 similarity index 65% copy from juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java copy to juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/package-info.java index 4dd0471..97742b2 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java +++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/ini/vars/package-info.java @@ -1,44 +1,18 @@ -// *************************************************************************************************************************** -// * 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.juneau.svl.vars; - -import org.apache.juneau.svl.*; - -/** - * A basic variable resolver that returns the first non-null value. - * - * <p> - * The format for this var is <js>"$CR{arg1[,arg2...]}"</js>. - * - * <p> - * The difference between {@link CoalesceVar} and {@link CoalesceAndRecurseVar} is that the first will not resolve - * inner variables nor recursively resolve variables, and the second will. - * Use {@link CoalesceVar} when resolving user-input. - */ -public class CoalesceAndRecurseVar extends MultipartResolvingVar { - - /** The name of this variable. */ - public static final String NAME = "CR"; - - /** - * Constructor. - */ - public CoalesceAndRecurseVar() { - super(NAME); - } - - @Override - public String resolve(VarResolverSession session, String arg) throws Exception { - return arg; - } -} +// *************************************************************************************************************************** +// * 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. * +// *************************************************************************************************************************** + +/** + * Predefined SVL Variables + */ +package org.apache.juneau.ini.vars; + diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java index 3b3d2a6..1a0a1ef 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/DefaultingVar.java @@ -22,9 +22,15 @@ import static org.apache.juneau.internal.StringUtils.*; * property doesn't exist: <js>"$S{myProperty,not found}"</js> * * <p> - * Subclasses must implement the {@link #resolve(VarResolverSession, String)} method. + * Subclasses must implement the following method: + * <ul> + * <li class='jm'>{@link #resolve(VarResolverSession, String)} + * </ul> * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public abstract class DefaultingVar extends SimpleVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java index 41e5bc7..f8ee406 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java @@ -21,7 +21,10 @@ import org.apache.juneau.internal.*; /** * A subclass of {@link DefaultingVar} that simply pulls values from a {@link Map}. * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ @SuppressWarnings("rawtypes") public abstract class MapVar extends DefaultingVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java index 9ba8acf..15e1da4 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartResolvingVar.java @@ -22,9 +22,15 @@ import static org.apache.juneau.internal.StringUtils.*; * property doesn't exist: <js>"$S{myProperty1,myProperty2}"</js> * * <p> - * Subclasses must implement the {@link #resolve(VarResolverSession, String)} method. + * Subclasses must implement the following method: + * <ul> + * <li class='jm'>{@link #resolve(VarResolverSession, String)} + * </ul> * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public abstract class MultipartResolvingVar extends SimpleVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java index 7fe18c0..17e2fd6 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MultipartVar.java @@ -17,10 +17,15 @@ import static org.apache.juneau.internal.StringUtils.*; /** * Interface for the resolution of vars that consist of a comma-delimited list. * - * <p> - * (e.g. <js>"$X{foo, bar, baz}"</js>) + * <h5 class='figure'>Example:</h5> + * <p class='bcode'> + * <js>"$X{foo, bar, baz}"</js> + * </p> * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public abstract class MultipartVar extends SimpleVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java index 75d2506..cfaf6c3 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/ResolvingObjectMap.java @@ -28,6 +28,11 @@ import org.apache.juneau.*; * * <p> * All other data types are left as-is. + * + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ @SuppressWarnings({"serial"}) public class ResolvingObjectMap extends ObjectMap { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java index fcf2ff0..284caee 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/SimpleVar.java @@ -19,13 +19,19 @@ import java.io.*; * * <p> * Note the difference between this class and {@link StreamedVar} that streams values to writers. - * Unlike the {@link StreamedVar} class, the returned value from this class can contain nested variables that will be + * <br>Unlike the {@link StreamedVar} class, the returned value from this class can contain nested variables that will be * recursively resolved by {@link VarResolver}. * * <p> - * Subclasses must implement the {@link #resolve(VarResolverSession, String)} method. + * Subclasses must implement the following method: + * <ul> + * <li class='jm'>{@link #resolve(VarResolverSession, String)} + * </ul> * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public abstract class SimpleVar extends Var { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java index 4819cf8..665be5e 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/StreamedVar.java @@ -17,14 +17,20 @@ package org.apache.juneau.svl; * * <p> * Note the difference between this class and {@link SimpleVar} that returns simple string values. - * Unlike the {@link SimpleVar} class, the output from this class cannot contain nested variables. - * However, this class can be more efficient for variables that produce large amounts of output so that the creation + * <br>Unlike the {@link SimpleVar} class, the output from this class cannot contain nested variables. + * <br>However, this class can be more efficient for variables that produce large amounts of output so that the creation * of large in-memory strings is avoided. * * <p> - * Subclasses must implement the {@link #resolveTo(VarResolverSession, java.io.Writer, String)} method. + * Subclasses must implement the following method: + * <ul> + * <li class='jm'>{@link #resolveTo(VarResolverSession, java.io.Writer, String)} + * </ul> * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public abstract class StreamedVar extends Var { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java index 5d76c85..3bb7a72 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/Var.java @@ -26,23 +26,26 @@ import java.io.*; * <p> * Subclasses must implement one of the following two methods: * <ul> - * <li>{@link #resolve(VarResolverSession,String)} - For simple vars. - * <li>{@link #resolveTo(VarResolverSession,Writer,String)} - For streamed vars. + * <li class='jm'>{@link #resolve(VarResolverSession,String)} - For simple vars. + * <li class='jm'>{@link #resolveTo(VarResolverSession,Writer,String)} - For streamed vars. * </ul> * * <p> * Subclasses MUST implement a no-arg constructor so that class names can be passed to the * {@link VarResolverBuilder#vars(Class...)} method. - * They must also be thread safe! + * <br><b>They must also be thread safe!</b> * * <p> * Two direct abstract subclasses are provided to differentiated between simple and streamed vars: * <ul> - * <li>{@link SimpleVar} - * <li>{@link StreamedVar} + * <li class='jac'>{@link SimpleVar} + * <li class='jac'>{@link StreamedVar} * </ul> * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public abstract class Var { @@ -111,7 +114,7 @@ public abstract class Var { * * <p> * The default implementation of this method always returns <jk>true</jk>. - * Subclasses can override this method to override the default behavior. + * <br>Subclasses can override this method to override the default behavior. * * <h5 class='topic'>Important Note</h5> * <p> @@ -129,7 +132,7 @@ public abstract class Var { * * <p> * Can be overridden to intercept the request and do special handling. - * Default implementation simply calls resolve(String). + * <br>Default implementation simply calls resolve(String). * * @param session The session object used for a single instance of a string resolution. * @param arg The inside argument of the variable. diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java index 1a9976a..dfabaa6 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolver.java @@ -12,7 +12,6 @@ // *************************************************************************************************************************** package org.apache.juneau.svl; - import java.io.*; import java.util.*; @@ -47,56 +46,16 @@ import org.apache.juneau.svl.vars.*; * } * * <jc>// Create a variable resolver that resolves system properties (e.g. "$S{java.home}")</jc> - * VarResolver r = <jk>new</jk> VarResolver().addVars(SystemPropertiesVar.<js>class</js>); + * VarResolver r = VarResolver.<jsm>create</jsm>().vars(SystemPropertiesVar.<jk>class</jk>).build(); * * <jc>// Use it!</jc> * System.<jsf>out</jsf>.println(r.resolve(<js>"java.home is set to $S{java.home}"</js>)); * </p> * - * <h5 class='topic'>Context objects</h5> - * - * Var resolvers can have zero or more context objects associated with them. - * - * <p> - * Context objects are arbitrary objects associated with this var resolver, such as a <code>ConfigFile</code> object. - * They can be any class type. - * - * <p> - * Context objects can be retrieved by {@link Var} classes through the - * {@link VarResolverSession#getSessionObject(Class, String)} method. - * - * <h5 class='topic'>Session objects</h5> - * - * Session objects are considered more ephemeral than context objects. - * While a context object is unlikely to ever change, a session object may change on every use of the var resolver. - * For example, the server API defines various <code>Var</code> objects that use the <code>RestRequest</code> - * object as a session object for the duration of a single HTTP request. - * - * <p> - * Session objects are used by calling the {@link #createSession()} or {@link #createSession(Map)} methods to create - * an instance of a {@link VarResolverSession} object that contains {@link VarResolverSession#resolve(String)} - * and {@link VarResolverSession#resolveTo(String,Writer)} methods that are identical to - * {@link VarResolver#resolve(String)} and {@link VarResolver#resolveTo(String, Writer)} except that the - * <code>Var</code> objects have access to the session objects through the - * {@link VarResolverSession#getSessionObject(Class, String)} method. - * - * <p> - * Session objects are specified through either the {@link #createSession(Map)} method or the - * {@link VarResolverSession#sessionObject(String, Object)} methods. - * - * <h5 class='topic'>Cloning</h5> - * - * Var resolvers can be cloned by using the {@link #builder()} method. - * Cloning a resolver will copy it's {@link Var} class names and context objects. - * - * <h5 class='section'>Example:</h5> - * <p class='bcode'> - * <jc>// Create a resolver that copies the default resolver and adds $C and $ARG vars.</jc> - * VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigVar.<jk>class</jk>, - * ArgsVar.<jk>class</jk>).build(); - * </p> - * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview > juneau-svl > VarResolvers and VarResolverSessions</a> + * </ul> */ public class VarResolver { @@ -104,10 +63,12 @@ public class VarResolver { * Default string variable resolver with support for system properties and environment variables: * * <ul> - * <li><code>$S{key}</code>,<code>$S{key,default}</code> - System properties. - * <li><code>$E{key}</code>,<code>$E{key,default}</code> - Environment variables. - * <li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - If-else patterns. - * <li><code>$SW{test,matchPattern,thenValue[,matchPattern,thenValue][,elseValue]}</code> - Switch patterns. + * <li><code>$S{key}</code>,<code>$S{key,default}</code> - {@link SystemPropertiesVar} + * <li><code>$E{key}</code>,<code>$E{key,default}</code> - {@link EnvVariablesVar} + * <li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - {@link IfVar} + * <li><code>$SW{test,matchPattern,thenValue[,matchPattern,thenValue][,elseValue]}</code> - {@link SwitchVar} + * <li><code>$CO{arg1[,arg2...]}</code> - {@link CoalesceVar} + * <li><code>$CR{arg1[,arg2...]}</code> - {@link CoalesceAndRecurseVar} * </ul> * * @see SystemPropertiesVar @@ -118,12 +79,24 @@ public class VarResolver { final VarResolverContext ctx; /** + * Instantiates a new clean-slate {@link VarResolverBuilder} object. + * + * <p> + * This is equivalent to simply calling <code><jk>new</jk> VarResolverBuilder()</code>. + * + * @return A new {@link VarResolverBuilder} object. + */ + public static VarResolverBuilder create() { + return new VarResolverBuilder(); + } + + /** * Constructor. * * @param vars The var classes * @param contextObjects */ - public VarResolver(Class<? extends Var>[] vars, Map<String,Object> contextObjects) { + VarResolver(Class<? extends Var>[] vars, Map<String,Object> contextObjects) { this.ctx = new VarResolverContext(vars, contextObjects); } @@ -175,7 +148,7 @@ public class VarResolver { * * <p> * This is a shortcut for calling <code>createSession(<jk>null</jk>).resolve(s);</code>. - * This method can only be used if the string doesn't contain variables that rely on the existence of session + * <br>This method can only be used if the string doesn't contain variables that rely on the existence of session * variables. * * @param s The input string. @@ -190,7 +163,7 @@ public class VarResolver { * * <p> * This is a shortcut for calling <code>createSession(<jk>null</jk>).resolveTo(s, w);</code>. - * This method can only be used if the string doesn't contain variables that rely on the existence of session + * <br>This method can only be used if the string doesn't contain variables that rely on the existence of session * variables. * * @param s The input string. diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java index 58d02b1..3f2ccf5 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverBuilder.java @@ -20,6 +20,11 @@ import org.apache.juneau.svl.vars.*; /** * Builder class for building instances of {@link VarResolver}. + * + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview > juneau-svl > VarResolvers and VarResolverSessions</a> + * </ul> */ public class VarResolverBuilder { @@ -62,12 +67,14 @@ public class VarResolverBuilder { * <li>{@link EnvVariablesVar} * <li>{@link SwitchVar} * <li>{@link IfVar} + * <li>{@link CoalesceVar} + * <li>{@link CoalesceAndRecurseVar} * </ul> * * @return This object (for method chaining). */ public VarResolverBuilder defaultVars() { - return vars(SystemPropertiesVar.class, EnvVariablesVar.class, SwitchVar.class, IfVar.class); + return vars(SystemPropertiesVar.class, EnvVariablesVar.class, SwitchVar.class, IfVar.class, CoalesceAndRecurseVar.class, CoalesceVar.class); } /** diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java index 5283de8..be59001 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverContext.java @@ -23,7 +23,10 @@ import java.util.concurrent.*; * <p> * Used to associate {@link Var Vars} and context objects with {@link VarResolver VarResolvers}. * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview > juneau-svl > VarResolvers and VarResolverSessions</a> + * </ul> */ public class VarResolverContext { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java index 4009b56..dd2cbbd 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/VarResolverSession.java @@ -36,7 +36,10 @@ import org.apache.juneau.*; * <p> * Instances of this class are NOT guaranteed to be thread safe. * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../overview-summary.html#juneau-svl.VarResolvers">Overview > juneau-svl > VarResolvers and VarResolverSessions</a> + * </ul> */ public class VarResolverSession { @@ -370,7 +373,9 @@ public class VarResolverSession { * * @param c The class type to cast to. * @param name The name of the session object. - * @return The session object. Never <jk>null</jk>. + * @return + * The session object. + * <br>Never <jk>null</jk>. * @throws RuntimeException If session object with specified name does not exist. */ @SuppressWarnings("unchecked") diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package-info.java old mode 100644 new mode 100755 similarity index 66% copy from juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java copy to juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package-info.java index 41e5bc7..4b8eabf --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/MapVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package-info.java @@ -10,39 +10,9 @@ // * "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.juneau.svl; - -import static org.apache.juneau.internal.ThrowableUtils.*; - -import java.util.*; - -import org.apache.juneau.internal.*; /** - * A subclass of {@link DefaultingVar} that simply pulls values from a {@link Map}. - * - * @see org.apache.juneau.svl + * Simple Variable Language */ -@SuppressWarnings("rawtypes") -public abstract class MapVar extends DefaultingVar { - - private final Map m; - - /** - * Constructor. - * - * @param name The name of this variable. - * @param m The map to pull values from. - */ - public MapVar(String name, Map m) { - super(name); - if (m == null) - illegalArg("''m'' parameter cannot be null."); - this.m = m; - } +package org.apache.juneau.svl; - @Override /* Var */ - public String resolve(VarResolverSession session, String varVal) { - return StringUtils.toString(m.get(varVal)); - } -} diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package.html b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package.html deleted file mode 100644 index c9189db..0000000 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/package.html +++ /dev/null @@ -1,302 +0,0 @@ -<!DOCTYPE HTML> -<!-- -/*************************************************************************************************************************** - * 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. - * - ***************************************************************************************************************************/ - --> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <style type="text/css"> - /* For viewing in Page Designer */ - @IMPORT url("../../../../../../javadoc.css"); - - /* For viewing in REST interface */ - @IMPORT url("../htdocs/javadoc.css"); - body { - margin: 20px; - } - </style> - <script> - /* Replace all @code and @link tags. */ - window.onload = function() { - document.body.innerHTML = document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>'); - document.body.innerHTML = document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, '<code>$3</code>'); - } - </script> -</head> -<body> -<p>Simple Variable Language</p> - -<script> - function toggle(x) { - var div = x.nextSibling; - while (div != null && div.nodeType != 1) - div = div.nextSibling; - if (div != null) { - var d = div.style.display; - if (d == 'block' || d == '') { - div.style.display = 'none'; - x.className += " closed"; - } else { - div.style.display = 'block'; - x.className = x.className.replace(/(?:^|\s)closed(?!\S)/g , '' ); - } - } - } -</script> -<a id='TOC'></a><h5 class='toc'>Table of Contents</h5> -<ol class='toc'> - <li><p><a class='doclink' href='#SimpleVarLanguage'>Simple Variable Language</a></p> - <ol> - <li><p><a class='doclink' href='#Vars'>Vars</a></p> - <li><p><a class='doclink' href='#VarResolvers'>VarResolvers and VarResolverSessions</a></p> - <li><p><a class='doclink' href='#OtherNotes'>Other Notes</a></p> - </ol> - </li> -</ol> - -<!-- ======================================================================================================== --> -<a id="SimpleVarLanguage"></a> -<h2 class='topic' onclick='toggle(this)'>1 - Simple Variable Language</h2> -<div class='topic'> - <p> - The <code>org.apache.juneau.svl</code> package defines an API for a language called "Simple Variable Language". - In a nutshell, Simple Variable Language (or SVL) is text that contains variables of the form <js>"$varName{varKey}"</js>. - </p> - <p> - Variables can be recursively nested within the varKey (e.g. <js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>). - Variables can also return values that themselves contain more variables. - </p> - <p> - The {@link org.apache.juneau.svl.VarResolver} class is used to resolve variables. - The {@link org.apache.juneau.svl.VarResolver#DEFAULT} resolver will resolve <js>"$S{systemProperty}"</js> - and <js>"$E{envVariable}"</js> variables. - </p> - <p class='bcode'> - <jc>// Use the default variable resolver to resolve a string that contains $S (system property) variables</jc> - String myProperty = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"The Java home directory is $S{java.home}"</js>); - </p> - <p> - The following shows how variables can be arbitrarily nested... - </p> - <p class='bcode'> - <jc>// Look up a property in the following order: - // 1) MYPROPERTY environment variable. - // 2) 'my.property' system property if environment variable not found. - // 3) 'not found' string if system property not found.</jc> - String myproperty = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"$E{MYPROPERTY,$S{my.property,not found}}"</js>); - </p> - - <!-- ======================================================================================================== --> - <a id="Vars"></a> - <h3 class='topic' onclick='toggle(this)'>1.1 - Vars</h3> - <div class='topic'> - <p> - Variables are defined through the {@link org.apache.juneau.svl.Var} API. - </p> - <p class='bcode'> - <jc>// Create a var resolver that extends the default resolver and appends our own "$URLEncode{...}" variable</jc> - - <jc>// First create our var.</jc> - <jk>public class</jk> UrlEncodeVar <jk>extends</jk> SimpleVar { - - <jc>// Must have a no-arg constructor!</jc> - <jk>public</jk> UrlEncodeVar() { - <jk>super</jk>(<js>"URLEncode"</js>); - } - - <jc>// The method we must implement</jc> - <ja>@Override</ja> - <jk>public</jk> String resolve(VarResolverSession session, String varVal) { - <jk>return</jk> URLEncoder.<jsm>encode</jsm>(varVal, <js>"UTF-8"</js>); - } - } - - <jc>// Next create a var resolver that extends the existing DEFAULT resolver - // that supports resolving system properties.</jc> - VarResolver r = VarResolver.<jsf>DEFAULT</jsf>.builder().vars(UrlEncodeVar.<jk>class</jk>).build(); - - <jc>// Retrieve a system property and URL-encode it if necessary.</jc> - String myProperty = r.resolve(<js>"$URLEncode{$S{my.property}}"</js>); - </p> - <p> - The following shows the class hierarchy of the {@link org.apache.juneau.svl.Var} class and all current - predefined implementations. - </p> - <ul class='doctree'> - <li class='jac'> - {@link org.apache.juneau.svl.Var} - - Superclass of all vars. - <ul> - <li class='jac'> - {@link org.apache.juneau.svl.SimpleVar} - - Superclass of all vars that return strings. - <ul> - <li class='jac'> - {@link org.apache.juneau.svl.DefaultingVar} - - Variables that define a default value if the resolve method returns null. - <ul> - <li class='jac'> - {@link org.apache.juneau.svl.MapVar} - - Variables that pull values from maps. - <ul> - <li class='jc'> - {@link org.apache.juneau.svl.vars.SystemPropertiesVar} - - Resolves system properties. - </ul> - </li> - <li class='jc'> - {@link org.apache.juneau.svl.vars.ArgsVar} - - Resolves variables from an {@link org.apache.juneau.utils.Args} object. - <li class='jc'> - <code>ConfigFileVar</code> - - Resolves variables from a {@link org.apache.juneau.ini.ConfigFile} object. - <li class='jc'> - {@link org.apache.juneau.svl.vars.EnvVariablesVar} - - Resolves environment variables. - <li class='jc'> - {@link org.apache.juneau.svl.vars.ManifestFileVar} - - Resolves variables from a {@link org.apache.juneau.utils.ManifestFile} object. - <li class='jc'> - {@link org.apache.juneau.rest.vars.ServletInitParamVar} - - Resolves servlet initialization parameters. - </ul> - </li> - <li class='jac'> - {@link org.apache.juneau.svl.MultipartVar} - - Variables that consist of 2 or more comma-delimited arguments. - <ul> - <li class='jc'> - {@link org.apache.juneau.rest.vars.LocalizationVar} - - Resolves localized strings for an HTTP request. - </ul> - </li> - <li class='jc'> - {@link org.apache.juneau.rest.vars.RequestVar} - - Resolves specialized HTTP request values. - <li class='jc'> - {@link org.apache.juneau.rest.vars.UrlEncodeVar} - - URL-encodes the value inside the variable. - </ul> - </li> - <li class='jac'> - {@link org.apache.juneau.svl.StreamedVar} - - Superclass of all vars that stream their value to writers. - <ul> - <li class='jc'> - {@link org.apache.juneau.rest.vars.SerializedRequestAttrVar} - - Resolves HTTP request attribute values passed through a - {@link org.apache.juneau.serializer.Serializer}. - </ul> - </li> - </ul> - </li> - </ul> - </div> - - <!-- ======================================================================================================== --> - <a id="VarResolvers"></a> - <h3 class='topic' onclick='toggle(this)'>1.2 - VarResolvers and VarResolverSessions</h3> - <div class='topic'> - <p> - The main class for performing variable resolution is {@link org.apache.juneau.svl.VarResolver}. - Two methods are provided for resolving variables: - </p> - <ul class='doctree'> - <li class='jm'> - {@link org.apache.juneau.svl.VarResolver#resolve(String)} - - Resolves variables and returns the results as a simple string. - <li class='jm'> - {@link org.apache.juneau.svl.VarResolver#resolveTo(String,Writer)} - - Resolves variables and sends results to a writer. - </ul> - <p> - Var resolvers can have zero or more context objects associated with them. - Some {@link org.apache.juneau.svl.Var Vars} rely on the existence of some other object, such as an - {@link org.apache.juneau.utils.Args} object - for {@link org.apache.juneau.svl.vars.ArgsVar} or a {@link org.apache.juneau.ini.ConfigFile} for a - <code>ConfigFileVar</code>. - These object dependencies are made by setting context objects on the var resolver. - </p> - <p> - Context objects are set through the {@link org.apache.juneau.svl.VarResolverBuilder - #contextObject(String,Object)} method. - They can be any class type. - </p> - <p> - Context objects are used by {@link org.apache.juneau.svl.Var Vars} by calling the - {@link org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} method. - </p> - <p> - In addition to context objects, there are also session objects. - Session objects are considered more ephemeral than context objects. - While a context object is unlikely to ever change, a session object may change on every use of the var - resolver. - For example, the server API defines various <code>Var</code> objects that use the <code>RestRequest</code> - object as a session object for the duration of a single HTTP request. - </p> - <p> - Session objects are used by calling the {@link org.apache.juneau.svl.VarResolver#createSession()} or - {@link org.apache.juneau.svl.VarResolver#createSession(Map)} methods to create an instance of a - {@link org.apache.juneau.svl.VarResolverSession} object that contains - {@link org.apache.juneau.svl.VarResolverSession#resolve(String)} and - {@link org.apache.juneau.svl.VarResolverSession#resolveTo(String,Writer)} methods that are identical to - {@link org.apache.juneau.svl.VarResolver#resolve(String)} and - {@link org.apache.juneau.svl.VarResolver#resolveTo(String, Writer)} except that the <code>Var</code> objects - have access to the session objects through the - {@link org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} method. - Session objects are specified through either the {@link org.apache.juneau.svl.VarResolver#createSession(Map)} - method or the {@link org.apache.juneau.svl.VarResolverSession#sessionObject(String, Object)} methods. - </p> - <p> - Like Context object, Session objects are used by {@link org.apache.juneau.svl.Var Vars} by calling the - {@link org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} method. - </p> - <p> - Var resolvers can be cloned and extended by using the {@link org.apache.juneau.svl.VarResolver#builder()} - method. - Cloning a resolver will copy it's {@link org.apache.juneau.svl.Var} class names and context objects. - </p> - - <h5 class='topic'>Example:</h5> - <p class='bcode'> - <jc>// Create a resolver that copies the default resolver and adds $C and $ARG vars.</jc> - VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf>.builder().vars(ConfigFileVar.<jk>class</jk>, - ArgsVar.<jk>class</jk>).build(); - </p> - </div> - - <!-- ======================================================================================================== --> - <a id="OtherNotes"></a> - <h3 class='topic' onclick='toggle(this)'>1.3 - Other Notes</h3> - <div class='topic'> - <ul class='spaced-list'> - <li> - The escape character <js>'\'</js> can be used when necessary to escape the following characters: - <code>$ , { }</code> - <li> - <b>WARNING:</b> It is possible to cause {@link java.lang.StackOverflowError StackOverflowErrors} if - your nested variables result in a recursive loop (e.g. the environment variable - <code>'MYPROPERTY'</code> has the value <code>'$E{MYPROPERTY}'</code>). - So don't do that! - <li> - As a general rule, this class tries to be as efficient as possible by not creating new strings when not - needed. - <br>For example, calling the resolve method on a string that doesn't contain variables (e.g. - <code>resolver.resolve(<js>"foobar"</js>)</code>) will simply be a no-op and return the same string. - </ul> - </div> -</div> -</body> -</html> \ No newline at end of file diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java index 4dd0471..98bc245 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java @@ -23,7 +23,12 @@ import org.apache.juneau.svl.*; * <p> * The difference between {@link CoalesceVar} and {@link CoalesceAndRecurseVar} is that the first will not resolve * inner variables nor recursively resolve variables, and the second will. - * Use {@link CoalesceVar} when resolving user-input. + * <br>Use {@link CoalesceVar} when resolving user-input. + * + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public class CoalesceAndRecurseVar extends MultipartResolvingVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java index 6844a3a..4e7af41 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceVar.java @@ -23,7 +23,12 @@ import org.apache.juneau.svl.*; * <p> * The difference between {@link CoalesceVar} and {@link CoalesceAndRecurseVar} is that the first will not resolve * inner variables nor recursively resolve variables, and the second will. - * Use {@link CoalesceVar} when resolving user-input. + * <br>Use {@link CoalesceVar} when resolving user-input. + * + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public class CoalesceVar extends MultipartResolvingVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java index f9da2fd..ccf0ab2 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/EnvVariablesVar.java @@ -23,7 +23,7 @@ import org.apache.juneau.svl.*; * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create a variable resolver that resolves environment variables (e.g. "$E{PATH}")</jc> - * VarResolver r = <jk>new</jk> VarResolver().addVars(EnvVariablesVar.<js>class</js>); + * VarResolver r = VarResolver.<jsm>create</jsm>().vars(EnvVariablesVar.<jk>class</jk>).build(); * * <jc>// Use it!</jc> * System.<jsf>out</jsf>.println(r.resolve(<js>"Environment variable PATH is set to $E{PATH}"</js>)); @@ -31,9 +31,12 @@ import org.apache.juneau.svl.*; * * <p> * Since this is a {@link SimpleVar}, any variables contained in the result will be recursively resolved. - * Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. + * <br>Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public class EnvVariablesVar extends DefaultingVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java index e26f306..6c3f857 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/IfVar.java @@ -35,7 +35,7 @@ import org.apache.juneau.svl.*; * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create a variable resolver that resolves system properties and $IF vars.</jc> - * VarResolver r = <jk>new</jk> VarResolver().addVars(IfVar.<jk>class</jk>, SystemPropertiesVar.<jk>class</jk>); + * VarResolver r = VarResolver.<jsm>create</jsm>().vars(IfVar.<jk>class</jk>, SystemPropertiesVar.<jk>class</jk>).build(); * * <jc>// Use it!</jc> * System.<jsf>out</jsf>.println(r.resolve(<js>"Property $IF{$S{someBooleanFlag},IS,IS NOT} set!"</js>)); @@ -43,10 +43,13 @@ import org.apache.juneau.svl.*; * * <p> * Since this is a {@link MultipartVar}, any variables contained in the result will be recursively resolved. - * Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. + * <br>Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. * - * @see org.apache.juneau.svl -*/ + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> + */ public class IfVar extends MultipartVar { /** The name of this variable. */ diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java index e51740c..2cdbbed 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SwitchVar.java @@ -38,7 +38,7 @@ import org.apache.juneau.svl.*; * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create a variable resolver that resolves system properties and $SW vars.</jc> - * VarResolver r = <jk>new</jk> VarResolver().addVars(SwitchVar.<jk>class</jk>, SystemPropertiesVar.<jk>class</jk>); + * VarResolver r = VarResolver.<jsm>create</jsm>().vars(SwitchVar.<jk>class</jk>, SystemPropertiesVar.<jk>class</jk>).build(); * * <jc>// Use it!</jc> * System.<jsf>out</jsf>.println(r.resolve(<js>"We are running on $SW{$P{os.name},*win*,Windows,Something else}!"</js>)); @@ -46,7 +46,12 @@ import org.apache.juneau.svl.*; * * <p> * Since this is a {@link MultipartVar}, any variables contained in the result will be recursively resolved. - * Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. + * <br>Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. + * + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public class SwitchVar extends MultipartVar { diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java index 2218df7..65aecb0 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java +++ b/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/SystemPropertiesVar.java @@ -23,7 +23,7 @@ import org.apache.juneau.svl.*; * <h5 class='section'>Example:</h5> * <p class='bcode'> * <jc>// Create a variable resolver that resolves system properties (e.g. "$S{java.home}")</jc> - * VarResolver r = <jk>new</jk> VarResolver().addVars(SystemPropertiesVar.<js>class</js>); + * VarResolver r = VarResolver.<jsm>create</jsm>().vars(SystemPropertiesVar.<jk>class</jk>).build(); * * <jc>// Use it!</jc> * System.<jsf>out</jsf>.println(r.resolve(<js>"java.home is set to $S{java.home}"</js>)); @@ -31,9 +31,12 @@ import org.apache.juneau.svl.*; * * <p> * Since this is a {@link SimpleVar}, any variables contained in the result will be recursively resolved. - * Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. + * <br>Likewise, if the arguments contain any variables, those will be resolved before they are passed to this var. * - * @see org.apache.juneau.svl + * <h5 class='section'>See Also:</h5> + * <ul> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-svl > SVL Variables</a> + * </ul> */ public class SystemPropertiesVar extends MapVar { diff --git a/juneau-doc/src/main/javadoc/overview.html b/juneau-doc/src/main/javadoc/overview.html index 46579a3..18209e6 100644 --- a/juneau-doc/src/main/javadoc/overview.html +++ b/juneau-doc/src/main/javadoc/overview.html @@ -136,6 +136,12 @@ <li><p><a class='doclink' href='#juneau-dto.Swagger'>Swagger</a></p> </ol> <li><p><a class='doclink' href='#juneau-svl'><i>juneau-svl</i></a></p> + <ol> + <li><p><a class='doclink' href='#juneau-svl.SimpleVarLanguage'>Simple Variable Language</a></p> + <li><p><a class='doclink' href='#juneau-svl.SvlVariables'>SVL Variables</a></p> + <li><p><a class='doclink' href='#juneau-svl.VarResolvers'>VarResolvers and VarResolverSessions</a></p> + <li><p><a class='doclink' href='#juneau-svl.OtherNotes'>Other Notes</a></p> + </ol> <li><p><a class='doclink' href='#juneau-config'><i>juneau-config</i></a></p> <li><p><a class='doclink' href='#juneau-rest-server'><i>juneau-rest-server</i></a></p> <ol> @@ -4321,44 +4327,291 @@ org.apache.juneau.svl_7.0.0.jar </p> - <p> - The <code>juneau-svl</code> library defines an API for a language called "Simple Variable Language". - In a nutshell, Simple Variable Language (or SVL) is text that contains variables of the form - <js>"$varName{varKey}"</js>. - </p> - <p> - Variables can be recursively nested within the varKey (e.g. <js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>). - Variables can also return values that themselves contain more variables. - </p> - <p class='bcode'> + <!-- ======================================================================================================== --> + <a id="juneau-svl.SimpleVarLanguage"></a> + <h3 class='topic' onclick='toggle(this)'>5.1 - Simple Variable Language</h3> + <div class='topic'> + <p> + The <l>juneau-svl</l> module defines an API for a language called <l>Simple Variable Language</l>. + <br>In a nutshell, Simple Variable Language (or SVL) is text that contains variables of the form <js>"$varName{varKey}"</js>. + <br>It is used extensively in the ConfigFile, REST and Microservice APIs. + </p> + <p> + Most variables can be recursively nested within the varKey (e.g. <js>"$FOO{$BAR{xxx},$BAZ{xxx}}"</js>) + and can return values that themselves contain more variables. + </p> + <p> + The {@link org.apache.juneau.svl.VarResolver} class is used to resolve variables. + <br>The {@link org.apache.juneau.svl.VarResolver#DEFAULT} resolver is a reusable instance of this class + configured with the following basic variables: + </p> + <ul> + <li><code>$S{key}</code>,<code>$S{key,default}</code> - System properties. + <li><code>$E{key}</code>,<code>$E{key,default}</code> - Environment variables. + <li><code>$IF{booleanValue,thenValue[,elseValue]}</code> - If-else patterns. + <li><code>$SW{test,matchPattern,thenValue[,matchPattern,thenValue][,elseValue]}</code> - Switch patterns. + <li><code>$CO{arg1[,arg2...]}</code> - Coalesce variable. + <li><code>$CR{arg1[,arg2...]}</code> - Coalesce-and-recurse variable. + </ul> + <h5 class='figure'>Example:</h5> + <p class='bcode'> <jc>// Use the default variable resolver to resolve a string that contains $S (system property) variables</jc> String myProperty = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"The Java home directory is $S{java.home}"</js>); - </p> - <p> - The following shows how variables can be arbitrarily nested... - </p> - <p class='bcode'> + </p> + <p> + The following shows how variables can be arbitrarily nested... + </p> + <p class='bcode'> <jc>// Look up a property in the following order: // 1) MYPROPERTY environment variable. // 2) 'my.property' system property if environment variable not found. // 3) 'not found' string if system property not found.</jc> String myproperty = VarResolver.<jsf>DEFAULT</jsf>.resolve(<js>"$E{MYPROPERTY,$S{my.property,not found}}"</js>); - </p> - <p> - SVL is a large topic on it's own. - It is used extensively in the ConfigFile, REST and Microservice APIs. - </p> + </p> + </div> - <h5 class='toc'>Additional Information - org.apache.juneau.svl</h5> - <ol class='toc'> - <li><p><a class='doclink' href='org/apache/juneau/svl/package-summary.html#SimpleVarLanguage'>Simple Variable Language</a></p> - <ol> - <li><p><a class='doclink' href='org/apache/juneau/svl/package-summary.html#Vars'>Vars</a></p> - <li><p><a class='doclink' href='org/apache/juneau/svl/package-summary.html#VarResolvers'>VarResolvers and VarResolverSessions</a></p> - <li><p><a class='doclink' href='org/apache/juneau/svl/package-summary.html#OtherNotes'>Other Notes</a></p> - </ol> - </li> - </ol> + <!-- ======================================================================================================== --> + <a id="juneau-svl.SvlVariables"></a> + <h3 class='topic' onclick='toggle(this)'>5.2 - SVL Variables</h3> + <div class='topic'> + <p> + Variables are defined through the {@link org.apache.juneau.svl.Var} API. + <br>The API comes with several predefined variables and is easily extensible. + </p> + <p> + The following is an example of a variable that performs URL-Encoding on strings. + </p> + <p class='bcode'> + <jc>// First create our var.</jc> + <jk>public class</jk> UrlEncodeVar <jk>extends</jk> SimpleVar { + + <jc>// Must have a no-arg constructor!</jc> + <jk>public</jk> UrlEncodeVar() { + <jk>super</jk>(<js>"UE"</js>); + } + + <jc>// The method we must implement</jc> + <ja>@Override</ja> + <jk>public</jk> String resolve(VarResolverSession session, String key) { + <jk>return</jk> URLEncoder.<jsm>encode</jsm>(key, <js>"UTF-8"</js>); + } + } + + <jc>// Next create a var resolver that extends the existing DEFAULT resolver + // that supports resolving system properties.</jc> + VarResolver r = VarResolver.<jsf>DEFAULT</jsf> + .builder() + .vars(UrlEncodeVar.<jk>class</jk>) + .build(); + + <jc>// Retrieve a system property and URL-encode it if necessary.</jc> + String myProperty = r.resolve(<js>"$UE{$S{my.property}}"</js>); + </p> + <p> + The following shows the class hierarchy of the {@link org.apache.juneau.svl.Var} class: + </p> + <ul class='doctree'> + <li class='jac'>{@link org.apache.juneau.svl.Var} - Superclass of all vars. + <ul> + <li class='jac'>{@link org.apache.juneau.svl.SimpleVar} - Superclass of all vars that return strings. + <ul> + <li class='jac'>{@link org.apache.juneau.svl.DefaultingVar} - Variables that define a default value if the resolve method returns null. + <ul> + <li class='jac'>{@link org.apache.juneau.svl.MapVar} - Variables that pull values from maps. + </ul> + <li class='jac'>{@link org.apache.juneau.svl.MultipartVar} - Variables that consist of 2 or more comma-delimited arguments. + </ul> + <li class='jac'>{@link org.apache.juneau.svl.StreamedVar} - Superclass of all vars that stream their value to writers. + </ul> + </ul> + <p> + The following is the list of default variables defined in all modules: + </p> + <table class='styled' style='min-width:800px;width:50%'> + <tr> + <th>Module</th><th>Class</th><th>Pattern</th> + </tr> + <tr class='dark'> + <td rowspan="6" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td> + <td>{@link org.apache.juneau.svl.vars.EnvVariablesVar}</td> + <td class='code'>$E{envVar[,defaultValue]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.SystemPropertiesVar}</td> + <td class='code'>$S{systemProperty[,defaultValue]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.CoalesceVar}</td> + <td class='code'>$CO{arg1[,arg2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.CoalesceAndRecurseVar}</td> + <td class='code'>$CR{arg1[,arg2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.IfVar}</td> + <td class='code'>$IF{booleanArg,thenValue[,elseValue]}</td> + </tr> + <tr class='dark dd'> + <td>{@link org.apache.juneau.svl.vars.SwitchVar}</td> + <td class='code'>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</td> + </tr> + <tr class='light dd'> + <td rowspan="1" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-config</td> + <td>{@link org.apache.juneau.ini.vars.ConfigFileVar}</td> + <td class='code'>$C{key[,defaultValue]}</td> + </tr> + <tr class='dark'> + <td rowspan="14" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest-server</td> + <td>{@link org.apache.juneau.rest.vars.FileVar}</td> + <td class='code'>$F{path[,defaultValue]}}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.ServletInitParamVar}</td> + <td class='code'>$I{name[,defaultValue]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.LocalizationVar}</td> + <td class='code'>$L{key[,args...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestAttributeVar}</td> + <td class='code'>$RA{key1[,key2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestFormDataVar}</td> + <td class='code'>$RF{key1[,key2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestHeaderVar}</td> + <td class='code'>$RH{key1[,key2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestHeaderVar}</td> + <td class='code'>$RI{key}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestPathVar}</td> + <td class='code'>$RP{key1[,key2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestQueryVar}</td> + <td class='code'>$RQ{key1[,key2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestVar}</td> + <td class='code'>$R{key1[,key2...]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td> + <td class='code'>$SA{contentType,key[,defaultValue]}</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.UrlVar}</td> + <td class='code'>$U{uri}></td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.UrlEncodeVar}</td> + <td class='code'>$UE{uriPart}</td> + </tr> + <tr class='dark dd'> + <td>{@link org.apache.juneau.rest.vars.WidgetVar}</td> + <td class='code'>$W{widgetName}</td> + </tr> + <tr class='light'> + <td rowspan="2" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-microservice-server</td> + <td>{@link org.apache.juneau.microservice.vars.ArgsVar}</td> + <td class='code'>$ARG{key[,defaultValue]}</td> + </tr> + <tr class='light dd'> + <td>{@link org.apache.juneau.microservice.vars.ManifestFileVar}</td> + <td class='code'>$MF{key[,defaultValue]}</td> + </tr> + </table> + </div> + + <!-- ======================================================================================================== --> + <a id="juneau-svl.VarResolvers"></a> + <h3 class='topic' onclick='toggle(this)'>5.3 - VarResolvers and VarResolverSessions</h3> + <div class='topic'> + <p> + The main class for performing variable resolution is {@link org.apache.juneau.svl.VarResolver}. + <br>Two methods are provided for resolving variables: + </p> + <ul class='doctree'> + <li class='jc'>{@link org.apache.juneau.svl.VarResolver} + <ul> + <li class='jm'>{@link org.apache.juneau.svl.VarResolver#resolve(String) resolve(String)} + - Resolves variables and returns the results as a simple string. + <li class='jm'>{@link org.apache.juneau.svl.VarResolver#resolveTo(String,Writer) resolveTo(String,Writer)} + - Resolves variables and sends results to a writer. + </ul> + </ul> + <p> + Var resolvers can rely on the existence of other objects. + <br>For example, {@link org.apache.juneau.ini.vars.ConfigFileVar} relies on the existence of a {@link org.apache.juneau.ini.ConfigFile}. + <br>This is accomplished through the following: + </p> + <ul class='spaced-list'> + <li>Context-objects - Objects set on the resolver. + <li>Session-objects - Objects set on the resolver session. + </ul> + <p> + The following two classes are identical in behavior except for which objects they can access: + </p> + <ul> + <li class='jc'>{@link org.apache.juneau.svl.VarResolver} - Has access to context objects only. + <li class='jc'>{@link org.apache.juneau.svl.VarResolverSession} - Has access to context and session objects. + </ul> + <p> + Context and session objects are set through the following methods: + </p> + <ul> + <li class='jm'>{@link org.apache.juneau.svl.VarResolverBuilder#contextObject(String,Object)} - Context objects. + <li class='jm'>{@link org.apache.juneau.svl.VarResolverSession#sessionObject(String,Object)} - Session objects. + <li class='jm'>{@link org.apache.juneau.svl.VarResolver#createSession(Map)} - Session objects. + </ul> + <p> + Both kinds of objects are accessible through the following method: + </p> + <ul> + <li class='jm'>{@link org.apache.juneau.svl.VarResolverSession#getSessionObject(Class, String)} + </ul> + <p> + Var resolvers can be cloned and extended by using the {@link org.apache.juneau.svl.VarResolver#builder()} method. + <br>Cloning a resolver will copy it's {@link org.apache.juneau.svl.Var} class names and context objects. + </p> + + <h5 class='figure'>Example:</h5> + <p class='bcode'> + <jc>// Create a resolver that copies the default resolver and adds $C and $ARG vars.</jc> + VarResolver myVarResolver = VarResolver.<jsf>DEFAULT</jsf> + .builder() + .vars(ConfigFileVar.<jk>class</jk>, ArgsVar.<jk>class</jk>) + .build(); + </p> + </div> + + <!-- ======================================================================================================== --> + <a id="juneau-svl.OtherNotes"></a> + <h3 class='topic' onclick='toggle(this)'>5.4 - Other Notes</h3> + <div class='topic'> + <ul class='spaced-list'> + <li> + The escape character <js>'\'</js> can be used when necessary to escape the following characters: + <code>$ , { }</code> + <li> + <b>WARNING:</b> It is possible to cause {@link java.lang.StackOverflowError StackOverflowErrors} if + your nested variables result in a recursive loop (e.g. the environment variable + <code>'MYPROPERTY'</code> has the value <code>'$E{MYPROPERTY}'</code>). + So don't do that! + <li> + As a general rule, this class tries to be as efficient as possible by not creating new strings when not + needed. + <br>For example, calling the resolve method on a string that doesn't contain variables (e.g. + <code>resolver.resolve(<js>"foobar"</js>)</code>) will simply be a no-op and return the same string. + </ul> + </div> </div> <!-- =========================================================================================================== --> @@ -7221,68 +7474,158 @@ <p> The following is the default list of supported variables. </p> - <a id="DefaultRestSvlVariables"></a> - <h5 class='topic'>Default REST SVL variables</h5> - <ul class='spaced-list'> - <li><b>Initialization-time variables:</b> - <ul> - <li><l>$C{key[,defaultValue]}</l> - {@link org.apache.juneau.ini.ConfigFileVar} - <li><l>$E{envVar[,defaultValue]}</l> - {@link org.apache.juneau.svl.vars.EnvVariablesVar} - <li><l>$S{systemProperty[,defaultValue]}</l> - {@link org.apache.juneau.svl.vars.SystemPropertiesVar} - </ul> - <li><b>Initialization-time construct variables:</b> - <ul> - <li><l>$CO{arg1[,arg2...]}</l> - {@link org.apache.juneau.svl.vars.CoalesceVar} - <li><l>$CR{arg1[,arg2...]}</l> - {@link org.apache.juneau.svl.vars.CoalesceAndRecurseVar} - <li><l>$IF{booleanArg,thenValue[,elseValue]}</l> - {@link org.apache.juneau.svl.vars.IfVar} - <li><l>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</l> - {@link org.apache.juneau.svl.vars.SwitchVar} - </ul> - <li><b>Request-time variables:</b> - <ul> - <li><l>$F{path[,defaultValue]}</l> - {@link org.apache.juneau.rest.vars.FileVar} - <li><l>$I{name[,defaultValue]}</l> - {@link org.apache.juneau.rest.vars.ServletInitParamVar} - <li><l>$L{key[,args...]}</l> - {@link org.apache.juneau.rest.vars.LocalizationVar} - <li><l>$RA{key1[,key2...]}</l> - {@link org.apache.juneau.rest.vars.RequestAttributeVar} - <li><l>$RF{key1[,key2...]}</l> - {@link org.apache.juneau.rest.vars.RequestFormDataVar} - <li><l>$RH{key1[,key2...]}</l> - {@link org.apache.juneau.rest.vars.RequestHeaderVar} - <li><l>$RI{key}</l> - {@link org.apache.juneau.rest.vars.RequestHeaderVar} - <br>Possible keys: - <ul> - <li><l>$RI{contact}</l> - {@link org.apache.juneau.dto.swagger.Info#getContact()} - <li><l>$RI{description}</l> - {@link org.apache.juneau.rest.RestInfoProvider#getDescription(RestRequest)} - <li><l>$RI{externalDocs}</l> - {@link org.apache.juneau.dto.swagger.Swagger#getExternalDocs()} - <li><l>$RI{license}</l> - {@link org.apache.juneau.dto.swagger.Info#getLicense()} - <li><l>$RI{methodDescription}</l> - {@link org.apache.juneau.rest.RestInfoProvider#getMethodDescription(Method,RestRequest)} - <li><l>$RI{methodSummary}</l> - {@link org.apache.juneau.rest.RestInfoProvider#getMethodSummary(Method,RestRequest)} - <li><l>$RI{siteName}</l> - {@link org.apache.juneau.rest.RestInfoProvider#getSiteName(RestRequest)} - <li><l>$RI{tags}</l> - {@link org.apache.juneau.dto.swagger.Swagger#getTags()} - <li><l>$RI{termsOfService}</l> - {@link org.apache.juneau.dto.swagger.Info#getTermsOfService()} - <li><l>$RI{title}</l> - {@link org.apache.juneau.rest.RestInfoProvider#getTitle(RestRequest)} - <li><l>$RI{version}</l> - {@link org.apache.juneau.dto.swagger.Info#getVersion()} - </ul> - <li><l>$RP{key1[,key2...]}</l> - {@link org.apache.juneau.rest.vars.RequestPathVar} - <li><l>$RQ{key1[,key2...]}</l> - {@link org.apache.juneau.rest.vars.RequestQueryVar} - <li><l>$R{key1[,key2...]}</l> - {@link org.apache.juneau.rest.vars.RequestVar} - <br>Possible keys: - <ul> - <li><l>$R{method}</l> - {@link org.apache.juneau.rest.RestRequest#getMethod()} - <li><l>$R{methodSummary}</l> - {@link org.apache.juneau.rest.RestRequest#getMethodSummary()} - <li><l>$R{methodDescription}</l> - {@link org.apache.juneau.rest.RestRequest#getMethodDescription()} - <li><l>$R{pathInfo}</l> - {@link org.apache.juneau.rest.RestRequest#getPathInfo()} - <li><l>$R{requestParentURI}</l> - {@link org.apache.juneau.UriContext#getRootRelativePathInfoParent()} - <li><l>$R{requestURI}</l> - {@link org.apache.juneau.rest.RestRequest#getRequestURI()} - <li><l>$R{resourceDescription}</l> - {@link org.apache.juneau.rest.RestRequest#getResourceDescription()} - <li><l>$R{resourceTitle}</l> - {@link org.apache.juneau.rest.RestRequest#getResourceTitle()} - <li><l>$R{servletParentURI}</l> - {@link org.apache.juneau.UriContext#getRootRelativeServletPathParent()} - <li><l>$R{servletPath}</l> - {@link org.apache.juneau.rest.RestRequest#getServletPath()} - <li><l>$R{servletURI}</l> - {@link org.apache.juneau.UriContext#getRootRelativeServletPath()} - </ul> - <li><l>$SA{contentType,key[,defaultValue]}</l> - {@link org.apache.juneau.rest.vars.SerializedRequestAttrVar} - <li><l>$U{uri}</l> - {@link org.apache.juneau.rest.vars.UrlVar} - <li><l>$UE{uriPart}</l> - {@link org.apache.juneau.rest.vars.UrlEncodeVar} - <li><l>$W{widgetName}</l> - {@link org.apache.juneau.rest.vars.WidgetVar} - </ul> - </ul> + <a id='DefaultRestSvlVariables'></a> + <h5 class='figure'>Default REST SVL Variables:</h5> + <table class='styled' style='min-width:800px;width:50%'> + <tr> + <th>Module</th><th>Class</th><th>Pattern</th><th>Initialization<br>time</th><th>Request<br>time</th> + </tr> + <tr class='dark'> + <td rowspan="6" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td> + <td>{@link org.apache.juneau.svl.vars.EnvVariablesVar}</td> + <td class='code'>$E{envVar[,defaultValue]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.SystemPropertiesVar}</td> + <td class='code'>$S{systemProperty[,defaultValue]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.CoalesceVar}</td> + <td class='code'>$CO{arg1[,arg2...]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.CoalesceAndRecurseVar}</td> + <td class='code'>$CR{arg1[,arg2...]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.svl.vars.IfVar}</td> + <td class='code'>$IF{booleanArg,thenValue[,elseValue]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark dd'> + <td>{@link org.apache.juneau.svl.vars.SwitchVar}</td> + <td class='code'>$SW{stringArg(,pattern,thenValue)+[,elseValue]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='light dd'> + <td rowspan="1" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-config</td> + <td>{@link org.apache.juneau.ini.vars.ConfigFileVar}</td> + <td class='code'>$C{key[,defaultValue]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td rowspan="14" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest-server</td> + <td>{@link org.apache.juneau.rest.vars.FileVar}</td> + <td class='code'>$F{path[,defaultValue]}}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.ServletInitParamVar}</td> + <td class='code'>$I{name[,defaultValue]}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.LocalizationVar}</td> + <td class='code'>$L{key[,args...]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestAttributeVar}</td> + <td class='code'>$RA{key1[,key2...]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestFormDataVar}</td> + <td class='code'>$RF{key1[,key2...]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestHeaderVar}</td> + <td class='code'>$RH{key1[,key2...]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestHeaderVar}</td> + <td class='code'>$RI{key}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestPathVar}</td> + <td class='code'>$RP{key1[,key2...]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestQueryVar}</td> + <td class='code'>$RQ{key1[,key2...]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.RequestVar}</td> + <td class='code'>$R{key1[,key2...]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.SerializedRequestAttrVar}</td> + <td class='code'>$SA{contentType,key[,defaultValue]}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.UrlVar}</td> + <td class='code'>$U{uri}></td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark'> + <td>{@link org.apache.juneau.rest.vars.UrlEncodeVar}</td> + <td class='code'>$UE{uriPart}</td> + <td style='text-align:center;font-weight:bold'>yes</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='dark dd'> + <td>{@link org.apache.juneau.rest.vars.WidgetVar}</td> + <td class='code'>$W{widgetName}</td> + <td style='text-align:center;font-weight:bold'>no</td> + <td style='text-align:center;font-weight:bold'>yes</td> + </tr> + <tr class='light'> + <td rowspan="2" style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-microservice-server</td> + <td>{@link org.apache.juneau.microservice.vars.ArgsVar}</td> + <td class='code'>$ARG{key[,defaultValue]}</td> + <td style='text-align:center;font-weight:bold'>yes*</td> + <td style='text-align:center;font-weight:bold'>yes*</td> + </tr> + <tr class='light dd'> + <td>{@link org.apache.juneau.microservice.vars.ManifestFileVar}</td> + <td class='code'>$MF{key[,defaultValue]}</td> + <td style='text-align:center;font-weight:bold'>yes*</td> + <td style='text-align:center;font-weight:bold'>yes*</td> + </tr> + </table> + <p> + * = Only if extending from {@link org.apache.juneau.microservice.Resource} + <p> </div> <!-- ======================================================================================================== --> @@ -17208,7 +17551,7 @@ <li>More consistent handling of exceptions. <li>More consistent method declarations. </ul> - <li>Refactored var resolver API and added them to a new package - <a class='doclink' href='org/apache/juneau/svl/package-summary.html#TOC'>org.apache.juneau.svl</a>. + <li>Refactored var resolver API and added them to a new package - <code>org.apache.juneau.svl</code>. <ul> <li>Support for stream-based variables - {@link org.apache.juneau.svl.StreamedVar}. <li>Added support for context and session objects. diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java index c15753f..5746d35 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Microservice.java @@ -25,9 +25,11 @@ import java.util.logging.*; import org.apache.juneau.*; import org.apache.juneau.ini.*; +import org.apache.juneau.ini.vars.*; import org.apache.juneau.internal.*; import org.apache.juneau.microservice.console.*; import org.apache.juneau.microservice.resources.*; +import org.apache.juneau.microservice.vars.*; import org.apache.juneau.svl.*; import org.apache.juneau.svl.vars.*; import org.apache.juneau.utils.*; diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java index 0e1d64b..c0d7014 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/Resource.java @@ -14,9 +14,9 @@ package org.apache.juneau.microservice; import static org.apache.juneau.rest.annotation.HookEvent.*; +import org.apache.juneau.microservice.vars.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; -import org.apache.juneau.svl.vars.*; /** * Superclass for all REST resources. diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java index c27c6e5..3b2da75 100755 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceGroup.java @@ -14,9 +14,9 @@ package org.apache.juneau.microservice; import static org.apache.juneau.rest.annotation.HookEvent.*; +import org.apache.juneau.microservice.vars.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; -import org.apache.juneau.svl.vars.*; /** * Superclass for all REST resource groups. diff --git a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java index 535af3a..d31ca0c 100644 --- a/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/ResourceJenaGroup.java @@ -15,9 +15,9 @@ package org.apache.juneau.microservice; import static org.apache.juneau.rest.annotation.HookEvent.*; import org.apache.juneau.jena.*; +import org.apache.juneau.microservice.vars.*; import org.apache.juneau.rest.*; import org.apache.juneau.rest.annotation.*; -import org.apache.juneau.svl.vars.*; /** * Superclass for all REST resource groups. diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java similarity index 98% rename from juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java rename to juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java index 5387299..d3cb8cb 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ArgsVar.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ArgsVar.java @@ -10,7 +10,7 @@ // * "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.juneau.svl.vars; +package org.apache.juneau.microservice.vars; import org.apache.juneau.svl.*; import org.apache.juneau.utils.*; diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java similarity index 98% rename from juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java rename to juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java index d6bbc83..ae7d3a6 100644 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/ManifestFileVar.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/ManifestFileVar.java @@ -10,7 +10,7 @@ // * "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.juneau.svl.vars; +package org.apache.juneau.microservice.vars; import org.apache.juneau.svl.*; import org.apache.juneau.utils.*; diff --git a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java old mode 100644 new mode 100755 similarity index 65% copy from juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java copy to juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java index 4dd0471..40b9863 --- a/juneau-core/juneau-svl/src/main/java/org/apache/juneau/svl/vars/CoalesceAndRecurseVar.java +++ b/juneau-microservice/juneau-microservice-server/src/main/java/org/apache/juneau/microservice/vars/package-info.java @@ -1,44 +1,18 @@ -// *************************************************************************************************************************** -// * 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.juneau.svl.vars; - -import org.apache.juneau.svl.*; - -/** - * A basic variable resolver that returns the first non-null value. - * - * <p> - * The format for this var is <js>"$CR{arg1[,arg2...]}"</js>. - * - * <p> - * The difference between {@link CoalesceVar} and {@link CoalesceAndRecurseVar} is that the first will not resolve - * inner variables nor recursively resolve variables, and the second will. - * Use {@link CoalesceVar} when resolving user-input. - */ -public class CoalesceAndRecurseVar extends MultipartResolvingVar { - - /** The name of this variable. */ - public static final String NAME = "CR"; - - /** - * Constructor. - */ - public CoalesceAndRecurseVar() { - super(NAME); - } - - @Override - public String resolve(VarResolverSession session, String arg) throws Exception { - return arg; - } -} +// *************************************************************************************************************************** +// * 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. * +// *************************************************************************************************************************** + +/** + * Predefined SVL Variables + */ +package org.apache.juneau.microservice.vars; + diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java index b93b69b..9ae0f9c 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContextBuilder.java @@ -31,6 +31,7 @@ import org.apache.juneau.encoders.Encoder; import org.apache.juneau.http.*; import org.apache.juneau.httppart.*; import org.apache.juneau.ini.*; +import org.apache.juneau.ini.vars.*; import org.apache.juneau.internal.*; import org.apache.juneau.parser.*; import org.apache.juneau.rest.annotation.*; diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java index 14713fa..2b1bdb7 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/annotation/ResourceSwagger.java @@ -12,7 +12,7 @@ // *************************************************************************************************************************** package org.apache.juneau.rest.annotation; -import org.apache.juneau.ini.*; +import org.apache.juneau.ini.vars.*; import org.apache.juneau.rest.vars.*; import org.apache.juneau.svl.vars.*; diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java index b5ef9c3..1f3e3e8 100644 --- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java +++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/vars/FileVar.java @@ -61,7 +61,7 @@ import org.apache.juneau.utils.*; * * <h5 class='section'>See Also:</h5> * <ul> - * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-rest-server.SvlVariables">Overview > juneau-rest-server > SVL Variables</a> + * <li class='link'><a class="doclink" href="../../../../../overview-summary.html#juneau-svl.SvlVariables">Overview > juneau-rest-server > SVL Variables</a> * </ul> */ public class FileVar extends DefaultingVar { -- To stop receiving notification emails like this one, please contact jamesbog...@apache.org.