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

Reply via email to