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.picocontainer.jetty.groovy;
011
012 import groovy.util.NodeBuilder;
013
014 import java.util.Map;
015
016 import org.picocontainer.jetty.PicoContext;
017 import org.picocontainer.jetty.PicoJettyServer;
018 import org.picocontainer.jetty.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");
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"));
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 }