GitHub: https://github.com/SylkeWay/synthful
There are two String beans in the context configuration file /durian/src/main/resources/spring/ScriptTemplates-context.xml .
Each of them
- is a java.lang.String bean
- specifying constructor argument:
<constructor-arg><value> script body </value></constructor-arg> - making use of the CDATA enclosure, within which all characters are not interpreted
<![CDATA[ script body ]]> , except for recognising ${context variable} substitution.
The Java class injected with the String beans is src/main/java/com/synthful/angst/app/durian/ScriptTemplates.java
@Service public class ScriptTemplates extends AAngsta { @Inject private String inquireFruitSQL; @Inject private String fruitySASMacro; @Value(value="${fruit.name}") public void setNothing(String nothing) { logger.info("fruit.name:{}", nothing); logger.info("inquireFruitSQL:\n{}", inquireFruitSQL); logger.info("fruitySASMacro:\n{}", fruitySASMacro); } }
Where the context variable substitution is due to the property file appbase/properties/a.properties.
maxUsers = ${durian.maxUsers} fruit.data.filepath = /u/reporter/jobs/data/fruits.txt fruit.type = Berry fruit.name = Rambutan fruit.sortBy = Name
SQL script template as multi-line text inSpring String Bean
The String bean inquireFruitSQL in ScriptTemplates-context.xml
<bean id="inquireFruitSQL" class="java.lang.String" scope="prototype"> <constructor-arg><value><![CDATA[ SELECT f.name, f.genus FROM fruits f WHERE f.type = '${fruit.type}' ]]></value></constructor-arg> </bean>
The logger output shows result of context variable substitution:
INFO ScriptTemplates - inquireFruitSQL: SELECT f.name, f.genus FROM fruits f WHERE f.type = 'Berry'The text of the String bean could then be sent into Spring JDBC template, or any SQL query connector.
SAS macro template as multi-line text in Spring String Bean
The String bean inquireFruitSQL in ScriptTemplates-context.xml
<bean id="fruitySASMacro" class="java.lang.String" scope="prototype"> <constructor-arg><value><![CDATA[ %macro durian; %let fruitname = ${fruit.name}; DATA ${fruit.name}; INFILE '${fruit.data.filepath}'; INPUT Name $ 1-15 Genus $ Family $ RUN; PROC SORT DATA = ${fruit.name}; BY ${fruit.sortBy}; PROC PRINT DATA = ${fruit.name} NOOBS; TITLE &fruitname; VAR Name Genus Family; RUN; %mend durian; ]]></value></constructor-arg> </bean>
The logger output shows result of context variable substitution:
INFO ScriptTemplates - fruitySASMacro: %macro durian; %let fruitname = Rambutan; DATA Rambutan; INFILE '/u/reporter/jobs/data/fruits.txt'; INPUT Name $ 1-15 Genus $ Family $ RUN; PROC SORT DATA = Rambutan; BY Name; PROC PRINT DATA = Rambutan NOOBS; TITLE &fruitname; VAR Name Genus Family; RUN; %mend durian;The text resolved from the String bean could then be submitted to an established SAS session thro SAS/Connect.
No comments:
Post a Comment