blob: 8ce49c8cfb5fc5543db2a476368c2c8231d60c3d [file] [log] [blame]
<!--
/***************************************************************************************************************************
* 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.
***************************************************************************************************************************/
-->
{8.0.0-updated, 8.1.0-updated}
SVL Variables
<p>
Variables are defined through the {@link oaj.svl.Var} API.
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='bpcode w800'>
<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 oaj.svl.Var} class:
</p>
<ul class='javatree'>
<li class='jac'>{@link oaj.svl.Var} - Superclass of all vars.
<ul>
<li class='jac'>{@link oaj.svl.SimpleVar} - Superclass of all vars that return strings.
<ul>
<li class='jac'>{@link oaj.svl.DefaultingVar} - Variables that define a default value if the resolve method returns null.
<ul>
<li class='jac'>{@link oaj.svl.MapVar} - Variables that pull values from maps.
</ul>
<li class='jac'>{@link oaj.svl.MultipartVar} - Variables that consist of 2 or more comma-delimited arguments.
</ul>
<li class='jac'>{@link oaj.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 w800'>
<tr>
<th>Module</th><th>Class</th><th>Pattern</th>
</tr>
<tr class='dark'>
<td rowspan='15' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-svl</td>
<td>{@link oaj.svl.vars.EnvVariablesVar}</td>
<td class='code'>$E{key[,default]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.SystemPropertiesVar}</td>
<td class='code'>$S{key[,default]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.ArgsVar}</td>
<td class='code'>$A{key[,default]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.ManifestFileVar}</td>
<td class='code'>$MF{key[,default]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.IfVar}</td>
<td class='code'>$IF{arg,then[,else]}</td>
</tr>
<tr class='dark dd'>
<td>{@link oaj.svl.vars.SwitchVar}</td>
<td class='code'>$SW{arg,pattern1:then1[,pattern2:then2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.CoalesceVar}</td>
<td class='code'>$CO{arg1[,arg2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.PatternMatchVar}</td>
<td class='code'>$PM{arg,pattern}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.PatternReplaceVar}</td>
<td class='code'>$PR{arg,pattern,replace}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.PatternExtractVar}</td>
<td class='code'>$PE{arg,pattern,groupdIndex}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.NotEmptyVar}</td>
<td class='code'>$NE{arg}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.UpperCaseVar}</td>
<td class='code'>$UC{arg}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.LowerCaseVar}</td>
<td class='code'>$LC{arg}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.LenVar}</td>
<td class='code'>$LN{arg[,delimiter]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.svl.vars.SubstringVar}</td>
<td class='code'>$ST{arg,start[,end]}</td>
</tr>
<tr class='dark'>
<td>{@link oaj.html.HtmlWidgetVar}</td>
<td class='code'>$W{name}</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 oaj.config.vars.ConfigVar}</td>
<td class='code'>$C{key[,default]}</td>
</tr>
<tr class='dark'>
<td rowspan='15' style='text-align:center;font-weight:bold;padding:20px;' class='code'>juneau-rest-server</td>
<td>{@link oajr.vars.FileVar}</td>
<td class='code'>$F{path[,default]}}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.ServletInitParamVar}</td>
<td class='code'>$I{name[,default]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.LocalizationVar}</td>
<td class='code'>$L{key[,args...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.RequestAttributeVar}</td>
<td class='code'>$RA{key1[,key2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.RequestFormDataVar}</td>
<td class='code'>$RF{key1[,key2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.RequestHeaderVar}</td>
<td class='code'>$RH{key1[,key2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.RequestHeaderVar}</td>
<td class='code'>$RI{key}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.RequestPathVar}</td>
<td class='code'>$RP{key1[,key2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.RequestQueryVar}</td>
<td class='code'>$RQ{key1[,key2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.RequestVar}</td>
<td class='code'>$R{key1[,key2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.SerializedRequestAttrVar}</td>
<td class='code'>$SA{contentType,key[,default]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.SwaggerVar}</td>
<td class='code'>$SS{key1[,key2...]}</td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.UrlVar}</td>
<td class='code'>$U{uri}></td>
</tr>
<tr class='dark'>
<td>{@link oajr.vars.UrlEncodeVar}</td>
<td class='code'>$UE{uriPart}</td>
</tr>
<tr class='dark dd'>
<td>{@link oajr.vars.WidgetVar} <i>(deprecated)</i></td>
<td class='code'>$W{name}</td>
</tr>
</table>