001: /*
002: * Copyright 2004, 2005, 2006 Odysseus Software GmbH
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 de.odysseus.calyxo.panels;
017:
018: import java.util.Locale;
019:
020: import javax.servlet.http.HttpServletRequest;
021: import javax.servlet.jsp.PageContext;
022:
023: import de.odysseus.calyxo.base.ModuleContext;
024: import de.odysseus.calyxo.base.ModuleSupport;
025: import de.odysseus.calyxo.panels.conf.PanelConfig;
026: import de.odysseus.calyxo.panels.conf.PanelsRootConfig;
027:
028: /**
029: * Panels support class. There is one instance per module, which may be
030: * retreived via the <code>getInstance()</code> methods.
031: * <p/>
032: * The panels support provides lookup of top level panels by name as well as
033: * access to the panels context of the current request.
034: *
035: * @author Christoph Beck
036: */
037: public class PanelsSupport {
038:
039: /**
040: * Module scope key used to save global panels support.
041: */
042: public static final String PANELS_SUPPORT_KEY = "de.odysseus.calyxo.panels";
043:
044: /**
045: * Request scope key used to save the context stack
046: */
047: private static final String PANELS_CONTEXT_KEY = "de.odysseus.calyxo.panels.context";
048:
049: /**
050: * Lookup panels support for module determined by specified request
051: */
052: public static final PanelsSupport getInstance(
053: HttpServletRequest request) {
054: ModuleContext context = ModuleSupport.getInstance(request)
055: .getModuleContext(request);
056: return (PanelsSupport) context.getAttribute(PANELS_SUPPORT_KEY);
057: }
058:
059: /**
060: * Convenience method.
061: * @see #getInstance(HttpServletRequest)
062: */
063: public static final PanelsSupport getInstance(
064: PageContext pageContext) {
065: return getInstance((HttpServletRequest) pageContext
066: .getRequest());
067: }
068:
069: /**
070: * Lookup panels support for specified module
071: */
072: public static final PanelsSupport getInstance(ModuleContext context) {
073: return (PanelsSupport) context.getAttribute(PANELS_SUPPORT_KEY);
074: }
075:
076: private PanelsRootConfig config;
077:
078: /**
079: * Constructor.
080: * @param config the panel root configuration element
081: */
082: PanelsSupport(PanelsRootConfig config) {
083: this .config = config;
084: }
085:
086: /**
087: * Find toplevel panel element by name and locale
088: */
089: public PanelConfig findPanelConfig(String name, Locale locale) {
090: return config.findPanelConfig(name, locale);
091: }
092:
093: /**
094: * Get the panels context for the specified request. Optionally create
095: * and install a new instance if necessary.
096: * @param request the request we process
097: * @param locale desired locale (used for panel lookups)
098: * @return panels context for specified request.
099: */
100: public PanelsContext getOrCreateContext(HttpServletRequest request,
101: Locale locale) {
102: PanelsContext context = (PanelsContext) request
103: .getAttribute(PANELS_CONTEXT_KEY);
104: if (context == null) {
105: context = new PanelsContext(this , locale);
106: request.setAttribute(PANELS_CONTEXT_KEY, context);
107: }
108: return context;
109: }
110:
111: /**
112: * Get the panels context for the specified request.
113: * @param request the request we process
114: * @return panels context for specified request.
115: */
116: public final PanelsContext getContext(HttpServletRequest request) {
117: return (PanelsContext) request.getAttribute(PANELS_CONTEXT_KEY);
118: }
119:
120: /**
121: * Convenience method.
122: * @see #getContext(HttpServletRequest)
123: */
124: public final PanelsContext getContext(PageContext pageContext) {
125: return getContext((HttpServletRequest) pageContext.getRequest());
126: }
127: }
|