/*
* Copyright 2013-2015 Alex Lin.
*
* 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 com.opoopress.maven.plugins.plugin;
import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.NCSARequestLog;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.handler.ContextHandler;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerList;
import org.mortbay.jetty.handler.RequestLogHandler;
import org.mortbay.jetty.handler.ResourceHandler;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.opoo.press.Site;
/**
* @author Alex Lin
*/
public class AbstractServerMojo extends AbstractBuildMojo{
private static final int MAX_IDLE_TIME = 30000;
/**
* The port to execute the HTTP server on.
*
* @parameter expression="${port}" default-value="8080"
*/
private int port;
protected Server createJettyServer(Site site){
Server server = new Server();
//FIXME
server.setStopAtShutdown(true);
Connector defaultConnector = createConnector(null, port);
server.setConnectors( new Connector[] { defaultConnector } );
String root = site.getRoot();
String resourceBase = site.getDestination().getPath();
getLog().info("Server resource base: " + resourceBase);
if("".equals(root)){
ResourceHandler resourceHandler = new ResourceHandler();
//resourceHandler.setDirectoriesListed(true);
resourceHandler.setWelcomeFiles(new String[]{"index.html"});
resourceHandler.setResourceBase(resourceBase/*site.getDestination().getPath()*/);
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resourceHandler, new DefaultHandler()});
server.setHandler(handlers);
//server.setHandlers(new Handler[]{handlers, logHandler});
//getLog().info( "Startisng preview server on http://localhost:" + port + "/" );
} else {
getLog().info("Using " + ContextHandler.class.getName());
ContextHandler contextHandler = new ContextHandler();
contextHandler.setContextPath(root);
contextHandler.setHandler(new ResourceHandler());
contextHandler.setResourceBase(resourceBase/*site.getDestination().getPath()*/);
//server.setHandler(contextHandler);
server.setHandlers(new Handler[]{contextHandler, new DefaultHandler()});
//server.setHandlers(new Handler[]{contextHandler, logHandler});
//log.info( "Starting preview server on http://localhost:" + port + root );
}
return server;
}
/**
*
* @param host localhost, 127.0.0.1 or 0.0.0.0.
* @param port port
* @return jetty connector
*/
protected Connector createConnector(String host, int port){
Connector connector = new SelectChannelConnector();
if(host != null){
connector.setHost(host);
}
connector.setPort( port );
connector.setMaxIdleTime(MAX_IDLE_TIME);
return connector;
}
protected RequestLogHandler createRequestLogHandler(){
boolean showRequestLog = Boolean.getBoolean("requestLog");
if(!showRequestLog){
return null;
}
NCSARequestLog requestLog = new NCSARequestLog();
requestLog.setLogDateFormat(null);
RequestLogHandler logHandler = new RequestLogHandler();
logHandler.setRequestLog(requestLog);
return logHandler;
}
protected void onServerStart(Site site, Server server){
String path = "".equals(site.getRoot()) ? "/" : site.getRoot();
getLog().info("Starting server on http://localhost:" + port + path);
getLog().info("Press Ctrl+C to stop.");
}
}