Snippetory, a code generation platform

It's said: Progress is the way from the primitive via the complicated towards the simple. In that sense Snippetory can be considered simple.

So, what do you need to know, to start?

First you need a dependency:

<groupId>org.jproggy</groupId> <artifactId>snippetory-core</artifactId> <version>0.9.6</version>

And don't hesitate: It uses the Apache Public License 2.0.

Then you need a template. It's part of your source so maybe you put it in your sources. Then you can easily load it via resource loading.

$platform is <ul> $traits{ <li>$trait</li> }$ </ul>

Lastly you need to bind it:

Template tpl = Repo.readResource("myTemplate.html") .encoding(Encodings.HTML) .parse() .set("platform", "Snippetory"); Stream.of("visionary", "open", "source").forEach( t -> tpl.get("traits").set("trait", t).render() ); tpl.render(System.out)

Out there, there are a number projects, where every thing is said now. That on one hand means: Yes, you're good to go for pretty complex projects. But of course, more knowledge helps if thing get rough. Once things get bigger you might ask how to organize your java code what encodings can do for you.

Or you might look into the intact template:

package /*$package(*/org.jproggy.sample/*)*/; public class $Name$Bean { // $properties{ private /*$type(*/int/*)*/ $name$; public /*$type(*/int/*)*/ get$Name$() { return $name$; } public void set$Name$(/*$type(*/int/*)*/ $name$) { this.$name$ = $name$; } // }$ }

That allows you to take advantage of your Java editor and, if you tell your IDE to handle the templates as Java, refactoring tools can affect them as well. Even unit tests for the templates are possible. But generally the strong separtion of concerns makes Snippetory pretty strong in testing.

Different Snippetory syntaxes allow for intact templates for a number of different output language like HTML, CSS, SQL and a lot more... Learn more about intact templates

Talking about SQL: The snippetory-sql module takes this one step further!

SELECT * FROM tblTest1 WHERE value = :mandatory /*${*/ OR value = :opt1/*}$*/ /*${*/ OR value = :opt2/*}$*/

While that template is possible with snippetory-core as well, with snippetory-sql this will create prepared statments. And there's a smooth API to directly load stuff via such a SQL template:

Statement stmt = new SqlContext() .uriResolver(UriResolver.resource("org/jproggy/sample")) .connections(() -> connection) .getRepository("DbAccessRepo.sql") .get("statement1"); List<Object[]> result = stmt.set("mandatory", "test") .list(SQL.objects());

Enjoy!

Bernd Ebertz Head, Founder and chief technology evangelist of
jproggy.org