1 16 package org.outerj.daisy.repository.testsupport; 17 18 import junit.framework.TestCase; 19 20 import org.apache.avalon.repository.provider.Builder; 21 import org.apache.avalon.repository.provider.Factory; 22 import org.apache.avalon.repository.provider.InitialContextFactory; 23 import org.apache.avalon.repository.provider.InitialContext; 24 import org.apache.avalon.repository.main.DefaultInitialContextFactory; 25 import org.apache.avalon.util.exception.ExceptionHelper; 26 import org.apache.avalon.util.env.Env; 27 import java.io.File ; 28 import java.util.Map ; 29 import java.lang.reflect.Method ; 30 31 import org.apache.avalon.repository.Artifact; 32 33 36 public class MyMerlin extends TestCase { 37 private Object m_kernel; 38 39 private Object m_root; 40 41 private Method m_locate; 42 private Method m_resolve; 43 private Method m_shutdown; 44 45 private static final String DEPLOYMENT_MODEL_CLASSNAME = 46 "org.apache.avalon.composition.model.DeploymentModel"; 47 48 private TestSupportConfig config; 49 50 public MyMerlin(TestSupportConfig config) { 51 this.config = config; 52 } 53 54 public void startMerlin() throws Exception { 55 56 58 65 InitialContextFactory initial = 66 new DefaultInitialContextFactory( "merlin" ); 67 initial.setCacheDirectory(new File (config.getRequiredProperty("testsupport.merlinsystem"))); 68 InitialContext context = initial.createInitialContext(); 69 70 78 String spec = config.getRequiredProperty("testsupport.merlinspec"); Artifact artifact = Artifact.createArtifact( spec ); 80 Builder builder = context.newBuilder( artifact ); 81 82 83 93 Factory factory = builder.getFactory(); 94 Map criteria = factory.createDefaultCriteria(); 95 96 98 105 File repository = new File (getMavenHome(), "repository"); 107 criteria.put("merlin.repository", repository); 108 109 m_kernel = factory.create( criteria ); 110 111 m_shutdown = m_kernel.getClass().getMethod("shutdown", new Class [0]); 112 Method method = m_kernel.getClass().getMethod("getModel", new Class [0]); 113 m_root = method.invoke( m_kernel, new Object [0] ); 114 m_locate = m_root.getClass().getMethod("getModel", new Class []{ String .class }); 115 Class modelClass = builder.getClassLoader().loadClass( DEPLOYMENT_MODEL_CLASSNAME ); 116 m_resolve = modelClass.getMethod( "resolve", new Class [0] ); 117 } 118 119 public void stopMerlin() throws Exception { 120 if (m_kernel == null) 121 throw new Exception ("Merlin not started."); 122 123 m_shutdown.invoke(m_kernel, new Object [0]); 124 m_kernel = null; 125 } 126 127 public Object resolve(String path) throws Exception { 128 if (m_kernel == null) 129 throw new Exception ("Merlin not started."); 130 131 Object model = m_locate.invoke( m_root, new Object []{ path } ); 132 return m_resolve.invoke( model, new Object [0] ); 133 } 134 135 private static File getMavenHome() 136 { 137 try 138 { 139 String local = 140 System.getProperty( 141 "maven.home.local", 142 Env.getEnvVariable( "MAVEN_HOME_LOCAL" ) ); 143 144 if( null != local ) return new File ( local ).getCanonicalFile(); 145 146 return new File ( 147 System.getProperty( "user.home" ) 148 + File.separator 149 + ".maven" ).getCanonicalFile(); 150 151 } 152 catch( Throwable e ) 153 { 154 final String error = 155 "Internal error while attempting to access environment."; 156 final String message = 157 ExceptionHelper.packException( error, e, true ); 158 throw new RuntimeException ( message ); 159 } 160 } 161 162 163 } 164 | Popular Tags |