You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by do...@apache.org on 2003/03/01 09:16:17 UTC

cvs commit: avalon-phoenix/src/java/org/apache/avalon/phoenix/components/util PropertyUtil.java

donaldp     2003/03/01 00:16:17

  Modified:    src/java/org/apache/avalon/phoenix/components/classloader
                        SarPolicyResolver.java
               src/java/org/apache/avalon/phoenix/components/configuration
                        FileSystemPersistentConfigurationRepository.java
  Added:       src/java/org/apache/avalon/phoenix/components/util
                        PropertyUtil.java
  Removed:     src/java/org/apache/avalon/phoenix/components/classloader
                        PropertyUtil.java
  Log:
  Decouple from util jar
  
  Revision  Changes    Path
  1.6       +2 -1      avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/SarPolicyResolver.java
  
  Index: SarPolicyResolver.java
  ===================================================================
  RCS file: /home/cvs/avalon-phoenix/src/java/org/apache/avalon/phoenix/components/classloader/SarPolicyResolver.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SarPolicyResolver.java	22 Feb 2003 04:03:26 -0000	1.5
  +++ SarPolicyResolver.java	1 Mar 2003 08:16:16 -0000	1.6
  @@ -20,6 +20,7 @@
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.phoenix.BlockContext;
   import org.apache.avalon.phoenix.components.util.ResourceUtil;
  +import org.apache.avalon.phoenix.components.util.PropertyUtil;
   import org.apache.excalibur.policy.builder.PolicyResolver;
   
   /**
  
  
  
  1.15      +2 -4      avalon-phoenix/src/java/org/apache/avalon/phoenix/components/configuration/FileSystemPersistentConfigurationRepository.java
  
  Index: FileSystemPersistentConfigurationRepository.java
  ===================================================================
  RCS file: /home/cvs/avalon-phoenix/src/java/org/apache/avalon/phoenix/components/configuration/FileSystemPersistentConfigurationRepository.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- FileSystemPersistentConfigurationRepository.java	22 Feb 2003 05:34:44 -0000	1.14
  +++ FileSystemPersistentConfigurationRepository.java	1 Mar 2003 08:16:16 -0000	1.15
  @@ -12,8 +12,6 @@
   import org.apache.avalon.excalibur.i18n.ResourceManager;
   import org.apache.avalon.excalibur.i18n.Resources;
   import org.apache.avalon.excalibur.io.FileUtil;
  -import org.apache.avalon.excalibur.property.PropertyException;
  -import org.apache.avalon.excalibur.property.PropertyUtil;
   import org.apache.avalon.framework.CascadingRuntimeException;
   import org.apache.avalon.framework.activity.Initializable;
   import org.apache.avalon.framework.configuration.Configurable;
  @@ -26,6 +24,7 @@
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.framework.context.Contextualizable;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  +import org.apache.avalon.phoenix.components.util.PropertyUtil;
   import org.apache.avalon.phoenix.interfaces.ConfigurationRepository;
   import org.apache.avalon.phoenix.interfaces.ConfigurationRepositoryMBean;
   import org.apache.excalibur.configuration.merged.ConfigurationMerger;
  @@ -102,7 +101,6 @@
           try
           {
               final Object opath = PropertyUtil.resolveProperty( path, m_context, false );
  -
               if( opath instanceof String )
               {
                   return FileUtil.normalize( (String)opath );
  @@ -115,7 +113,7 @@
                   throw new ConfigurationException( message );
               }
           }
  -        catch( PropertyException e )
  +        catch( Exception e )
           {
               final String message = REZ.getString( "config.error.missingproperty",
                                                     configuration.getLocation() );
  
  
  
  1.1                  avalon-phoenix/src/java/org/apache/avalon/phoenix/components/util/PropertyUtil.java
  
  Index: PropertyUtil.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included with this distribution in
   * the LICENSE.txt file.
   */
  package org.apache.avalon.phoenix.components.util;
  
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.ContextException;
  import org.apache.avalon.framework.context.Resolvable;
  
  /**
   * This provides utility methods for properties.
   *
   * @author <a href="mailto:peter at apache.org">Peter Donald</a>
   * @version CVS $Revision: 1.1 $ $Date: 2003/03/01 08:16:17 $
   * @since 4.0
   */
  public final class PropertyUtil
  {
      private PropertyUtil()
      {
      }
  
      /**
       * Resolve a string property. This evaluates all property
       * substitutions based on specified context.
       *
       * @param property the property to resolve
       * @param context the context in which to resolve property
       * @param ignoreUndefined if false will throw an PropertyException if property is not found
       * @return the reolved property
       * @exception java.lang.Exception if an error occurs
       */
      public static Object resolveProperty( final String property,
                                            final Context context,
                                            final boolean ignoreUndefined )
          throws Exception
      {
          int start = findBeginning( property, 0 );
          if( -1 == start )
          {
              return property;
          }
  
          int end = findEnding( property, start );
  
          final int length = property.length();
  
          if( 0 == start && end == ( length - 1 ) )
          {
              return resolveValue( property.substring( start + 2, end ),
                                   context,
                                   ignoreUndefined );
          }
  
          final StringBuffer sb = new StringBuffer( length * 2 );
          int lastPlace = 0;
  
          while( true )
          {
              final Object value =
                  resolveValue( property.substring( start + 2, end ),
                                context,
                                ignoreUndefined );
  
              sb.append( property.substring( lastPlace, start ) );
              sb.append( value );
  
              lastPlace = end + 1;
  
              start = findBeginning( property, lastPlace );
              if( -1 == start )
              {
                  break;
              }
  
              end = findEnding( property, start );
          }
  
          sb.append( property.substring( lastPlace, length ) );
  
          return sb.toString();
      }
  
      private static int findBeginning( final String property, final int currentPosition )
      {
          //TODO: Check if it is commented out
          return property.indexOf( "${", currentPosition );
      }
  
      private static int findEnding( final String property, final int currentPosition )
          throws Exception
      {
          //TODO: Check if it is commented out
          final int index = property.indexOf( '}', currentPosition );
          if( -1 == index )
          {
              throw new Exception( "Malformed property with mismatched }'s" );
          }
  
          return index;
      }
  
      /**
       * Retrieve a value from the specified context using the specified key.
       * If there is no such value and ignoreUndefined is not false then a
       * Exception is generated.
       *
       * @param key the key of value in context
       * @param context the Context
       * @param ignoreUndefined true if undefined variables are ignored
       * @return the object retrieved from context
       * @exception java.lang.Exception if an error occurs
       */
      private static Object resolveValue( final String key,
                                          final Context context,
                                          final boolean ignoreUndefined )
          throws Exception
      {
          Object value = null;
  
          try
          {
              value = context.get( key );
          }
          catch( final ContextException ce )
          {
              //ignore
          }
  
          try
          {
              while( null != value && value instanceof Resolvable )
              {
                  value = ( (Resolvable)value ).resolve( context );
              }
          }
          catch( final ContextException ce )
          {
              throw new Exception( "Unable to resolve value for key " + key );
          }
  
          if( null == value )
          {
              if( ignoreUndefined )
              {
                  return "";
              }
              else
              {
                  throw new Exception( "Unable to find " + key + " to expand during "
                                       + "property resolution." );
              }
          }
  
          return value;
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org