001 /***************************************************************************** 002 * Copyright (C) NanoContainer Organization. All rights reserved. * 003 * ------------------------------------------------------------------------- * 004 * The software in this package is published under the terms of the BSD * 005 * style license a copy of which has been included with this distribution in * 006 * the LICENSE.txt file. * 007 * * 008 *****************************************************************************/ 009 010 package org.nanocontainer.webcontainer.groovy; 011 012 import groovy.util.NodeBuilder; 013 014 import java.util.Map; 015 016 import org.nanocontainer.webcontainer.PicoContext; 017 import org.nanocontainer.webcontainer.PicoJettyServer; 018 import org.nanocontainer.webcontainer.PicoWebAppContext; 019 import org.picocontainer.MutablePicoContainer; 020 021 public class ServerBuilder extends NodeBuilder { 022 private final PicoJettyServer server; 023 private final MutablePicoContainer parentContainer; 024 025 public ServerBuilder(PicoJettyServer server, MutablePicoContainer parentContainer) { 026 this.server = server; 027 this.parentContainer = parentContainer; 028 } 029 030 protected Object createNode(Object name, Map map) { 031 if (name.equals("context")) { 032 return createContext(map); 033 } else if (name.equals("blockingChannelConnector")) { 034 return createBlockingChannelConnector(map); 035 } else if (name.equals("xmlWebApplication")) { 036 return createXmlWebApplication(map); 037 } 038 return null; 039 } 040 041 protected Object createBlockingChannelConnector(Map map) { 042 int port = ((Integer) map.remove("port")).intValue(); 043 return server.createBlockingChannelConnector((String) map.remove("host"), port); 044 } 045 046 protected Object createContext(Map map) { 047 boolean sessions = false; 048 if (map.containsKey("sessions")) { 049 sessions = Boolean.valueOf((String) map.remove("sessions")).booleanValue(); 050 } 051 PicoContext context = server.createContext((String) map.remove("path"), sessions); 052 return new ContextBuilder(parentContainer, context); 053 } 054 055 protected Object createXmlWebApplication(Map map) { 056 PicoWebAppContext context = server.addWebApplication((String) map.remove("path"), (String) map.remove("warfile")); 057 return new WarFileBuilder(parentContainer, context); 058 } 059 060 }