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

Reply via email to