Skip to Content.
Sympa Menu

notify-dpml - svn commit: r2160 - in development/main/metro: activation/providers/metro/src/main/net/dpml/activation/metro composition/api/src/main/net/dpml/composition/data composition/api/src/test/net/dpml/composition/data/test composition/builder/src/main/net/dpml/composition/builder composition/builder/src/main/net/dpml/composition/builder/datatypes composition/impl/src/main/net/dpml/composition/data/builder composition/testing/acme composition/testing/acme/src/main/net/dpml/composition/testing meta/api/src/main/net/dpml/meta/info meta/api/src/test/net/dpml/meta/info/test

notify-dpml AT lists.ibiblio.org

Subject: DPML Notify

List archive

Chronological Thread  
  • From: mcconnell AT dpml.net
  • To: notify-dpml AT lists.ibiblio.org
  • Subject: svn commit: r2160 - in development/main/metro: activation/providers/metro/src/main/net/dpml/activation/metro composition/api/src/main/net/dpml/composition/data composition/api/src/test/net/dpml/composition/data/test composition/builder/src/main/net/dpml/composition/builder composition/builder/src/main/net/dpml/composition/builder/datatypes composition/impl/src/main/net/dpml/composition/data/builder composition/testing/acme composition/testing/acme/src/main/net/dpml/composition/testing meta/api/src/main/net/dpml/meta/info meta/api/src/test/net/dpml/meta/info/test
  • Date: Sun, 27 Mar 2005 16:35:22 -0500

Author: mcconnell AT dpml.net
Date: Sun Mar 27 16:35:22 2005
New Revision: 2160

Added:

development/main/metro/activation/providers/metro/src/main/net/dpml/activation/metro/PartsInvocationHandler.java
Modified:

development/main/metro/activation/providers/metro/src/main/net/dpml/activation/metro/DefaultComponentFactory.java

development/main/metro/composition/api/src/main/net/dpml/composition/data/ComponentProfile.java

development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ComponentProfileTestCase.java

development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ContainmentProfileTestCase.java

development/main/metro/composition/builder/src/main/net/dpml/composition/builder/ComponentBuilderTask.java

development/main/metro/composition/builder/src/main/net/dpml/composition/builder/datatypes/PartsDataType.java

development/main/metro/composition/impl/src/main/net/dpml/composition/data/builder/XMLComponentProfileCreator.java
development/main/metro/composition/testing/acme/build.xml

development/main/metro/composition/testing/acme/src/main/net/dpml/composition/testing/DefaultGizmo.java
development/main/metro/meta/api/src/main/net/dpml/meta/info/Type.java

development/main/metro/meta/api/src/test/net/dpml/meta/info/test/TypeTestCase.java
Log:
Update the default component factory and related classes to provide support
for the part invocation handler.

Modified:
development/main/metro/activation/providers/metro/src/main/net/dpml/activation/metro/DefaultComponentFactory.java
==============================================================================
---
development/main/metro/activation/providers/metro/src/main/net/dpml/activation/metro/DefaultComponentFactory.java
(original)
+++
development/main/metro/activation/providers/metro/src/main/net/dpml/activation/metro/DefaultComponentFactory.java
Sun Mar 27 16:35:22 2005
@@ -381,6 +381,15 @@
InvocationHandler handler = new ContextInvocationHandler( type,
map );

Class inner = getInnerClass( "$Context" );
+ if( null == inner )
+ {
+ final String error =
+ "Unable to locate the Context inner class in component type
["
+ + m_model.getDeploymentClass().getName()
+ + "].";
+ throw new IllegalStateException( error );
+ }
+
ClassLoader classloader =
m_model.getDeploymentClass().getClassLoader();
return Proxy.newProxyInstance( classloader, new Class[]{ inner
}, handler );
}
@@ -395,19 +404,7 @@
{
Class subject = m_model.getDeploymentClass();
Class[] classes = subject.getClasses();
- Class inner = locateClass( postfix, classes );
- if( null == inner )
- {
- final String error =
- "Unable to locate the " + postfix + " inner class in component
type ["
- + subject.getName()
- + "].";
- throw new IllegalStateException( error );
- }
- else
- {
- return inner;
- }
+ return locateClass( postfix, classes );
}

private Class locateClass( String postfix, Class[] classes )
@@ -493,6 +490,8 @@
{
Constructor constructor = getConstructor( clazz );

+ Class parts = getInnerClass( "$Parts" );
+
Class[] classes = constructor.getParameterTypes();
Object[] args = new Object[ classes.length ];
for( int i=0; i<classes.length; i++ )
@@ -543,6 +542,10 @@
}
args[i] = manager;
}
+ else if( ( null != parts ) && parts.isAssignableFrom( c ) )
+ {
+ args[i] = newPartsInvocationHandler( parts );
+ }
else
{
final String error =
@@ -561,6 +564,23 @@
return instantiateComponent( constructor, args );
}

+ private Object newPartsInvocationHandler( Class parts ) throws
LifecycleException
+ {
+ try
+ {
+ Type type = m_model.getType();
+ InvocationHandler handler = new PartsInvocationHandler( type );
+ ClassLoader classloader =
m_model.getDeploymentClass().getClassLoader();
+ return Proxy.newProxyInstance( classloader, new Class[]{ parts
}, handler );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Unexpected error while attempting to construct the parts
invocation handler.";
+ throw new LifecycleException( error, e );
+ }
+ }
+
private Constructor getConstructor( Class clazz ) throws
LifecycleException
{
Constructor[] constructors = clazz.getConstructors();

Added:
development/main/metro/activation/providers/metro/src/main/net/dpml/activation/metro/PartsInvocationHandler.java
==============================================================================
--- (empty file)
+++
development/main/metro/activation/providers/metro/src/main/net/dpml/activation/metro/PartsInvocationHandler.java
Sun Mar 27 16:35:22 2005
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2004 Stephen J. McConnell.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.
+ *
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.dpml.activation.metro;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.Method;
+import java.util.Hashtable;
+import java.util.Map;
+
+import net.dpml.meta.info.Type;
+import net.dpml.meta.info.PartDescriptor;
+
+/**
+ * This makes a dynamic proxy for a Parts object.
+ *
+ * @author <a href="mailto:dev-dpml AT lists.ibiblio.org";>The Digital Product
Meta Library</a>
+ * @version $Id: ApplianceInvocationHandler.java 2106 2005-03-21 18:46:10Z
mcconnell AT dpml.net $
+ */
+public final class PartsInvocationHandler
+ implements InvocationHandler
+{
+ //-------------------------------------------------------------------
+ // state
+ //-------------------------------------------------------------------
+
+ /**
+ * A map of the part descriptors published by the component type
+ * and keyed by entry key.
+ */
+ private final Map m_entries = new Hashtable();
+
+ /**
+ * The component type.
+ */
+ private final Type m_type;
+
+ //-------------------------------------------------------------------
+ // constructor
+ //-------------------------------------------------------------------
+
+ /**
+ * Create a dependency invocation handler.
+ *
+ * @param type the component type
+ * @param map a map of context values keyed by entry key
+ */
+ public PartsInvocationHandler( Type type )
+ throws NullPointerException
+ {
+ assertNotNull( type, "type" );
+
+ m_type = type;
+
+ PartDescriptor[] entries = m_type.getPartDescriptors();
+ for( int i=0; i<entries.length; i++ )
+ {
+ PartDescriptor p = entries[i];
+ String key = p.getKey();
+ m_entries.put( key, p );
+ }
+ }
+
+ //-------------------------------------------------------------------
+ // implementation
+ //-------------------------------------------------------------------
+
+ /**
+ * Invoke the specified method on underlying object.
+ * This is called by the proxy object.
+ *
+ * @param proxy the proxy object
+ * @param method the method invoked on proxy object
+ * @param args the arguments supplied to method
+ * @return the return value of method
+ * @throws Throwable if an error occurs
+ * @exception NullPointerException if any one of the proxy or method
arguments
+ * is null, or if the object instance has been destroyed
earlier.
+ */
+ public Object invoke( final Object proxy, final Method method, final
Object[] args )
+ throws Throwable, NullPointerException
+ {
+ if( proxy == null )
+ throw new NullPointerException( "proxy" );
+ if( method == null )
+ throw new NullPointerException( "method" );
+
+ Class source = method.getDeclaringClass();
+ if( Object.class == method.getDeclaringClass() )
+ {
+ return method.invoke( this, args );
+ }
+
+ String name = method.getName();
+ String key = getKeyFromMethod( method );
+ PartDescriptor entry = (PartDescriptor) m_entries.get( key );
+
+ if( null == entry )
+ {
+ final String error =
+ "Illegal request for an undeclared part ["
+ + key
+ + "] withing the component type ["
+ + m_type.getInfo().getClassname()
+ + "].";
+ throw new IllegalArgumentException( error );
+ }
+
+ //
+ // we have a valid key
+ //
+
+ final String error =
+ "The request for the internal part ["
+ + entry.getType()
+ + "] from the key ["
+ + key
+ + "] could not be completed as this function is not implemented.";
+ throw new UnsupportedOperationException( error );
+
+ }
+
+ private String getKeyFromMethod( Method method )
+ {
+ String name = method.getName();
+ if( name.startsWith( "get" ) )
+ {
+ return formatKey( name.substring( 3 ) );
+ }
+ else if( name.startsWith( "create" ) )
+ {
+ return formatKey( name.substring( 6 ) );
+ }
+ else if( name.startsWith( "release" ) )
+ {
+ return formatKey( name.substring( 7 ) );
+ }
+ else
+ {
+ final String error =
+ "Invalid method accessor ["
+ + name
+ + "]";
+ throw new IllegalArgumentException( error );
+ }
+ }
+
+ private String formatKey( String key )
+ {
+ if( key.length() < 1 )
+ {
+ throw new IllegalArgumentException( "key" );
+ }
+ String first = key.substring( 0, 1 ).toLowerCase();
+ String remainder = key.substring( 1 );
+ return first + remainder;
+ }
+
+ //-------------------------------------------------------------------
+ // implementation
+ //-------------------------------------------------------------------
+
+ private void assertNotNull( Object object, String key )
+ throws NullPointerException
+ {
+ if( null == object )
+ {
+ throw new NullPointerException( key );
+ }
+ }
+
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append( "[parts {" );
+ PartDescriptor[] entries = m_type.getPartDescriptors();
+ for( int i=0; i<entries.length; i++ )
+ {
+ PartDescriptor p = entries[i];
+ buffer.append( p.toString() );
+ }
+ buffer.append( "}]" );
+ return buffer.toString();
+ }
+}

Modified:
development/main/metro/composition/api/src/main/net/dpml/composition/data/ComponentProfile.java
==============================================================================
---
development/main/metro/composition/api/src/main/net/dpml/composition/data/ComponentProfile.java
(original)
+++
development/main/metro/composition/api/src/main/net/dpml/composition/data/ComponentProfile.java
Sun Mar 27 16:35:22 2005
@@ -136,6 +136,11 @@
*/
private final DependencyDirective[] m_dependencies;

+ /**
+ * The internal parts.
+ */
+ private final Part[] m_parts;
+

//--------------------------------------------------------------------------
// constructor

//--------------------------------------------------------------------------
@@ -152,7 +157,7 @@
{
this(
name, DeploymentProfile.DEFAULT,
InfoDescriptor.UNDEFINED_COLLECTION, classname, null, null, null,
- null, null, Mode.IMPLICIT );
+ null, null, null, Mode.IMPLICIT );
}

/**
@@ -171,6 +176,7 @@
template.getCategoriesDirective(),
template.getContextDirective(),
template.getDependencyDirectives(),
+ template.getParts(),
template.getParameters(),
template.getConfiguration(),
Mode.EXPLICIT );
@@ -184,6 +190,7 @@
final CategoriesDirective categories,
final ContextDirective context,
final DependencyDirective[] dependencies,
+ final Part[] parts,
final Parameters parameters,
final Configuration config,
final Mode mode )
@@ -218,6 +225,14 @@
{
m_dependencies = dependencies;
}
+ if( null == parts )
+ {
+ m_parts = new Part[0];
+ }
+ else
+ {
+ m_parts = parts;
+ }
}


//--------------------------------------------------------------------------
@@ -266,6 +281,16 @@
}

/**
+ * Return the internal parts.
+ *
+ * @return the array of internal parts.
+ */
+ public Part[] getParts()
+ {
+ return m_parts;
+ }
+
+ /**
* Return the dependency directive for a supplied key.
*
* @return the matching DependencyDirective (possibly null if

Modified:
development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ComponentProfileTestCase.java
==============================================================================
---
development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ComponentProfileTestCase.java
(original)
+++
development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ComponentProfileTestCase.java
Sun Mar 27 16:35:22 2005
@@ -19,6 +19,8 @@

import junit.framework.TestCase;

+import net.dpml.part.Part;
+
import net.dpml.composition.data.ComponentProfile;
import net.dpml.composition.data.ContextDirective;
import net.dpml.composition.data.DependencyDirective;
@@ -54,6 +56,7 @@
private Configuration m_configuration;
private ContextDirective m_context;
private DependencyDirective[] m_dependencies;
+ private Part[] m_parts;
private String m_name;
private String m_classname;
private int m_collection;
@@ -76,13 +79,14 @@
m_mode = Mode.IMPLICIT;
m_categories = new CategoriesDirective( new CategoryDirective[0] );
m_collection = InfoDescriptor.SOFT_COLLECTION;
+ m_parts = new Part[0];
}

public void testProfile() throws Exception
{
ComponentProfile profile = new ComponentProfile(
m_name, m_activation, m_collection, m_classname, m_categories,
- m_context, m_dependencies, m_parameters,
+ m_context, m_dependencies, m_parts, m_parameters,
m_configuration, m_mode );

assertEquals( "name", m_name, profile.getName() );
@@ -100,7 +104,7 @@
{
ComponentProfile profile = new ComponentProfile(
m_name, m_activation, m_collection, m_classname, m_categories,
- m_context, m_dependencies, m_parameters,
+ m_context, m_dependencies, m_parts, m_parameters,
m_configuration, m_mode );
testSerialization( profile );
}

Modified:
development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ContainmentProfileTestCase.java
==============================================================================
---
development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ContainmentProfileTestCase.java
(original)
+++
development/main/metro/composition/api/src/test/net/dpml/composition/data/test/ContainmentProfileTestCase.java
Sun Mar 27 16:35:22 2005
@@ -19,6 +19,8 @@

import junit.framework.TestCase;

+import net.dpml.part.Part;
+
import net.dpml.composition.data.ServiceDirective;
import net.dpml.composition.data.ClasspathDirective;
import net.dpml.composition.data.ContainmentProfile;
@@ -51,6 +53,7 @@
public class ContainmentProfileTestCase extends AbstractSerializableTestCase
{
private CategoriesDirective m_categories;
+ private Part[] m_parts;
private Mode m_mode;
private int m_activation;
private Parameters m_parameters;
@@ -98,9 +101,10 @@
m_mode = Mode.IMPLICIT;
m_categories = new CategoriesDirective( new CategoryDirective[0] );
m_collection = InfoDescriptor.SOFT_COLLECTION;
+ m_parts = new Part[0];
return new ComponentProfile(
name, m_activation, m_collection, m_classname, m_categories,
- m_context, m_dependencies, m_parameters,
+ m_context, m_dependencies, m_parts, m_parameters,
m_configuration, m_mode );
}


Modified:
development/main/metro/composition/builder/src/main/net/dpml/composition/builder/ComponentBuilderTask.java
==============================================================================
---
development/main/metro/composition/builder/src/main/net/dpml/composition/builder/ComponentBuilderTask.java
(original)
+++
development/main/metro/composition/builder/src/main/net/dpml/composition/builder/ComponentBuilderTask.java
Sun Mar 27 16:35:22 2005
@@ -355,12 +355,14 @@
Type type = loadType( classloader, classname );

String lifestyle = getLifestylePolicy( type ); // need to update
ComponentProfile to handle this
- int collection = getCollectionPolicy();
+ int collection = getCollectionPolicy( type );
int activation = getActivationPolicy();
Mode mode = Mode.EXPLICIT;
CategoriesDirective categories = getCategoriesDirective();
ContextDirective context = getContextDirective( classloader );
DependencyDirective[] dependencies = getDependencyDirectives();
+ Part[] parts = getParts( classloader );
+
Parameters parameters = getParameters();
Configuration configuration = getConfiguration();

@@ -370,7 +372,7 @@

return new ComponentProfile(
name, activation, collection, classname, categories, context,
- dependencies, parameters, configuration, mode );
+ dependencies, parts, parameters, configuration, mode );
}

/**
@@ -447,10 +449,9 @@
*/
public String getLifestylePolicy( Type type )
{
- String typeLifestylePolicy = type.getInfo().getLifestyle();
if( null == m_lifestyle )
{
- return typeLifestylePolicy; //
+ return type.getInfo().getLifestyle();
}
else
{
@@ -472,17 +473,17 @@
final String error =
"Lifestyle policy ["
+ spec
- + "] not regignized. Valid policies include 'request',
'thread' and 'singleton'.";
+ + "] not regignized. Valid policies include 'request',
'thread' and 'shared'.";
throw new BuildException( error, getLocation() );
}
}
}

- public int getCollectionPolicy()
+ public int getCollectionPolicy( Type type )
{
if( null == m_collection )
{
- return InfoDescriptor.UNDEFINED_COLLECTION;
+ return type.getInfo().getCollectionPolicy();
}
else
{
@@ -583,6 +584,20 @@
}
}

+ private Part[] getParts( ClassLoader classloader )
+ throws IntrospectionException, IOException, ClassNotFoundException
+ {
+ if( null == m_parts )
+ {
+ return new Part[0];
+ }
+ else
+ {
+ return m_parts.getParts( classloader );
+ }
+ }
+
+
private static URI PART_HANDLER_URI = setupURI( "@PART-HANDLER-URI@" );
private static URI PART_BUILDER_URI = setupURI( "@PART-BUILDER-URI@" );


Modified:
development/main/metro/composition/builder/src/main/net/dpml/composition/builder/datatypes/PartsDataType.java
==============================================================================
---
development/main/metro/composition/builder/src/main/net/dpml/composition/builder/datatypes/PartsDataType.java
(original)
+++
development/main/metro/composition/builder/src/main/net/dpml/composition/builder/datatypes/PartsDataType.java
Sun Mar 27 16:35:22 2005
@@ -18,12 +18,14 @@

package net.dpml.composition.builder.datatypes;

+import java.io.IOException;
import java.util.List;
import java.util.LinkedList;
import java.net.URI;

import net.dpml.part.Part;
import net.dpml.builder.PartBuilder;
+import net.dpml.builder.IntrospectionException;

import net.dpml.composition.builder.ComponentBuilderTask;

@@ -63,7 +65,7 @@
}

/**
- * Create a new constructed part builder.
+ * Create a new constructed value builder.
* @return a part builder
*/
public EntryDataType createValue()
@@ -169,7 +171,8 @@
* Return the set of parts contained within this container.
* @return the contained parts
*/
- public Part[] getParts( ClassLoader classloader ) throws Exception
+ public Part[] getParts( ClassLoader classloader )
+ throws IntrospectionException, IOException, ClassNotFoundException
{
PartBuilder[] builders = (PartBuilder[]) m_builders.toArray( new
PartBuilder[0] );
Part[] parts = new Part[ builders.length ];

Modified:
development/main/metro/composition/impl/src/main/net/dpml/composition/data/builder/XMLComponentProfileCreator.java
==============================================================================
---
development/main/metro/composition/impl/src/main/net/dpml/composition/data/builder/XMLComponentProfileCreator.java
(original)
+++
development/main/metro/composition/impl/src/main/net/dpml/composition/data/builder/XMLComponentProfileCreator.java
Sun Mar 27 16:35:22 2005
@@ -19,6 +19,8 @@

import java.util.ArrayList;

+import net.dpml.part.Part;
+
import net.dpml.logging.data.CategoriesDirective;

import net.dpml.parameters.ParameterException;
@@ -105,13 +107,28 @@
getContextDirective( config.getChild( "context", false ) );
final DependencyDirective[] dependencies =
getDependencyDirectives( config.getChild( "dependencies" ) );
+
+ //
+ // configuration stuff
+ //
+
final Parameters params =
getParameters( config.getChild( "parameters", false ) );
final Configuration configuration =
config.getChild( "configuration", true );

+ //
+ // not supported in XML
+ //
+
+ final Part[] parts = new Part[0];
+
+ //
+ // create the profile
+ //
+
return new ComponentProfile(
- name, activation, collection, classname, categories, context,
dependencies,
+ name, activation, collection, classname, categories, context,
dependencies, parts,
params, configuration, Mode.EXPLICIT );
}


Modified: development/main/metro/composition/testing/acme/build.xml
==============================================================================
--- development/main/metro/composition/testing/acme/build.xml (original)
+++ development/main/metro/composition/testing/acme/build.xml Sun Mar 27
16:35:22 2005
@@ -26,8 +26,6 @@
<dependencies>
<dependency key="widget" source="widget"/>
</dependencies>
- <!--
- -->
<parts>
<value key="date" class="java.util.Date"/>
<value key="info" class="java.net.URI"
value="link:acme-parts-list"/>

Modified:
development/main/metro/composition/testing/acme/src/main/net/dpml/composition/testing/DefaultGizmo.java
==============================================================================
---
development/main/metro/composition/testing/acme/src/main/net/dpml/composition/testing/DefaultGizmo.java
(original)
+++
development/main/metro/composition/testing/acme/src/main/net/dpml/composition/testing/DefaultGizmo.java
Sun Mar 27 16:35:22 2005
@@ -43,11 +43,21 @@
* @param logger the logging channel assigned by the container
* @param dependencies the requested dependencies
*/
- public DefaultGizmo( Logger logger, Dependencies dependencies )
+ public DefaultGizmo( Logger logger, Dependencies dependencies, Parts
parts )
{
logger.info( "initializing" );
Widget widget = dependencies.getWidget();
logger.info( "widget established: " + widget );
+
+ try
+ {
+ Widget anotherWidget = parts.createWidget();
+ parts.releaseWidget( anotherWidget );
+ }
+ catch( UnsupportedOperationException uoe )
+ {
+ logger.warn( "message: " + uoe.getMessage() );
+ }
}

//------------------------------------------------------------------
@@ -59,10 +69,9 @@
Widget getWidget();
}

- public interface Parts // not used
+ public interface Parts
{
Widget createWidget();
- Widget getWidget();
void releaseWidget( Widget widget );
}
}

Modified:
development/main/metro/meta/api/src/main/net/dpml/meta/info/Type.java
==============================================================================
--- development/main/metro/meta/api/src/main/net/dpml/meta/info/Type.java
(original)
+++ development/main/metro/meta/api/src/main/net/dpml/meta/info/Type.java
Sun Mar 27 16:35:22 2005
@@ -262,7 +262,7 @@
*
* @return the part descriptors
*/
- public PartDescriptor[] getParts()
+ public PartDescriptor[] getPartDescriptors()
{
return m_parts;
}

Modified:
development/main/metro/meta/api/src/test/net/dpml/meta/info/test/TypeTestCase.java
==============================================================================
---
development/main/metro/meta/api/src/test/net/dpml/meta/info/test/TypeTestCase.java
(original)
+++
development/main/metro/meta/api/src/test/net/dpml/meta/info/test/TypeTestCase.java
Sun Mar 27 16:35:22 2005
@@ -102,7 +102,7 @@
assertEquals( m_services[0], type.getService(m_reference));
assertEquals( m_services[0], type.getService(
m_services[0].getReference().getClassname()));
checkArray( m_services, type.getServices());
- checkArray( m_parts, type.getParts());
+ checkArray( m_parts, type.getPartDescriptors());
assertTrue( type.isaCategory(m_loggers[0].getName()));
assertTrue( !type.isaCategory( "fake name" ) );
}



  • svn commit: r2160 - in development/main/metro: activation/providers/metro/src/main/net/dpml/activation/metro composition/api/src/main/net/dpml/composition/data composition/api/src/test/net/dpml/composition/data/test composition/builder/src/main/net/dpml/composition/builder composition/builder/src/main/net/dpml/composition/builder/datatypes composition/impl/src/main/net/dpml/composition/data/builder composition/testing/acme composition/testing/acme/src/main/net/dpml/composition/testing meta/api/src/main/net/dpml/meta/info meta/api/src/test/net/dpml/meta/info/test, mcconnell, 03/27/2005

Archive powered by MHonArc 2.6.24.

Top of Page