mcconnell 2002/12/19 02:40:06 Modified: assembly/src/java/org/apache/avalon/assembly/lifecycle ContextHandler.java Log: Added support for merging of service defined context entries with component defined context entries. Revision Changes Path 1.7 +30 -2 avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/ContextHandler.java Index: ContextHandler.java =================================================================== RCS file: /home/cvs/avalon-sandbox/assembly/src/java/org/apache/avalon/assembly/lifecycle/ContextHandler.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- ContextHandler.java 17 Dec 2002 09:55:24 -0000 1.6 +++ ContextHandler.java 19 Dec 2002 10:40:06 -0000 1.7 @@ -66,6 +66,7 @@ import org.apache.avalon.framework.service.Serviceable; import org.apache.avalon.assembly.appliance.Appliance; import org.apache.avalon.assembly.engine.EngineClassLoader; +import org.apache.avalon.assembly.service.UnknownServiceException; import org.apache.avalon.meta.model.Entry; import org.apache.avalon.meta.model.Import; import org.apache.avalon.meta.model.Profile; @@ -73,6 +74,8 @@ import org.apache.avalon.meta.info.ContextDescriptor; import org.apache.avalon.meta.info.EntryDescriptor; import org.apache.avalon.meta.info.ExtensionDescriptor; +import org.apache.avalon.meta.info.ReferenceDescriptor; +import org.apache.avalon.meta.info.Service; /** * The context service provides support for the contextualization of a @@ -287,10 +290,18 @@ } else { + + // + // TODO: check that the context is not requesting custom + // context interface support + // + result = new DefaultContext( map ); } - EntryDescriptor[] entries = descriptor.getEntrys(); + EntryDescriptor[] entries = getMergedEntries( descriptor ); + getLogger().debug( "context " + descriptor + " contains " + entries.length + "entries" ); + for( int i = 0; i < entries.length; i++ ) { EntryDescriptor entry = entries[ i ]; @@ -431,6 +442,23 @@ } return result; + } + + private EntryDescriptor[] getMergedEntries( ContextDescriptor descriptor ) throws IllegalArgumentException + { + EngineClassLoader engine = getClassLoader(); + try + { + Service service = + engine.getRepository().getServiceManager().getService( descriptor.getReference() ); + EntryDescriptor[] entries = service.getEntries(); + EntryDescriptor[] result = descriptor.merge( service.getEntries() ); + return result; + } + catch( UnknownServiceException e ) + { + return descriptor.getEntries(); + } } /**
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>