001: /*
002: * Copyright 2005 Joe Walker
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.directwebremoting;
017:
018: import javax.servlet.ServletContext;
019:
020: import org.apache.commons.logging.Log;
021: import org.apache.commons.logging.LogFactory;
022:
023: /**
024: * An accessor for the current Hub
025: * @author Joe Walker [joe at getahead dot ltd dot uk]
026: */
027: public class HubFactory {
028: /**
029: * Accessor for the current Hub.
030: * @return The current Hub.
031: */
032: public static Hub get() {
033: if (builder == null) {
034: log
035: .warn("HubBuilder is null. This probably means that DWR has not initialized properly");
036: return null;
037: }
038:
039: return builder.get();
040: }
041:
042: /**
043: * Accessor for the current Hub in more complex setups.
044: * For some setups DWR may not be able to discover the correct environment
045: * (i.e. ServletContext), so we need to tell it. This generally happens if
046: * you have DWR configured twice in a single context. Unless you are writing
047: * code that someone else will configure, it is probably safe to use the
048: * simpler {@link #get()} method.
049: * @param ctx The servlet context to allow us to bootstrap
050: * @return The current Hub.
051: */
052: public static Hub get(ServletContext ctx) {
053: if (builder == null) {
054: log
055: .warn("HubBuilder is null. This probably means that DWR has not initialized properly");
056: return null;
057: }
058:
059: return builder.get(ctx);
060: }
061:
062: /**
063: * Internal method to allow us to get the HubBuilder from which we
064: * will get Hub objects.
065: * Do not call this method from outside of DWR.
066: * @param builder The factory object (from DwrServlet)
067: */
068: public static void setHubBuilder(HubBuilder builder) {
069: HubFactory.builder = builder;
070: }
071:
072: /**
073: * The HubBuilder from which we will get Hub objects
074: */
075: private static HubBuilder builder = null;
076:
077: /**
078: * Class to enable us to access servlet parameters.
079: */
080: public interface HubBuilder {
081: /**
082: * Make the current webapp know what the current config/context is.
083: * This method is only for use internally to DWR.
084: * @param context The servlet context
085: */
086: void set(ServletContext context);
087:
088: /**
089: * Accessor for the current Hub.
090: * For some setups DWR may not be able to discover the correct
091: * environment (i.e. ServletContext), so we need to tell it.
092: * @param context The web application environment
093: * @return The Hub that is associated with this web application
094: */
095: Hub get(ServletContext context);
096:
097: /**
098: * Accessor for the current Hub
099: * @return The Hub that is associated with this web application
100: */
101: Hub get();
102: }
103:
104: /**
105: * The log stream
106: */
107: private static final Log log = LogFactory
108: .getLog(WebContextFactory.class);
109: }
|