package edu.stanford.sulair.dlss.dor;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;
import org.springframework.web.context.ContextLoaderServlet;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.spi.spring.container.servlet.SpringServlet;
public class AbstractResourceTest {
public static final String APPLICATION_CONTEXT_SPRING25_XML = "applicationContext-spring25.xml";
private static final Log LOG = LogFactory.getLog( AbstractResourceTest.class );
protected String _springConfig;
protected String _resourcePackages;
private final int _port;
private final String _servletPath;
private Server _server;
public AbstractResourceTest() {
//_springConfig = System.getProperty( "applicationContext", APPLICATION_CONTEXT_SPRING25_XML );
_resourcePackages = System.getProperty( "resourcePackages", "edu.stanford.sulair.dlss.dor" );
_port = 9999;
_servletPath = "/jersey-spring";
}
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
@Before
public void setUp() throws Exception {
startJetty( _port, _servletPath );
}
private void startJetty( int port, String servletPath ) throws Exception {
LOG.info( "Starting jetty on port " + port + "..." );
_server = new Server(port);
final Context context = new Context(_server, "/", Context.SESSIONS);
final Map<String,String> contextParams = new HashMap<String, String>();
contextParams.put( "contextConfigLocation", "classpath:" + _springConfig );
context.setInitParams( contextParams );
final ServletHolder springServletHolder = new ServletHolder( ContextLoaderServlet.class );
springServletHolder.setInitOrder( 1 );
context.addServlet( springServletHolder, "/*" );
final ServletHolder sh = new ServletHolder(SpringServlet.class);
sh.setInitParameter( "com.sun.jersey.config.property.resourceConfigClass",
PackagesResourceConfig.class.getName() );
sh.setInitParameter( PackagesResourceConfig.PROPERTY_PACKAGES,
_resourcePackages );
sh.setInitOrder( 2 );
context.addServlet(sh, servletPath + "/*");
_server.start();
LOG.info( "Successfully started jetty." );
}
private void stopJetty() throws Exception {
try {
_server.stop();
} catch( Exception e ) {
LOG.warn( "Could not stop jetty...", e );
}
}
@After
public void tearDown() throws Exception {
LOG.info( "tearDown..." );
stopJetty();
LOG.info( "done..." );
}
public WebResource resource( final String path ) {
final Client c = Client.create();
final WebResource rootResource = c.resource( getResourcePath( path ) );
return rootResource;
}
public String getResourcePath( final String path ) {
return "http://localhost:" + _port + _servletPath + "/" + path;
}
}