// ======================================================================== // $Id: Holder.java,v 1.18 2005/08/13 00:01:27 gregwilkins Exp $ // Copyright 1996-2004 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // 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 net.lightbody.bmp.proxy.jetty.jetty.servlet; import net.lightbody.bmp.proxy.jetty.http.HttpContext; import net.lightbody.bmp.proxy.jetty.http.HttpHandler; import net.lightbody.bmp.proxy.jetty.log.LogFactory; import net.lightbody.bmp.proxy.jetty.util.LifeCycle; import org.apache.commons.logging.Log; import java.io.Serializable; import java.util.*; /* --------------------------------------------------------------------- */ /** * @version $Id: Holder.java,v 1.18 2005/08/13 00:01:27 gregwilkins Exp $ * @author Greg Wilkins */ public class Holder extends AbstractMap implements LifeCycle, Serializable { private static Log log = LogFactory.getLog(Holder.class); /* ---------------------------------------------------------------- */ protected HttpHandler _httpHandler; protected String _name; protected String _displayName; protected String _className; protected Map _initParams; protected transient Class _class; /* ---------------------------------------------------------------- */ /** Constructor for Serialization. */ protected Holder() {} /* ---------------------------------------------------------------- */ protected Holder(HttpHandler httpHandler, String name, String className) { if (name==null || name.length()==0) throw new IllegalArgumentException("No name for "+className); if (className==null || className.length()==0) throw new IllegalArgumentException("No classname"); _httpHandler=httpHandler; _className=className; _name=name; _displayName=name; } /* ------------------------------------------------------------ */ public String getName() { return _name; } /* ------------------------------------------------------------ */ public void setDisplayName(String name) { _name=name; } /* ------------------------------------------------------------ */ public String getDisplayName() { return _name; } /* ------------------------------------------------------------ */ public String getClassName() { return _className; } /* ------------------------------------------------------------ */ public HttpHandler getHttpHandler() { return _httpHandler; } /* ------------------------------------------------------------ */ public HttpContext getHttpContext() { if (_httpHandler!=null) return _httpHandler.getHttpContext(); return null; } /* ------------------------------------------------------------ */ public void setInitParameter(String param,String value) { put(param,value); } /* ---------------------------------------------------------------- */ public String getInitParameter(String param) { if (_initParams==null) return null; return (String)_initParams.get(param); } /* ---------------------------------------------------------------- */ public Map getInitParameters() { return _initParams; } /* ------------------------------------------------------------ */ public Enumeration getInitParameterNames() { if (_initParams==null) return Collections.enumeration(Collections.EMPTY_LIST); return Collections.enumeration(_initParams.keySet()); } /* ------------------------------------------------------------ */ /** Map entrySet method. * FilterHolder implements the Map interface as a * configuration conveniance. The methods are mapped to the * filter properties. * @return The entrySet of the initParameter map */ public synchronized Set entrySet() { if (_initParams==null) _initParams=new HashMap(3); return _initParams.entrySet(); } /* ------------------------------------------------------------ */ /** Map put method. * FilterHolder implements the Map interface as a * configuration conveniance. The methods are mapped to the * filter properties. */ public synchronized Object put(Object name,Object value) { if (_initParams==null) _initParams=new HashMap(3); return _initParams.put(name,value); } /* ------------------------------------------------------------ */ /** Map get method. * FilterHolder implements the Map interface as a * configuration conveniance. The methods are mapped to the * filter properties. */ public synchronized Object get(Object name) { if (_initParams==null) return null; return _initParams.get(name); } /* ------------------------------------------------------------ */ public void start() throws Exception { _class=_httpHandler.getHttpContext().loadClass(_className); if(log.isDebugEnabled())log.debug("Started holder of "+_class); } /* ------------------------------------------------------------ */ public synchronized Object newInstance() throws InstantiationException, IllegalAccessException { if (_class==null) throw new InstantiationException("No class for "+this); return _class.newInstance(); } /* ------------------------------------------------------------ */ public boolean isStarted() { return _class!=null; } /* ------------------------------------------------------------ */ public void stop() { _class=null; } /* ------------------------------------------------------------ */ public String toString() { return _name; } }