Josh -

I just recently fixed this for Jetspeed properties (properties aimed at
Turbine may not be done in this way), so that you can override the jr.p
values in your own resources.properties.  Make sure your values come
*first*.  The first setting will be used.

Are you using the latest code from cvs?

If you are running with this fix already in, let me know and I'll look into
it further.

Thanks!

Here's the cvs message from that checkin:

* * * * * * * * * * * * * * *

ggolden     2002/09/09 19:01:27

  Modified:    src/java/org/apache/jetspeed/services/resources
                        JetspeedResources.java
  Log:
  When overriding settings in the JetspeedResources.properties (and
TurbineResources.properties), we might want to set a value with our
  site's setting, a value that is also set in the standard jr.p and tr.p
distribution files.  It's nice to be able to use these files unchanged so we
can keep up easily
  with Jetspeed development.
  
  If the value we are setting is a string, this already works - the first
value set to
  the property is used, so we can just do our settings before the standard
files
  are read in.
  
  If the value we are setting is a boolean, long, float, double, or int,
this doesn't work - we get class cast exceptions.
  
  JetspeedSecurity, which is used by Jetspeed code to access the
configuration values, now catches these class cast exceptions, and also
takes the calls to getString.  If there's an array of values, it will use
the first one (it's the combination of the array of values that mess up the
reading without this).
  
  Note: this only works for Jetspeed properties - turbine properties don't
use this
  code.  Only string properties can be overridden by setting your site
values first
  for turbine properties.
  
  Note: This code would be best deep inside turbine, but can live here till
Turbine
  handles these cases.
  
  Revision  Changes    Path
  1.13      +322 -2
jakarta-jetspeed/src/java/org/apache/jetspeed/services/resources/JetspeedRes
ources.java
  
  Index: JetspeedResources.java
  ===================================================================
  RCS file:
/home/cvs/jakarta-jetspeed/src/java/org/apache/jetspeed/services/resources/J
etspeedResources.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- JetspeedResources.java    26 Jul 2002 01:47:21 -0000      1.12
  +++ JetspeedResources.java    10 Sep 2002 02:01:27 -0000      1.13
  @@ -55,16 +55,22 @@
   package org.apache.jetspeed.services.resources;
   
   import org.apache.turbine.services.resources.TurbineResources;
  +import org.apache.turbine.util.Log;
   
   /**
    * This class defines the Jetspeed properties keys.
    * All properties can be retrieved using TurbineResources or
JetspeedResources
  - * directly
  + * directly.
  + *
  + * This class also overrides the covers for many of the get routines.  It
handles the cases
  + * where we want a single value, perhaps as a boolean or float, but the
configuration may have
  + * an array of values.  In these cases, we let the first value override
all the others and use it.
    *
    * @author <a href="mailto:[EMAIL PROTECTED]";>Kevin A. Burton</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Rapha�l Luta</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Tom Adams</a>
    * @author <a href="mailto:[EMAIL PROTECTED]";>Chris Kimpton</a>
  + * @author <a href="mailto:[EMAIL PROTECTED]";>Glenn R. Golden</a>
    * @version $Id$
    */
   public class JetspeedResources extends TurbineResources {
  @@ -156,7 +162,321 @@
        */
       public static final String PATH_PANEL_KEY = "select-panel";        
   
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a boolean value.
  +     *
  +     * @param name The resource name.
  +     * @return The value of the named resource as a boolean.
  +     */
  +    public static boolean getBoolean(String name)
  +    {
  +        try
  +        {
  +            return TurbineResources.getBoolean (name);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return new Boolean(values[0]).booleanValue();
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purppose of this method is to get the configuration
  +     * resource with the given name as a boolean value, or a default
  +     * value.
  +     *
  +     * @param name The resource name.
  +     * @param def The default value of the resource.
  +     * @return The value of the named resource as a boolean.
  +     */
  +    public static boolean getBoolean(String name,
  +                                     boolean def)
  +    {
  +        try
  +        {
  +            return TurbineResources.getBoolean(name, def);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return new Boolean(values[0]).booleanValue();
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a double.
  +     *
  +     * @param name The resoource name.
  +     * @return The value of the named resource as double.
  +     */
  +    public static double getDouble(String name)
  +    {
  +        try
  +        {
  +            return TurbineResources.getDouble(name);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Double.parseDouble(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a double, or a default value.
  +     *
  +     * @param name The resource name.
  +     * @param def The default value of the resource.
  +     * @return The value of the named resource as a double.
  +     */
  +    public static double getDouble(String name,
  +                                   double def)
  +    {
  +        try
  +        {
  +            return TurbineResources.getDouble(name, def);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Double.parseDouble(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a float.
  +     *
  +     * @param name The resource name.
  +     * @return The value of the resource as a float.
  +     */
  +    public static float getFloat(String name)
  +    {
  +        try
  +        {
  +            return TurbineResources.getFloat(name);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Float.parseFloat(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a float, or a default value.
  +     *
  +     * @param name The resource name.
  +     * @param def The default value of the resource.
  +     * @return The value of the resource as a float.
  +     */
  +    public static float getFloat(String name,
  +                                 float def)
  +    {
  +        try
  +        {
  +            return TurbineResources.getFloat(name, def);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Float.parseFloat(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as an integer.
  +     *
  +     * @param name The resource name.
  +     * @return The value of the resource as an integer.
  +     */
  +    public static int getInt(String name)
  +    {
  +        try
  +        {
  +            return TurbineResources.getInt(name);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Integer.parseInt(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as an integer, or a default value.
  +     *
  +     * @param name The resource name.
  +     * @param def The default value of the resource.
  +     * @return The value of the resource as an integer.
  +     */
  +    public static int getInt(String name,
  +                             int def)
  +    {
  +        try
  +        {
  +            return TurbineResources.getInt(name, def);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Integer.parseInt(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a long.
  +     *
  +     * @param name The resource name.
  +     * @return The value of the resource as a long.
  +     */
  +    public static long getLong(String name)
  +    {
  +        try
  +        {
  +            return TurbineResources.getLong(name);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Long.parseLong(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
  +
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a long, or a default value.
  +     *
  +     * @param name The resource name.
  +     * @param def The default value of the resource.
  +     * @return The value of the resource as a long.
  +     */
  +    public static long getLong(String name,
  +                               long def)
  +    {
  +        try
  +        {
  +            return TurbineResources.getLong(name, def);
  +        }
  +        catch (ClassCastException e)
  +        {
  +            // get the possible list
  +            String[] values = getStringArray(name);
  +            
  +            // try again with the first
  +            if ((values != null) && (values.length > 0))
  +                return Long.parseLong(values[0]);
  +
  +            // otherwise, just throw the exception
  +            throw e;
  +        }
  +    }
   
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a string.
  +     *
  +     * @param name The resource name.
  +     * @return The value of the resource as a string.
  +     */
  +    public static String getString(String name)
  +    {
  +        // get the possible list
  +        String[] values = getStringArray(name);
  +        if ((values != null) && (values.length > 0))
  +            return values[0];
   
  +        return TurbineResources.getString(name);
  +    }
   
  +    /**
  +     * The purpose of this method is to get the configuration resource
  +     * with the given name as a string, or a default value.
  +     *
  +     * @param name The resource name.
  +     * @param def The default value of the resource.
  +     * @return The value of the resource as a string.
  +     */
  +    public static String getString(String name,
  +                                   String def)
  +    {
  +        // get the possible list
  +        String[] values = getStringArray(name);
  +        if ((values != null) && (values.length > 0))
  +            return values[0];
  +
  +        return TurbineResources.getString(name, def);
  +    }
   }
  +
  
  
  

--
To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>


> -----Original Message-----
> From: Josh Hone [mailto:[EMAIL PROTECTED]] 
> Sent: Tuesday, September 17, 2002 9:58 PM
> To: [EMAIL PROTECTED]
> Subject: JR.prop duplicate booleans break...
> 
> 
> Hi all -
> 
> I have noticed that if I have duplicate boolean values for 
> some properties 
> that the machine gives you a horrible exception and does not 
> like it at all. 
>   It says that the value assigned to the property is not 
> boolean.  Here is 
> what I did:
> 
> I copied some properties from JR.p to my own properties 
> files.  Then I 
> edited some (for the email config) and restarted everything.  
> Upon opening 
> the portal, I encountered the horrible exception for a 
> property that was 
> duplicated in both properties files.  It was the same both places.  I 
> commented it out and restarted everything.  This time I was 
> able to log in 
> but again received a Horrible Exception, pointing to a 
> property that I did 
> alter.  Both times the error message was the same.
> 
> The issue was resolved as I removed the duplicate areas.  I 
> deleted the ones 
> I changed in my personal file from JR.p.  I also deleted the 
> ones I did not 
> change from my personal file.  Then the system works fine (I 
> just have to 
> get out of the firewall...).
> 
> Is this a bug?
> 
> I am interested in this mainly because for an upgrade of a 
> jetspeed system, 
> it is much easier to maintain your own properties files.  It 
> gets much 
> harder when you have to manually go into the default files to 
> look for 
> things to edit.  Not harder for me personally, but for 
> whoever after me 
> looks after this portal.
> 
> Josh Hone
> 
> _________________________________________________________________
> Chat with friends online, try MSN Messenger: http://messenger.msn.com
> 
> 
> --
> To unsubscribe, e-mail:   
> <mailto:jetspeed-user-> [EMAIL PROTECTED]>
> For 
> additional commands, 
> e-mail: <mailto:[EMAIL PROTECTED]>
> 

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to