You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/02/10 17:24:48 UTC
cvs commit: avalon/merlin/composition/impl/src/test/org/apache/avalon/composition/model/test AbstractTestCase.java AssemblyTestCase.java SystemContextBuilder.java
mcconnell 2004/02/10 08:24:48
Added: merlin/composition/impl/src/test/org/apache/avalon/composition/model/test
AbstractTestCase.java AssemblyTestCase.java
SystemContextBuilder.java
Log:
Updating APIs and implemetation to enable seperation of the runtime aspects from model aspects anabling full model-driven control.
Revision Changes Path
1.1 avalon/merlin/composition/impl/src/test/org/apache/avalon/composition/model/test/AbstractTestCase.java
Index: AbstractTestCase.java
===================================================================
package org.apache.avalon.composition.model.test;
import java.io.File;
import org.apache.avalon.repository.Artifact;
import org.apache.avalon.composition.model.ComponentModel;
import org.apache.avalon.composition.model.ContainmentModel;
import org.apache.avalon.composition.model.DeploymentModel;
import org.apache.avalon.composition.provider.SystemContext;
import org.apache.avalon.composition.provider.ModelFactory;
import org.apache.avalon.repository.provider.InitialContext;
import org.apache.avalon.repository.main.DefaultInitialContext;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.util.exception.ExceptionHelper;
import org.apache.avalon.util.env.Env;
import junit.framework.TestCase;
public abstract class AbstractTestCase extends TestCase
{
public int PRIORITY = ConsoleLogger.LEVEL_INFO;
//-------------------------------------------------------
// state
//-------------------------------------------------------
public ContainmentModel m_model;
private Logger m_logger = new ConsoleLogger( PRIORITY );
private String m_path;
//-------------------------------------------------------
// constructor
//-------------------------------------------------------
public AbstractTestCase( String path )
{
super( path );
m_path = path;
}
//-------------------------------------------------------
// constructor
//-------------------------------------------------------
protected Logger getLogger()
{
return m_logger;
}
protected File getTestDir()
{
return new File( System.getProperty( "basedir" ), "target" );
}
public void setUp() throws Exception
{
if( m_model == null )
{
File base = new File( getTestDir(), "test" );
File root = new File( base, "repository" );
File confDir = new File( base, "conf" );
File source = new File( confDir, m_path );
//
// FIXME - need to read the current version for a
// properties file or something
//
InitialContext context =
new DefaultInitialContext(
getMavenRepositoryDirectory() );
try
{
SystemContext system =
SystemContextBuilder.createSystemContext(
context, base, root, PRIORITY, true, 1000 );
ModelFactory factory = system.getModelFactory();
m_model = factory.createRootContainmentModel( source.toURL() );
}
catch( Throwable e )
{
final String error = ExceptionHelper.packException( e, true );
System.err.println( error );
fail( error );
}
}
}
public void printModel( String lead, DeploymentModel model )
{
if( model instanceof ContainmentModel )
{
printContainmentModel( lead, (ContainmentModel) model );
}
else if( model instanceof ComponentModel )
{
printComponentModel( lead, (ComponentModel) model );
}
}
public void printContainmentModel( String lead, ContainmentModel model )
{
printDeploymentModel( lead, model );
DeploymentModel[] models = model.getModels();
if( models.length > 0 )
{
System.out.println( lead + " children:" );
for( int i=0; i<models.length; i++ )
{
DeploymentModel m = models[i];
printModel( " " + lead, m );
}
}
models = model.getStartupGraph();
if( models.length > 0 )
{
System.out.println( lead + " startup:" );
for( int i=0; i<models.length; i++ )
{
DeploymentModel m = models[i];
System.out.println( " " + lead + (i+1) + ": " + m );
}
}
models = ((ContainmentModel)model).getShutdownGraph();
if( models.length > 0 )
{
System.out.println( lead + " shutdown:" );
for( int i=0; i<models.length; i++ )
{
DeploymentModel m = models[i];
System.out.println( " " + lead + (i+1) + ": " + m );
}
}
}
public void printComponentModel( String lead, ComponentModel model )
{
printDeploymentModel( lead, model );
}
public void printDeploymentModel( String lead, DeploymentModel model )
{
System.out.println(
lead
+ "model:"
+ model + "("
+ model.getDeploymentTimeout()
+ ")" );
DeploymentModel[] providers = model.getProviderGraph();
DeploymentModel[] consumers = model.getConsumerGraph();
if(( providers.length == 0 ) && ( consumers.length == 0 ))
{
return;
}
if( providers.length > 0 ) for( int i=0; i<providers.length; i++ )
{
DeploymentModel m = providers[i];
System.out.println( lead + " <-- " + m );
}
if( consumers.length > 0 ) for( int i=0; i<consumers.length; i++ )
{
DeploymentModel m = consumers[i];
System.out.println( lead + " --> " + m );
}
}
private static File getMavenRepositoryDirectory()
{
return new File( getMavenHomeDirectory(), "repository" );
}
private static File getMavenHomeDirectory()
{
return new File( getMavenHome() );
}
private static String getMavenHome()
{
try
{
String local =
System.getProperty(
"maven.home.local",
Env.getEnvVariable( "MAVEN_HOME_LOCAL" ) );
if( null != local ) return local;
return System.getProperty( "user.home" ) + File.separator + ".maven";
}
catch( Throwable e )
{
final String error =
"Internal error while attempting to access environment.";
final String message =
ExceptionHelper.packException( error, e, true );
throw new RuntimeException( message );
}
}
}
1.5 +14 -1 avalon/merlin/composition/impl/src/test/org/apache/avalon/composition/model/test/AssemblyTestCase.java
1.1 avalon/merlin/composition/impl/src/test/org/apache/avalon/composition/model/test/SystemContextBuilder.java
Index: SystemContextBuilder.java
===================================================================
/*
* Copyright 2004 Apache Software Foundation
* 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 org.apache.avalon.composition.model.test;
import java.io.File;
import java.net.URL;
import java.util.Map;
import org.apache.avalon.composition.model.ContainmentModel;
import org.apache.avalon.composition.model.impl.DefaultSystemContext;
import org.apache.avalon.composition.provider.ModelFactory;
import org.apache.avalon.composition.provider.SystemContext;
import org.apache.avalon.logging.provider.LoggingManager;
import org.apache.avalon.logging.data.CategoryDirective;
import org.apache.avalon.repository.Artifact;
import org.apache.avalon.repository.Repository;
import org.apache.avalon.repository.provider.CacheManager;
import org.apache.avalon.repository.provider.InitialContext;
import org.apache.avalon.repository.provider.Builder;
import org.apache.avalon.repository.provider.Factory;
import org.apache.avalon.framework.logger.Logger;
import org.apache.avalon.framework.logger.ConsoleLogger;
import org.apache.avalon.framework.context.DefaultContext;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
/**
* Implementation of a system context that exposes a system wide set of parameters.
*
* @author <a href="mailto:dev@avalon.apache.org">Avalon Development Team</a>
* @version $Revision: 1.1 $ $Date: 2004/02/10 16:24:48 $
*/
public class SystemContextBuilder
{
//--------------------------------------------------------------
// static
//--------------------------------------------------------------
/**
* Convinience function to create a new system context. This function
* is intended for test purposes only.
*
* @param context the intial repository context
* @param base the base directory from which relative references
* within a classpath or library directive shall be resolved
* @param root a repository root directory
* @param priority logging manager default priority
* @return a system context
*/
public static SystemContext createSystemContext(
InitialContext context, File base, File root,
int priority, boolean secure, long timeout )
throws Exception
{
//
// ### FIX ME ##
//
Artifact artifact = Artifact.createArtifact(
"avalon-logging", "avalon-logkit-impl", "1.0-SNAPSHOT" );
LoggingManager logging =
createLoggingManager( context, artifact, base, priority );
Logger logger = logging.getLoggerForCategory( "" );
CacheManager cache = createCacheManager( context, root );
Repository repository = cache.createRepository();
final File home = new File( base, "home" );
final File temp = new File( base, "temp" );
return new DefaultSystemContext(
context, null, logging, base, home, temp, repository, "system",
false, timeout, secure );
}
private static CacheManager createCacheManager(
InitialContext context, File root )
throws Exception
{
String dpml = "http://dpml.net";
String ibiblio = "http://www.ibiblio.org/maven";
String[] hosts = new String[]{ dpml, ibiblio };
Factory factory = context.getInitialFactory();
Map criteria = factory.createDefaultCriteria();
criteria.put( "avalon.repository.cache", root );
criteria.put( "avalon.repository.hosts", hosts );
return (CacheManager) factory.create( criteria );
}
private static LoggingManager createLoggingManager(
InitialContext context, Artifact artifact, File base, int priority )
throws Exception
{
final String level = getStringPriority( priority );
Builder builder = context.newBuilder( artifact );
Factory factory = builder.getFactory();
Map criteria = factory.createDefaultCriteria();
File file = new File( base, "conf/logging.xml" );
criteria.put( "avalon.logging.configuration", file );
criteria.put( "avalon.logging.basedir", base );
return (LoggingManager) factory.create( criteria );
}
private static String getStringPriority( int priority )
{
if( priority == ConsoleLogger.LEVEL_DISABLED )
{
return "NONE";
}
else if( priority == ConsoleLogger.LEVEL_DEBUG )
{
return "DEBUG";
}
else if( priority == ConsoleLogger.LEVEL_INFO )
{
return "INFO";
}
else if( priority == ConsoleLogger.LEVEL_WARN )
{
return "WARN";
}
else if( priority == ConsoleLogger.LEVEL_ERROR )
{
return "ERROR";
}
else if( priority == ConsoleLogger.LEVEL_FATAL )
{
return "FATAL";
}
else
{
final String error =
"Unrecognized logging priority: " + priority;
throw new IllegalArgumentException( error );
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org