On Sat, Aug 4, 2012 at 9:41 PM, Dishara Wijewardana <ddwijeward...@gmail.com > wrote:
> > > On Sat, Aug 4, 2012 at 6:02 PM, Claude Brisson <cla...@renegat.net> wrote: > >> Could this example be more generic? For instance, context could be read >> from a flat properties file. >> > > I think you meant the javax.script.ScriptContext used in this code which > can be get from ScriptEngine. This cannot obtain from a properties file. > Because this is how JSR 223 API is expected to behave. And once you obtain > the context from the engine you can modify it by adding attributes, > writers, readers and removing them. > > >> >> Also, concerning ScriptEngine.eval(String): the String argument should >> be the content of the script itself, not the filename of the script. >> >> This can be done I think. I will do the necessary changes and commit when > all tests get passed. > One question. This has fixed (I have the patch but not comited yet) except for the velocity tooling related scenario .Suppose we pass a script of the .vm file to engine. But internally how to obtain the template. (velocityEngine.getTemplate(String)) . This method should provide the template name(assuming script is in the classspath). How do we deal with this when we provide the script itself ? > >> Claude >> >> On Sat, 4 Aug 2012 01:03:56 +0530 >> Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> >> > On Wed, Aug 1, 2012 at 11:13 AM, Dishara Wijewardana < >> > ddwijeward...@gmail.com> wrote: >> > >> > > Hi Claude >> > > >> > > I think now I was able to get the code what you expected. And I just >> > > basically added the template merging stuff to script engine code and >> > > the flow went successfully ;-). >> > > Here is how to deal with tools with the JSR 223 API. >> > > >> > Hi Claude, >> > Can you verify this code whether it meets your expectations ? >> > >> > >> > > ScriptEngineManager manager = new ScriptEngineManager(); >> > > manager.registerEngineName("velocity", new >> > > VelocityScriptEngineFactory()); >> > > engine = manager.getEngineByName("velocity"); >> > > >> > > ScriptContext context = engine.getContext(); >> > > >> > > Properties properties = new Properties(); >> > > properties.put("resource.loader", "class"); >> > > properties.put("class.resource.loader.description", >> > > "Template Class Loader"); >> > > properties.put("class.resource.loader.class", >> > > "org.apache.velocity.runtime.resource.loader. >> > > ClasspathResourceLoader"); >> > > >> > > CustomEvent event = new CustomEvent("MyEvent"); >> > > context.getBindings(ScriptContext.ENGINE_SCOPE).put("event", >> > > event); >> > > context.setAttribute(VelocityScriptEngine.VELOCITY_PROPERTIES, >> > > properties, ScriptContext.ENGINE_SCOPE); >> > > >> > > Writer writer = new StringWriter(); >> > > context.setWriter(writer); >> > > engine.eval("eventtool.vm"); >> > > System.out.println("####### Tools output >> > > #########\n"+writer); >> > > >> > > >> > > On Wed, Aug 1, 2012 at 12:34 AM, Dishara Wijewardana < >> > > ddwijeward...@gmail.com> wrote: >> > > >> > >> >> > >> >> > >> On Mon, Jul 30, 2012 at 12:40 AM, Claude Brisson >> > >> <cla...@renegat.net>wrote: >> > >> >> > >>> On Sun, 29 Jul 2012 23:57:22 +0530 >> > >>> Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> > >>> >> > >>> > On Sun, Jul 29, 2012 at 10:20 PM, Claude Brisson >> > >>> > <cla...@renegat.net> wrote: >> > >>> > >> > >>> > > Pardon me if I'm all wrong with that, but I really thought >> > >>> > > that in the context of the JSR 223 API, templates themselves >> > >>> > > were considered as scripts. >> > >>> > > >> > >>> > > This API is a wrapper around a scripting engine, that >> > >>> > > evaluates scripts, which in our case are Velocity templates. >> > >>> > >> > >>> > My question is how do we manage following methods . We need to >> > >>> > pass a template instance or a wrapper of it in to JSR 223 >> > >>> > ScriptEngine . How to achieve this without having extensive >> > >>> > methods in ScriptEngine API? >> > >>> > >> > >>> > template.merge(context, writer); >> > >>> > ve.getTemplate(vmTemplateFile); >> > >>> >> > >>> The Velocity context corresponds to the JSR 223 Bindings. >> > >>> Populating it should not be a problem. >> > >>> >> > >>> The evaluation itself should gather the getTemplate() step and the >> > >>> merge() step, or use one of the VelocityEngine.evaluate() method, >> > >>> this is already what you did in VelocityScriptEngine.eval() >> > >>> method. >> > >> >> > >> >> > >> I think now I understood what you really meant. Will provide the >> > >> client code ASAP and also I think I have to change the >> > >> engine.eval() method in JSR223 API. >> > >> >> > >> >> > >> >> > >>> So I >> > >>> really don't understand why you would need other methods. But >> > >>> maybe I'm still missing something... >> > >>> >> > >>> Oh, by the way, I still saw some method comments like the >> > >>> following one in your code: >> > >>> /** >> > >>> * Added creation inside sync block to avoid creating two >> > >>> factories from a engine by two parallel threads at the same time. >> > >>> * Also the additional null check out from sync block is to >> > >>> avoid every thread to get blocked inside it even there is an >> > >>> already created factory. */ >> > >>> >> > >>> so I recall you that such comments may be useful when reading the >> > >>> code, but they should be inside the method, not as a javadoc >> > >>> comment. Javadoc users don't care about such details. Could you >> > >>> please do something about that? >> > >> >> > >> >> > >> I thought I cleared all. Sorry for the inconvenience caused. Will >> > >> clean them all and update. >> > >> >> > > Done. >> > > >> > >> >> > >> >> > >>> >> > >>> >> > >>> Claude >> > >>> >> > >>> >> > >>> > >> > >>> > > >> > >>> > > Claude >> > >>> > > >> > >>> > > On Sun, 29 Jul 2012 00:52:08 +0530 >> > >>> > > Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> > >>> > > >> > >>> > > > On Sat, Jul 28, 2012 at 12:53 PM, Claude Brisson >> > >>> > > > <cla...@renegat.net> wrote: >> > >>> > > > >> > >>> > > > > On Sat, 28 Jul 2012 11:47:35 +0530 >> > >>> > > > > Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> > >>> > > > > >> > >>> > > > > > On Fri, Jul 27, 2012 at 2:20 PM, Claude Brisson >> > >>> > > > > > <cla...@renegat.net> wrote: >> > >>> > > > > > >> > >>> > > > > > > Well, ok, but it's still not what I asked for: I >> > >>> > > > > > > meant a command line tool that would, of course, use >> > >>> > > > > > > your JSR 223 API classes. >> > >>> > > > > > > >> > >>> > > > > > HI Claude, >> > >>> > > > > > Sorry for the inconvenience I made. So what you meant >> > >>> > > > > > is do the above similar kind of thing (a client code) >> > >>> > > > > > which would not directly goes through the velocity API >> > >>> > > > > > but through JSR223 API ? If so in that case we would >> > >>> > > > > > need to add additional methods to the JSR API ? IS that >> > >>> > > > > > OK ? Is it what you expected ? >> > >>> > > > > >> > >>> > > > > Well, the API is meant to be used, and a command line >> > >>> > > > > wrapper seems to me one of the simplest things we could >> > >>> > > > > do as an example. >> > >>> > > > > >> > >>> > > > > Why would you need additional methods to the JSR 223 API? >> > >>> > > > > Which methods? >> > >>> > > > > >> > >>> > > > JSR223 API doesn't have a concept like templates which is in >> > >>> > > > velocity. Hence it does not have getTemplate() method. >> > >>> > > > ( because I have simply to execute a similar example as >> > >>> > > > given through jsr 223 API, need a getTemplate() ) >> > >>> > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > > Claude >> > >>> > > > > >> > >>> > > > > > >> > >>> > > > > > > Claude >> > >>> > > > > > > >> > >>> > > > > > > On Fri, 27 Jul 2012 00:00:31 +0530 >> > >>> > > > > > > Dishara Wijewardana <ddwijeward...@gmail.com> wrote: >> > >>> > > > > > > >> > >>> > > > > > > > Hi Claude, >> > >>> > > > > > > > I was finally able to got a simple code >> > >>> > > > > > > > working :-) . >> > >>> > > > > > > > >> > >>> > > > > > > > public class Main { >> > >>> > > > > > > > >> > >>> > > > > > > > public static void main(String[] args) throws >> > >>> > > > > > > > Exception { VelocityContext context = new >> > >>> > > > > > > > VelocityContext(); Writer writer = new >> > >>> > > > > > > > StringWriter(); >> > >>> > > > > > > > >> > >>> > > > > > > > CustomEvent event = new >> > >>> > > > > > > > CustomEvent("subash"); context.put("event", event); >> > >>> > > > > > > > Template template = >> > >>> > > > > > > > createTemplate("eventtool.vm"); >> > >>> > > > > > > > >> > >>> > > > > > > > template.merge(context, writer); >> > >>> > > > > > > > System.out.println(writer); >> > >>> > > > > > > > writer.close(); >> > >>> > > > > > > > } >> > >>> > > > > > > > >> > >>> > > > > > > > private static Template createTemplate(String >> > >>> > > > > > > > vmTemplateFile) throws Exception { >> > >>> > > > > > > > VelocityEngine ve = new VelocityEngine(); >> > >>> > > > > > > > Properties properties = new Properties(); >> > >>> > > > > > > > properties.put("resource.loader", "class"); >> > >>> > > > > > > > >> > >>> > > properties.put("class.resource.loader.description","Template >> > >>> > > > > > > > Class Loader"); >> > >>> > > > > > > > properties.put("class.resource.loader.class", >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > >> > >>> >> "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); >> > >>> > > > > > > > ve.init(properties); >> > >>> > > > > > > > return ve.getTemplate(vmTemplateFile); >> > >>> > > > > > > > } >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > >> > >>> > > > > >> > >>> > > >> > >>> >> >> --------------------------------------------------------------------------------------------------------------------------------- >> > >>> > > > > > > > >> > >>> > > > > > > > And here is the template and the out put. >> > >>> > > > > > > > >> > >>> > > > > > > > *eventtool.vm* >> > >>> > > > > > > > >> > >>> > > > > > > > $event; >> > >>> > > > > > > > >> > >>> > > > > > > > Event Created by $event.getName() >> > >>> > > > > > > > Event Created on $event.getDate() >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > > *Output* >> > >>> > > > > > > > * >> > >>> > > > > > > > * >> > >>> > > > > > > > This is a test event template: created bysubash on >> > >>> > > > > > > > Thu Jul 26 23:57:25 IST 2012; >> > >>> > > > > > > > >> > >>> > > > > > > > Event Created by subash >> > >>> > > > > > > > Event Created on Thu Jul 26 23:57:25 IST 2012 >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > > On Sun, Jul 22, 2012 at 4:54 PM, Claude Brisson >> > >>> > > > > > > > <cla...@renegat.net> wrote: >> > >>> > > > > > > > >> > >>> > > > > > > > > > Did you mean Velocity maven plugin tool[1] as >> > >>> > > > > > > > > > the command line tool ? If not can you please >> > >>> > > > > > > > > > direct me to a link to find the example to >> > >>> > > > > > > > > > follow. Because in the documentation page there >> > >>> > > > > > > > > > are links to XML tool, View tool, JSP tool and >> > >>> > > > > > > > > > etc. And couldn't find "command line tool" >> > >>> > > > > > > > > > thing . Correct me if I am looking for >> > >>> > > > > > > > > > irrelevant. >> > >>> > > > > > > > > > >> > >>> > > > > > > > > > [1] - >> > >>> > > > > > > > > > >> > >>> > > > > > > > > >> > >>> > > > > > > >> > >>> > > > > >> > >>> > > >> > >>> >> http://velocity.apache.org/tools/devel/maven-velocity-tools-plugin/index.html >> > >>> > > > > > > > > >> > >>> > > > > > > > > No, when I say "command line tool", I only mean a >> > >>> > > > > > > > > plain old Java object with a "main(String >> > >>> > > > > > > > > args[])" method, that you can call from the >> > >>> > > > > > > > > command line... >> > >>> > > > > > > > > >> > >>> > > > > > > > > >> > >>> > > > > > > > > Claude >> > >>> > > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > >> > >>> > > > > > > >> > >>> > > > > > >> > >>> > > > > > >> > >>> > > > > >> > >>> > > > > >> > >>> > > > >> > >>> > > > >> > >>> > > >> > >>> > > >> > >>> > >> > >>> > >> > >>> >> > >>> >> > >> >> > >> >> > >> -- >> > >> Thanks >> > >> /Dishara >> > >> >> > >> >> > > >> > > >> > > -- >> > > Thanks >> > > /Dishara >> > > >> > > >> > >> > >> >> > > > -- > Thanks > /Dishara > > -- Thanks /Dishara