You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by "B. Scott Smith" <sc...@smithdomain.com> on 2010/06/22 18:22:28 UTC

loadConfiguration() equivalent in Velocity Tools 2.0

Hi, I am trying to migrate to Velocity Tools 2.0. My application 
currently needs to set a Velocity Property to a value that is determined 
at run-time.
For example, I would like to set a property to one of two possible 
values, based on the current setting of my application's debug value. 
Before, I did this by simply overwriting the loadConfiguration() method:

    protected Properties loadConfiguration( ServletConfig config )
         throws IOException, FileNotFoundException
    {
         Properties velocityProps = new Properties(  );
         if ( localDir != null ) {
             velocityProps.setProperty(
    Velocity.FILE_RESOURCE_LOADER_PATH, localDir );
         }
         velocityProps.setProperty( Velocity.RUNTIME_LOG, localDir +
    "velocity.log" );
         velocityProps.setProperty(
    Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, debugFlag ?
                                   
    "org.apache.velocity.runtime.log.SimpleLog4JLogSystem" :
                                   
    "org.apache.velocity.runtime.log.NullLogSystem" );
         return velocityProps;
    }


How can I accomplish the same thing in Tools 2.0?
Thanks in advance for your help.
  - Scott Smith


Re: loadConfiguration() equivalent in Velocity Tools 2.0

Posted by Nathan Bubna <nb...@gmail.com>.
On Tue, Jun 22, 2010 at 5:34 PM, B. Scott Smith <sc...@smithdomain.com> wrote:
> Hi Nathan, thanks again for the reply.
> You make it sound very easy, but for some reason I'm just not getting it. I
> tried to do as you suggest, but the new class won't compile. After
> additionally importing org.apache.velocity.app.VelocityEngine, I still get:
>
> MyVelocityView.java:4: cannot find symbol
>     [javac] symbol  : constructor VelocityView()
>     [javac] location: class org.apache.velocity.tools.view.VelocityView
>
> Do I have to override all the constructors? I added one:
>
> public MyVelocityView( JeeConfig config ) { super( config ); }
>
> and now it compiles, but is this correct?

Shoot, sorry.  I did forget the constructor and the VelocityEngine
import.  Yes, that should do it.

> But even so, I'm still not sure what to do next. I assume where you put "//
> do you stuff here", I will be making a series of calls to
> velocity.setProperty(). But I don't understand how this instantiated class
> would have access to the dynamic information necessary to provide the
> correct property values, such as the local directory and debug variables I
> mentioned in my Servlet code snippet.

I don't know how your former VelocityViewServlet class got the
localDir or debugFlag properties, so i can't really answer that.  You
do have access to the JeeConfig, which should give you access to the
ServletContext and init parameters.

> I know this should be easier, but I'm just not connecting the dots...

s'ok.

> Thanks again.
>  - Scott
>
> On 6/22/2010 4:17 PM, Nathan Bubna wrote:
>
> You subclass VelocityView like this:
>
> package com.foo;
> import org.apache.velocity.tools.view.*;
> public class MyVelocityView extends VelocityView
>   protected void configure(final JeeConfig config, final
> VelocityEngine velocity) {
>    super.configure(config, velocity);
>    //do your stuff here
>  }
> }
>
> so long as you put the context-param i said, your MyVelocityView class
> will automatically be used.  and no, VelocityEngine config has been
> moved into the VelocityView class, so the two options i gave you are
> pretty much it.
>
> On Tue, Jun 22, 2010 at 1:06 PM, B. Scott Smith <sc...@smithdomain.com>
> wrote:
>
>
> Thanks for the reply.
> I'm not sure how I would subclass VelocityView, as my application is already
> subclassing VelocityViewServlet. I currently override init() which
> eventually calls super.init(), and I also override handleRequest().
>
> Do I have any choices in this case? Thanks again.
>  - Scott
>
> On 6/22/2010 2:17 PM, Nathan Bubna wrote:
>
>
> Unfortunately, in the quest to simplify other things and improve
> performance, this particular sort of customization is now a little
> more complicated.   There are two ways to do it:
>
> Subclass VelocityView with the following:
>
> protected void configure(final JeeConfig config, final VelocityEngine
> velocity) {
>   super.configure(config, velocity);
>   //do your stuff here
> }
>
> and tell your VelocityView[Servlet/Filter/Tag]s to use it via:
>
> <context-param>
>   <param-name>org.apache.velocity.tools.view.class</param-name>
>   <param-value>com.foo.MyVelocityView</param-value>
> </context-param>
>
> or alternately, you can try subclassing your
> VelocityView[Servlet/Filter/Tag](s) directly and creating your own
> VelocityEngine during init and then calling
> getVelocityView().setVelocityEngine(myEngine), but then, of course,
> you will not be taking advantage of all the VelocityEngine
> configuration done by VelocityView and friends.  So i recommend the
> former option.
>
> On Tue, Jun 22, 2010 at 9:22 AM, B. Scott Smith<sc...@smithdomain.com>
>  wrote:
>
>
>
> Hi, I am trying to migrate to Velocity Tools 2.0. My application
> currently
> needs to set a Velocity Property to a value that is determined at
> run-time.
> For example, I would like to set a property to one of two possible
> values,
> based on the current setting of my application's debug value. Before, I
> did
> this by simply overwriting the loadConfiguration() method:
>
>   protected Properties loadConfiguration( ServletConfig config )
>        throws IOException, FileNotFoundException
>   {
>        Properties velocityProps = new Properties(  );
>        if ( localDir != null ) {
>            velocityProps.setProperty(
>   Velocity.FILE_RESOURCE_LOADER_PATH, localDir );
>        }
>        velocityProps.setProperty( Velocity.RUNTIME_LOG, localDir +
>   "velocity.log" );
>        velocityProps.setProperty(
>   Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, debugFlag ?
>
> "org.apache.velocity.runtime.log.SimpleLog4JLogSystem" :
>
> "org.apache.velocity.runtime.log.NullLogSystem" );
>        return velocityProps;
>   }
>
>
> How can I accomplish the same thing in Tools 2.0?
> Thanks in advance for your help.
>  - Scott Smith
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
> For additional commands, e-mail: user-help@velocity.apache.org
>
>
>
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org


Re: loadConfiguration() equivalent in Velocity Tools 2.0

Posted by "B. Scott Smith" <sc...@smithdomain.com>.
Hi Nathan, thanks again for the reply.
You make it sound very easy, but for some reason I'm just not getting 
it. I tried to do as you suggest, but the new class won't compile. After 
additionally importing org.apache.velocity.app.VelocityEngine, I still get:

    MyVelocityView.java:4: cannot find symbol
         [javac] symbol  : constructor VelocityView()
         [javac] location: class org.apache.velocity.tools.view.VelocityView

Do I have to override all the constructors? I added one:

    public MyVelocityView( JeeConfig config ) { super( config ); }

and now it compiles, but is this correct?
But even so, I'm still not sure what to do next. I assume where you put 
"// do you stuff here", I will be making a series of calls to 
velocity.setProperty(). But I don't understand how this instantiated 
class would have access to the dynamic information necessary to provide 
the correct property values, such as the local directory and debug 
variables I mentioned in my Servlet code snippet.
I know this should be easier, but I'm just not connecting the dots...
Thanks again.
  - Scott

On 6/22/2010 4:17 PM, Nathan Bubna wrote:
> You subclass VelocityView like this:
>
> package com.foo;
> import org.apache.velocity.tools.view.*;
> public class MyVelocityView extends VelocityView
>    protected void configure(final JeeConfig config, final
> VelocityEngine velocity) {
>     super.configure(config, velocity);
>     //do your stuff here
>   }
> }
>
> so long as you put the context-param i said, your MyVelocityView class
> will automatically be used.  and no, VelocityEngine config has been
> moved into the VelocityView class, so the two options i gave you are
> pretty much it.
>
> On Tue, Jun 22, 2010 at 1:06 PM, B. Scott Smith<sc...@smithdomain.com>  wrote:
>    
>> Thanks for the reply.
>> I'm not sure how I would subclass VelocityView, as my application is already
>> subclassing VelocityViewServlet. I currently override init() which
>> eventually calls super.init(), and I also override handleRequest().
>>
>> Do I have any choices in this case? Thanks again.
>>   - Scott
>>
>> On 6/22/2010 2:17 PM, Nathan Bubna wrote:
>>      
>>> Unfortunately, in the quest to simplify other things and improve
>>> performance, this particular sort of customization is now a little
>>> more complicated.   There are two ways to do it:
>>>
>>> Subclass VelocityView with the following:
>>>
>>> protected void configure(final JeeConfig config, final VelocityEngine
>>> velocity) {
>>>    super.configure(config, velocity);
>>>    //do your stuff here
>>> }
>>>
>>> and tell your VelocityView[Servlet/Filter/Tag]s to use it via:
>>>
>>> <context-param>
>>>    <param-name>org.apache.velocity.tools.view.class</param-name>
>>>    <param-value>com.foo.MyVelocityView</param-value>
>>> </context-param>
>>>
>>> or alternately, you can try subclassing your
>>> VelocityView[Servlet/Filter/Tag](s) directly and creating your own
>>> VelocityEngine during init and then calling
>>> getVelocityView().setVelocityEngine(myEngine), but then, of course,
>>> you will not be taking advantage of all the VelocityEngine
>>> configuration done by VelocityView and friends.  So i recommend the
>>> former option.
>>>
>>> On Tue, Jun 22, 2010 at 9:22 AM, B. Scott Smith<sc...@smithdomain.com>
>>>   wrote:
>>>
>>>        
>>>> Hi, I am trying to migrate to Velocity Tools 2.0. My application
>>>> currently
>>>> needs to set a Velocity Property to a value that is determined at
>>>> run-time.
>>>> For example, I would like to set a property to one of two possible
>>>> values,
>>>> based on the current setting of my application's debug value. Before, I
>>>> did
>>>> this by simply overwriting the loadConfiguration() method:
>>>>
>>>>    protected Properties loadConfiguration( ServletConfig config )
>>>>         throws IOException, FileNotFoundException
>>>>    {
>>>>         Properties velocityProps = new Properties(  );
>>>>         if ( localDir != null ) {
>>>>             velocityProps.setProperty(
>>>>    Velocity.FILE_RESOURCE_LOADER_PATH, localDir );
>>>>         }
>>>>         velocityProps.setProperty( Velocity.RUNTIME_LOG, localDir +
>>>>    "velocity.log" );
>>>>         velocityProps.setProperty(
>>>>    Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, debugFlag ?
>>>>
>>>> "org.apache.velocity.runtime.log.SimpleLog4JLogSystem" :
>>>>
>>>> "org.apache.velocity.runtime.log.NullLogSystem" );
>>>>         return velocityProps;
>>>>    }
>>>>
>>>>
>>>> How can I accomplish the same thing in Tools 2.0?
>>>> Thanks in advance for your help.
>>>>   - Scott Smith
>>>>
>>>>
>>>>
>>>>          
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
>>> For additional commands, e-mail: user-help@velocity.apache.org
>>>
>>>
>>>        
>>      

Re: loadConfiguration() equivalent in Velocity Tools 2.0

Posted by Nathan Bubna <nb...@gmail.com>.
You subclass VelocityView like this:

package com.foo;
import org.apache.velocity.tools.view.*;
public class MyVelocityView extends VelocityView
  protected void configure(final JeeConfig config, final
VelocityEngine velocity) {
   super.configure(config, velocity);
   //do your stuff here
 }
}

so long as you put the context-param i said, your MyVelocityView class
will automatically be used.  and no, VelocityEngine config has been
moved into the VelocityView class, so the two options i gave you are
pretty much it.

On Tue, Jun 22, 2010 at 1:06 PM, B. Scott Smith <sc...@smithdomain.com> wrote:
> Thanks for the reply.
> I'm not sure how I would subclass VelocityView, as my application is already
> subclassing VelocityViewServlet. I currently override init() which
> eventually calls super.init(), and I also override handleRequest().
>
> Do I have any choices in this case? Thanks again.
>  - Scott
>
> On 6/22/2010 2:17 PM, Nathan Bubna wrote:
>>
>> Unfortunately, in the quest to simplify other things and improve
>> performance, this particular sort of customization is now a little
>> more complicated.   There are two ways to do it:
>>
>> Subclass VelocityView with the following:
>>
>> protected void configure(final JeeConfig config, final VelocityEngine
>> velocity) {
>>   super.configure(config, velocity);
>>   //do your stuff here
>> }
>>
>> and tell your VelocityView[Servlet/Filter/Tag]s to use it via:
>>
>> <context-param>
>>   <param-name>org.apache.velocity.tools.view.class</param-name>
>>   <param-value>com.foo.MyVelocityView</param-value>
>> </context-param>
>>
>> or alternately, you can try subclassing your
>> VelocityView[Servlet/Filter/Tag](s) directly and creating your own
>> VelocityEngine during init and then calling
>> getVelocityView().setVelocityEngine(myEngine), but then, of course,
>> you will not be taking advantage of all the VelocityEngine
>> configuration done by VelocityView and friends.  So i recommend the
>> former option.
>>
>> On Tue, Jun 22, 2010 at 9:22 AM, B. Scott Smith<sc...@smithdomain.com>
>>  wrote:
>>
>>>
>>> Hi, I am trying to migrate to Velocity Tools 2.0. My application
>>> currently
>>> needs to set a Velocity Property to a value that is determined at
>>> run-time.
>>> For example, I would like to set a property to one of two possible
>>> values,
>>> based on the current setting of my application's debug value. Before, I
>>> did
>>> this by simply overwriting the loadConfiguration() method:
>>>
>>>   protected Properties loadConfiguration( ServletConfig config )
>>>        throws IOException, FileNotFoundException
>>>   {
>>>        Properties velocityProps = new Properties(  );
>>>        if ( localDir != null ) {
>>>            velocityProps.setProperty(
>>>   Velocity.FILE_RESOURCE_LOADER_PATH, localDir );
>>>        }
>>>        velocityProps.setProperty( Velocity.RUNTIME_LOG, localDir +
>>>   "velocity.log" );
>>>        velocityProps.setProperty(
>>>   Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, debugFlag ?
>>>
>>> "org.apache.velocity.runtime.log.SimpleLog4JLogSystem" :
>>>
>>> "org.apache.velocity.runtime.log.NullLogSystem" );
>>>        return velocityProps;
>>>   }
>>>
>>>
>>> How can I accomplish the same thing in Tools 2.0?
>>> Thanks in advance for your help.
>>>  - Scott Smith
>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
>> For additional commands, e-mail: user-help@velocity.apache.org
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org


Re: loadConfiguration() equivalent in Velocity Tools 2.0

Posted by "B. Scott Smith" <sc...@smithdomain.com>.
Thanks for the reply.
I'm not sure how I would subclass VelocityView, as my application is 
already subclassing VelocityViewServlet. I currently override init() 
which eventually calls super.init(), and I also override handleRequest().

Do I have any choices in this case? Thanks again.
  - Scott

On 6/22/2010 2:17 PM, Nathan Bubna wrote:
> Unfortunately, in the quest to simplify other things and improve
> performance, this particular sort of customization is now a little
> more complicated.   There are two ways to do it:
>
> Subclass VelocityView with the following:
>
> protected void configure(final JeeConfig config, final VelocityEngine
> velocity) {
>    super.configure(config, velocity);
>    //do your stuff here
> }
>
> and tell your VelocityView[Servlet/Filter/Tag]s to use it via:
>
> <context-param>
>    <param-name>org.apache.velocity.tools.view.class</param-name>
>    <param-value>com.foo.MyVelocityView</param-value>
> </context-param>
>
> or alternately, you can try subclassing your
> VelocityView[Servlet/Filter/Tag](s) directly and creating your own
> VelocityEngine during init and then calling
> getVelocityView().setVelocityEngine(myEngine), but then, of course,
> you will not be taking advantage of all the VelocityEngine
> configuration done by VelocityView and friends.  So i recommend the
> former option.
>
> On Tue, Jun 22, 2010 at 9:22 AM, B. Scott Smith<sc...@smithdomain.com>  wrote:
>    
>> Hi, I am trying to migrate to Velocity Tools 2.0. My application currently
>> needs to set a Velocity Property to a value that is determined at run-time.
>> For example, I would like to set a property to one of two possible values,
>> based on the current setting of my application's debug value. Before, I did
>> this by simply overwriting the loadConfiguration() method:
>>
>>    protected Properties loadConfiguration( ServletConfig config )
>>         throws IOException, FileNotFoundException
>>    {
>>         Properties velocityProps = new Properties(  );
>>         if ( localDir != null ) {
>>             velocityProps.setProperty(
>>    Velocity.FILE_RESOURCE_LOADER_PATH, localDir );
>>         }
>>         velocityProps.setProperty( Velocity.RUNTIME_LOG, localDir +
>>    "velocity.log" );
>>         velocityProps.setProperty(
>>    Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, debugFlag ?
>>
>> "org.apache.velocity.runtime.log.SimpleLog4JLogSystem" :
>>
>> "org.apache.velocity.runtime.log.NullLogSystem" );
>>         return velocityProps;
>>    }
>>
>>
>> How can I accomplish the same thing in Tools 2.0?
>> Thanks in advance for your help.
>>   - Scott Smith
>>
>>
>>      
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
> For additional commands, e-mail: user-help@velocity.apache.org
>
>    

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org


Re: loadConfiguration() equivalent in Velocity Tools 2.0

Posted by Nathan Bubna <nb...@gmail.com>.
Unfortunately, in the quest to simplify other things and improve
performance, this particular sort of customization is now a little
more complicated.   There are two ways to do it:

Subclass VelocityView with the following:

protected void configure(final JeeConfig config, final VelocityEngine
velocity) {
  super.configure(config, velocity);
  //do your stuff here
}

and tell your VelocityView[Servlet/Filter/Tag]s to use it via:

<context-param>
  <param-name>org.apache.velocity.tools.view.class</param-name>
  <param-value>com.foo.MyVelocityView</param-value>
</context-param>

or alternately, you can try subclassing your
VelocityView[Servlet/Filter/Tag](s) directly and creating your own
VelocityEngine during init and then calling
getVelocityView().setVelocityEngine(myEngine), but then, of course,
you will not be taking advantage of all the VelocityEngine
configuration done by VelocityView and friends.  So i recommend the
former option.

On Tue, Jun 22, 2010 at 9:22 AM, B. Scott Smith <sc...@smithdomain.com> wrote:
> Hi, I am trying to migrate to Velocity Tools 2.0. My application currently
> needs to set a Velocity Property to a value that is determined at run-time.
> For example, I would like to set a property to one of two possible values,
> based on the current setting of my application's debug value. Before, I did
> this by simply overwriting the loadConfiguration() method:
>
>   protected Properties loadConfiguration( ServletConfig config )
>        throws IOException, FileNotFoundException
>   {
>        Properties velocityProps = new Properties(  );
>        if ( localDir != null ) {
>            velocityProps.setProperty(
>   Velocity.FILE_RESOURCE_LOADER_PATH, localDir );
>        }
>        velocityProps.setProperty( Velocity.RUNTIME_LOG, localDir +
>   "velocity.log" );
>        velocityProps.setProperty(
>   Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS, debugFlag ?
>
> "org.apache.velocity.runtime.log.SimpleLog4JLogSystem" :
>
> "org.apache.velocity.runtime.log.NullLogSystem" );
>        return velocityProps;
>   }
>
>
> How can I accomplish the same thing in Tools 2.0?
> Thanks in advance for your help.
>  - Scott Smith
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org