/** * Augments the set of variables defined in the configuration and var resolver. * * <p> * This calls {@link VarResolverBuilder#vars(Class[])} on the var resolver used to construct the configuration * object returned by {@link Microservice#getConfig()} and the var resolver returned by {@link Microservice#getVarResolver()}. * * @param vars The set of variables to append to the var resolver builder. * @return This object (for method chaining). */ @SuppressWarnings("unchecked") public MicroserviceBuilder vars(Class<? extends Var>...vars) { varResolverBuilder.vars(vars); return this; }
/** * Adds the specified {@link Var} classes to this config. * * <p> * These variables affect the variable resolver returned by {@link RestRequest#getVarResolverSession()} which is * used to resolve string variables of the form <js>"$X{...}"</js>. * * <p> * See {@link RestContext#getVarResolver()} for a list of predefined variables. * * @param vars The {@link Var} classes to add to this config. * @return This object (for method chaining). */ public RestContextBuilder vars(Class<?>...vars) { this.varResolverBuilder.vars(vars); return this; }
/** * Returns a new builder object using the settings in this resolver as a base. * * @return A new var resolver builder. */ public VarResolverBuilder builder() { return new VarResolverBuilder() .vars(ctx.getVars()) .contextObjects(ctx.getContextObjects()); }
/** * Returns a new builder object using the settings in this resolver as a base. * * @return A new var resolver builder. */ public VarResolverBuilder builder() { return new VarResolverBuilder() .vars(ctx.getVars()) .contextObjects(ctx.getContextObjects()); }
/** * Returns a new builder object using the settings in this resolver as a base. * * @return A new var resolver builder. */ public VarResolverBuilder builder() { return new VarResolverBuilder() .vars(ctx.getVars()) .contextObjects(ctx.getContextObjects()); }
@Test public void test() throws Exception { VarResolver vr = new VarResolverBuilder().vars(LowerCaseVar.class, SystemPropertiesVar.class).build(); System.setProperty("LowerCaseVar.test", "fooBAR"); assertEquals("foobar", vr.resolve("$LC{$S{LowerCaseVar.test}}")); } }
@Test public void test() throws Exception { VarResolver vr = new VarResolverBuilder().vars(UpperCaseVar.class, SystemPropertiesVar.class).build(); System.setProperty("UpperCaseVar.test", "fooBAR"); assertEquals("FOOBAR", vr.resolve("$UC{$S{UpperCaseVar.test}}")); } }
@Test public void testParent() throws Exception { VarResolver vr = new VarResolverBuilder().defaultVars().vars(XMultipartVar.class).build(); String t; System.setProperty("a", "a1"); System.setProperty("b", "b1"); t = "$X{$S{a},$S{b}}"; assertEquals("a1+b1", vr.resolve(t)); t = "$X{$S{a}}"; assertEquals("a1", vr.resolve(t)); }
@Test public void test() throws Exception { VarResolver vr = new VarResolverBuilder().vars(LenVar.class, SystemPropertiesVar.class).build(); System.setProperty("LenVarTest.test", "foo bar"); System.setProperty("LenVarTest.test2", "1.2.3.4.5"); // $LN{stringArg} examples assertEquals("1", vr.resolve("$LN{J}")); assertEquals("len=7", vr.resolve("len=$LN{$S{LenVarTest.test}}")); // $LN{stringArg, delimiter} examples assertEquals("5", vr.resolve("$LN{$S{LenVarTest.test2},.}")); } }
@Test public void testNoNest() throws Exception { VarResolver vr = new VarResolverBuilder().vars(NoNestVar.class).build(); test(vr, "$NoNest{foo}", "foo"); test(vr, "$NoNest{$NoNest{foo}}", "$NoNest{foo}"); test(vr, "$NoNest{foo $NoNest{foo} bar}", "foo $NoNest{foo} bar"); }
@Test public void testNoRecurse() throws Exception { VarResolver vr = new VarResolverBuilder().vars(XVar.class, NoRecurseVar.class).build(); test(vr, "$NoRecurse{foo}", "$X{foo}"); test(vr, "$NoRecurse{$NoRecurse{foo}}", "$X{$X{foo}}"); test(vr, "$NoRecurse{foo $NoRecurse{foo} bar}", "$X{foo $X{foo} bar}"); }
@Test public void testNoNestOrRecurse() throws Exception { VarResolver vr = new VarResolverBuilder().vars(XVar.class, NoEitherVar.class).build(); test(vr, "$NoEither{foo}", "$X{foo}"); test(vr, "$NoEither{$NoEither{foo}}", "$X{$NoEither{foo}}"); test(vr, "$NoEither{foo $NoEither{foo} bar}", "$X{foo $NoEither{foo} bar}"); }
@Test public void test() throws Exception { VarResolver vr = new VarResolverBuilder().vars(PatternExtractVar.class, SystemPropertiesVar.class).build(); System.setProperty("PatternExtractVarTest.test", "foo bar"); System.setProperty("PatternExtractVarTest.test2", "size=23"); assertEquals("foo bar", vr.resolve("$PE{$S{PatternExtractVarTest.test},(.*),1}")); assertEquals("size", vr.resolve("$PE{$S{PatternExtractVarTest.test2},(.*)=([0-9]+),1}")); assertEquals("23", vr.resolve("$PE{$S{PatternExtractVarTest.test2},(.*)=([0-9]+),2}")); assertEquals("size=23", vr.resolve("$PE{$S{PatternExtractVarTest.test2},(.*)=([0-9]+),0}")); assertEquals("", vr.resolve("$PE{$S{PatternExtractVarTest.test2},(.*)=([0-9]+),-2}")); assertEquals("", vr.resolve("$PE{$S{PatternExtractVarTest.test2},(.*)=([0-9]+),54}")); } }
@Test public void testEscaped$() throws Exception { VarResolver vr = new VarResolverBuilder().vars(BlankVar.class).build(); String t; t = "${y}"; assertEquals("xyx", vr.resolve(t)); t = "\\${y}"; assertEquals("${y}", vr.resolve(t)); t = "foo\\${y}foo"; assertEquals("foo${y}foo", vr.resolve(t)); // TODO - This doesn't work. //t = "${\\${y}}"; //assertEquals("x${y}x", vr.resolve(t)); }
@Test public void test() throws Exception { VarResolver vr = new VarResolverBuilder().vars(NotEmptyVar.class, SystemPropertiesVar.class).build(); assertEquals("false", vr.resolve("$NE{}")); assertEquals("false", vr.resolve("$NE{ }")); assertEquals("false", vr.resolve("$NE{ $S{xxx} }")); assertEquals("true", vr.resolve("$NE{ foo }")); } }
@Test public void test() throws Exception { VarResolver vr = new VarResolverBuilder().vars(PatternReplaceVar.class, SystemPropertiesVar.class).build(); System.setProperty("PatternReplaceVarTest.test", "foo bar"); System.setProperty("PatternReplaceVarTest.test2", "size=23;display=none;"); // Simple replacements assertEquals("bar bar", vr.resolve("$PR{$S{PatternReplaceVarTest.test},foo,bar}")); assertEquals("coo bar", vr.resolve("$PR{$S{PatternReplaceVarTest.test},^f?,co}")); assertEquals("fine", vr.resolve("$PR{$S{PatternReplaceVarTest.test},oo*,ine}")); assertEquals("FOO FOO", vr.resolve("$PR{$S{PatternReplaceVarTest.test},([a-z]+),FOO}")); // Replacements using matched sub classes assertEquals("size=23px;display=none;", vr.resolve("$PR{$S{PatternReplaceVarTest.test2},(size=([\\d]+)),\\$1px}")); assertEquals("size=??px;display=none;", vr.resolve("$PR{$S{PatternReplaceVarTest.test2},[\\d]+,??px}")); assertEquals("size=23;display=none", vr.resolve("$PR{$S{PatternReplaceVarTest.test2},;\\$,}")); assertEquals("size=23;none=display;", vr.resolve("$PR{$S{PatternReplaceVarTest.test2},;(*)=(*[^;]),;\\$2=\\$1}")); } }
@Test public void test2() throws Exception { VarResolver vr = new VarResolverBuilder().vars(BlankVar.class).build(); String t; t = "${y}"; assertEquals("xyx", vr.resolve(t)); t = "${${y}}"; assertEquals("xxyxx", vr.resolve(t)); t = "${${y}${y}}"; assertEquals("xxyxxyxx", vr.resolve(t)); t = "z${z${y}z}z"; assertEquals("zxzxyxzxz", vr.resolve(t)); }
@Test public void testNulls() throws Exception { VarResolver vr = new VarResolverBuilder().defaultVars().vars(XVar.class).build(); ObjectMap m = new ResolvingObjectMap(vr.createSession()); m.put("foo", null); assertNull(m.get("foo")); m.put("foo", new String[]{null}); assertObjectEquals("[null]", m.get("foo")); m.put("foo", new AList<String>().append(null)); assertObjectEquals("[null]", m.get("foo")); m.put("foo", new AMap<String,String>().append("k1",null)); assertObjectEquals("{k1:null}", m.get("foo")); }
@Test public void testNonStrings() throws Exception { VarResolver vr = new VarResolverBuilder().defaultVars().vars(XVar.class).build(); ObjectMap m = new ResolvingObjectMap(vr.createSession()); m.put("foo", FooEnum.ONE); assertObjectEquals("'ONE'", m.get("foo")); m.put("foo", new Object[]{FooEnum.ONE}); assertObjectEquals("['ONE']", m.get("foo")); m.put("foo", new AList<FooEnum>().append(FooEnum.ONE)); assertObjectEquals("['ONE']", m.get("foo")); m.put("foo", new AMap<FooEnum,FooEnum>().append(FooEnum.ONE,FooEnum.ONE)); assertObjectEquals("{ONE:'ONE'}", m.get("foo")); }
@Test public void testBasic() throws Exception { VarResolver vr = new VarResolverBuilder().defaultVars().vars(XVar.class).build(); ObjectMap m = new ResolvingObjectMap(vr.createSession()); m.put("foo", "$X{a}"); assertEquals(m.get("foo"), "1"); m.put("foo", new String[]{"$X{a}"}); assertObjectEquals("['1']", m.get("foo")); m.put("foo", new AList<String>().append("$X{a}")); assertObjectEquals("['1']", m.get("foo")); m.put("foo", new AMap<String,String>().append("k1","$X{a}")); assertObjectEquals("{k1:'1'}", m.get("foo")); }