![JAR search and dependency download from the Maven repository](/logo.png)
org.apache.juneau.svl.vars.ArgsVar Maven / Gradle / Ivy
// ***************************************************************************************************************************
// * 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 static org.apache.juneau.common.internal.StringUtils.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.svl.*;
/**
* JVM args variable resolver.
*
*
* The format for this var is "$A{arg[,default]}" .
*
*
* This variable resolver requires that the command-line arguments be made available through any of the following:
*
* "sun.java.command" system property.
* "juneau.args" system property.
* - {@link #init(Args)} has been called.
*
*
* Example:
*
* // Create an args object from the main(String[]) method.
* Args args = new Args(argv );
*
* ArgsVar.init (args );
*
* // Create a variable resolver that resolves JVM arguments (e.g. "$A{1}")
* VarResolver varResolver = VarResolver.create ().vars(ArgsVar.class ).build();
*
* // Use it!
* System.out .println(varResolver .resolve("Arg #1 is set to $A{1}" ));
*
*
*
* 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 Also:
*/
public class ArgsVar extends DefaultingVar {
/** The name of this variable. */
public static final String NAME = "A";
private static volatile Args ARGS;
/**
* Initialize the args for this variable.
*
* @param args The parsed command-line arguments.
*/
public static void init(Args args) {
ARGS = args;
}
private final Args args;
/**
* Constructor.
*/
public ArgsVar() {
super(NAME);
if (ARGS != null)
this.args = ARGS;
else {
String s = System.getProperty("sun.java.command");
if (isNotEmpty(s)) {
int i = s.indexOf(' ');
args = new Args(i == -1 ? "" : s.substring(i+1));
} else {
args = new Args(System.getProperty("juneau.args", ""));
}
}
}
@Override /* Var */
public String resolve(VarResolverSession session, String key) {
return args.getArg(key);
}
}