You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by pr...@apache.org on 2002/07/26 21:17:53 UTC
cvs commit: jakarta-avalon-excalibur/configuration/src/java/org/apache/excalibur/configuration/merged Constants.java ConfigurationMerger.java NamedConfigurationMatcher.java KeyAttributeConfigurationMatcher.java ConfigurationMatcher.java
proyal 2002/07/26 12:17:53
Modified: configuration/src/java/org/apache/excalibur/configuration/merged
ConfigurationMerger.java
Added: configuration/src/java/org/apache/excalibur/configuration/merged
Constants.java
Removed: configuration/src/java/org/apache/excalibur/configuration/merged
NamedConfigurationMatcher.java
KeyAttributeConfigurationMatcher.java
ConfigurationMatcher.java
Log:
* Move constants to separate interface
* Remove matchers and use ConfigurationUtil.match instead
* Added ref to ConfigurationSplitter
Revision Changes Path
1.3 +26 -51 jakarta-avalon-excalibur/configuration/src/java/org/apache/excalibur/configuration/merged/ConfigurationMerger.java
Index: ConfigurationMerger.java
===================================================================
RCS file: /home/cvs/jakarta-avalon-excalibur/configuration/src/java/org/apache/excalibur/configuration/merged/ConfigurationMerger.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ConfigurationMerger.java 23 Jul 2002 20:49:12 -0000 1.2
+++ ConfigurationMerger.java 26 Jul 2002 19:17:53 -0000 1.3
@@ -13,6 +13,7 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.configuration.DefaultConfiguration;
+import org.apache.excalibur.configuration.ConfigurationUtil;
/**
* The ConfigurationMerger will take a Configuration object and layer it over another.
@@ -32,15 +33,11 @@
* </li>
* </ol>
*
+ * @see ConfigurationSplitter
* @author <a href="mailto:proyal@apache.org">Peter Royal</a>
*/
public class ConfigurationMerger
{
- private static final String MERGE_METADATA_PREFIX = "excalibur-configuration:";
-
- private static final String MERGE_ATTR = MERGE_METADATA_PREFIX + "merge";
- private static final String KEY_ATTR = MERGE_METADATA_PREFIX + "key-attribute";
-
/**
* Merge two configurations.
*
@@ -49,7 +46,7 @@
*
* @return Result of merge
*
- * @exception ConfigurationException if
+ * @exception ConfigurationException if unable to merge
*/
public static Configuration merge( final Configuration layer, final Configuration base )
throws ConfigurationException
@@ -81,8 +78,7 @@
for( int i = 0; i < lc.length; i++ )
{
- final String name = lc[i].getName();
- final Configuration mergeWith = getMergePartner( lc[i], lc, bc );
+ final Configuration mergeWith = getMergePartner( lc[i], layer, base );
if( null == mergeWith )
{
@@ -106,60 +102,39 @@
}
private static Configuration getMergePartner( final Configuration toMerge,
- final Configuration[] layerKids,
- final Configuration[] baseKids )
+ final Configuration layer,
+ final Configuration base )
throws ConfigurationException
{
- if( toMerge.getAttributeAsBoolean( MERGE_ATTR, false ) )
+ if( toMerge.getAttributeAsBoolean( Constants.MERGE_ATTR, false ) )
{
- final String keyAttribute = toMerge.getAttribute( KEY_ATTR, null );
- ConfigurationMatcher matcher;
+ final String keyAttribute = toMerge.getAttribute( Constants.KEY_ATTR, null );
+ final String keyvalue =
+ keyAttribute == null ? null : toMerge.getAttribute( keyAttribute );
- if( null == keyAttribute )
- {
- matcher = new NamedConfigurationMatcher( toMerge.getName() );
- }
- else
- {
- matcher
- = new KeyAttributeConfigurationMatcher( toMerge.getName(),
- keyAttribute,
- toMerge.getAttribute( keyAttribute ) );
- }
+ final Configuration[] layerKids = ConfigurationUtil.match( layer,
+ toMerge.getName(),
+ keyAttribute,
+ keyvalue );
- final int layerMatch = getMatchingConfiguration( matcher, layerKids );
- final int baseMatch = getMatchingConfiguration( matcher, baseKids );
+ final Configuration[] baseKids = ConfigurationUtil.match( base,
+ toMerge.getName(),
+ keyAttribute,
+ keyvalue );
- if( layerMatch >= 0 && baseMatch >= 0 )
+ if( layerKids.length == 1 && baseKids.length == 1 )
{
- return baseKids[baseMatch];
+ return baseKids[0];
}
- }
-
- return null;
- }
-
- private static int getMatchingConfiguration( ConfigurationMatcher matcher,
- Configuration list[] )
- {
- int match = -1;
-
- for( int i = 0; i < list.length; i++ )
- {
- if( matcher.isMatch( list[i] ) )
+ else
{
- if( match >= 0 )
- {
- return -1;
- }
- else
- {
- match = i;
- }
+ throw new ConfigurationException( "Unable to merge configuration item, "
+ + "multiple matches on child or base [name: "
+ + toMerge.getName() + "]" );
}
}
- return match;
+ return null;
}
private static String getValue( final Configuration layer, final Configuration base )
@@ -182,7 +157,7 @@
for( int i = 0; i < names.length; i++ )
{
- if( !names[i].startsWith( MERGE_METADATA_PREFIX ) )
+ if( !names[i].startsWith( Constants.MERGE_METADATA_PREFIX ) )
{
dest.setAttribute( names[i], source.getAttribute( names[i] ) );
}
1.1 jakarta-avalon-excalibur/configuration/src/java/org/apache/excalibur/configuration/merged/Constants.java
Index: Constants.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.excalibur.configuration.merged;
/**
* Constants used by this package
*
* @author <a href="mailto:proyal@apache.org">Peter Royal</a>
*/
interface Constants
{
String MERGE_METADATA_PREFIX = "excalibur-configuration:";
String MERGE_ATTR = MERGE_METADATA_PREFIX + "merge";
String KEY_ATTR = MERGE_METADATA_PREFIX + "key-attribute";
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>