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 import org.mortbay.jetty.Connector;
014 import org.nanocontainer.webcontainer.PicoContextHandler;
015 import org.nanocontainer.webcontainer.PicoJettyServer;
016 import org.nanocontainer.webcontainer.PicoWebAppContext;
017 import org.nanocontainer.script.groovy.NodeCreator;
018 import org.picocontainer.MutablePicoContainer;
019
020 import java.util.Map;
021
022 public class ServerBuilder extends NodeBuilder {
023 private final PicoJettyServer server;
024 private final MutablePicoContainer parentContainer;
025
026 public ServerBuilder(PicoJettyServer server, MutablePicoContainer parentContainer) {
027 this.server = server;
028 this.parentContainer = parentContainer;
029 }
030
031 protected Object createNode(Object name, Map map) {
032 if (name.equals("context")) {
033 return createContext(map);
034 } else if (name.equals("blockingChannelConnector")) {
035 return createBlockingChannelConnector(map);
036 } else if (name.equals("xmlWebApplication")) {
037 return createXmlWebApplication(map);
038 }
039 return null;
040 }
041
042 protected Object createBlockingChannelConnector(Map map) {
043 int port = ((Integer) map.remove("port")).intValue();
044 return server.createBlockingChannelConnector((String) map.remove("host"), port);
045 }
046
047 protected Object createContext(Map map) {
048 boolean sessions = false;
049 if (map.containsKey("sessions")) {
050 sessions = Boolean.valueOf((String) map.remove("sessions")).booleanValue();
051 }
052 PicoContextHandler context = server.createContext((String) map.remove("path"), sessions);
053 return new ContextBuilder(parentContainer, context);
054 }
055
056 protected Object createXmlWebApplication(Map map) {
057 PicoWebAppContext context = server.addWebApplication((String) map.remove("path"), (String) map.remove("warfile"));
058 return new WarFileBuilder(parentContainer, context);
059 }
060
061 }