001: // WebOnSwing - Web Application Framework
002: // Copyright (C) 2003 Fernando Damian Petrola
003: //
004: // This library is free software; you can redistribute it and/or
005: // modify it under the terms of the GNU Lesser General Public
006: // License as published by the Free Software Foundation; either
007: // version 2.1 of the License, or (at your option) any later version.
008: //
009: // This library is distributed in the hope that it will be useful,
010: // but WITHOUT ANY WARRANTY; without even the implied warranty of
011: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: // Lesser General Public License for more details.
013: //
014: // You should have received a copy of the GNU Lesser General Public
015: // License along with this library; if not, write to the Free Software
016: // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017:
018: package net.ar.webonswing;
019:
020: import java.util.*;
021:
022: import javax.swing.*;
023:
024: import net.ar.webonswing.helpers.*;
025: import net.ar.webonswing.managers.contributors.*;
026: import net.ar.webonswing.managers.names.*;
027: import net.ar.webonswing.managers.pages.*;
028: import net.ar.webonswing.managers.state.*;
029: import net.ar.webonswing.managers.templates.*;
030: import net.ar.webonswing.managers.windows.*;
031: import net.ar.webonswing.render.templates.*;
032: import net.ar.webonswing.swing.layouts.*;
033: import net.ar.webonswing.wrapping.*;
034:
035: import org.apache.commons.logging.*;
036:
037: /**
038: * Contiene todos los administradores necesarios para interactuar con el
039: * framework desde Swing y los contribuyentes
040: *
041: * @author Fernando Damian Petrola
042: */
043: public class WosFramework {
044: public String pageManagerConfigXmlFile;
045: public String templateManagerConfigXmlFile;
046: public String contributorManagerConfigXmlFile;
047:
048: public String windowTreeStateManagerConfigSerializedFile;
049:
050: public String windowManagerClassName;
051: public String hierarchyWrapperClassName;
052: public String componentNameManagerClassName;
053:
054: public String resourcesPath;
055: public boolean compressPersistedData = false;
056: public boolean catchExceptions = true;
057:
058: transient protected static WosFramework theInstance;
059:
060: transient public String contextPath = "";
061: public static final String TRANSFORMATION_PACKAGE = "transformation-package";
062: transient public static final String contributor_property = "theContributor";
063: transient public static String wosframework_config_file = "/net/ar/webonswing/config/webonswing-framework.config.xml";
064: transient protected PageManager thePageManager;
065: transient protected TemplateManager theTemplateManager;
066: transient protected ContributorManager theContributorManager;
067: transient protected WindowTreeStateManager theWindowTreeStateManager;
068: transient protected static boolean active = false;
069:
070: transient protected static InheritableThreadLocal sessionContext = new InheritableThreadLocal();
071: transient protected static Hashtable applicationContext = new Hashtable();
072:
073: public static final String USE_WOS_CLASSLOADER = "use-wos-classloader";
074:
075: public static WosFramework getInstance() {
076: if (theInstance == null)
077: theInstance = (WosFramework) WosHelper
078: .restoreObjectFromXml(wosframework_config_file);
079:
080: return theInstance;
081: }
082:
083: public void init() {
084: try {
085: initPageManager();
086: initTemplateManager();
087: initContributorManager();
088: initWindowTreeStateManager();
089:
090: System.setProperty("awt.toolkit",
091: "net.ar.webonswing.toolkit.WosToolkit");
092: System.setProperty("java.awt.graphicsenv",
093: "net.ar.webonswing.toolkit.WosGraphicsEnvironment");
094: UIManager
095: .installLookAndFeel("WebOnSwing",
096: "net.ar.webonswing.toolkit.lookandfeel.DummyLookAndFeel");
097: UIManager
098: .setLookAndFeel("net.ar.webonswing.toolkit.lookandfeel.DummyLookAndFeel");
099: } catch (Exception e) {
100: LogFactory.getLog(WosFramework.class).error(
101: "WosFramework initialization error", e);
102: throw new WebOnSwingException(
103: "WosFramework initialization error", e);
104: }
105:
106: active = true;
107: }
108:
109: public void initTemplateManager() {
110: theTemplateManager = (TemplateManager) WosHelper
111: .restoreObjectFromXml(templateManagerConfigXmlFile);
112: }
113:
114: public void initPageManager() {
115: thePageManager = (PageManager) WosHelper
116: .restoreObjectFromXml(pageManagerConfigXmlFile);
117: }
118:
119: public void initContributorManager() {
120: theContributorManager = (ContributorManager) WosHelper
121: .restoreObjectFromXml(contributorManagerConfigXmlFile);
122: }
123:
124: public void initWindowTreeStateManager() {
125: theWindowTreeStateManager = (WindowTreeStateManager) WosHelper
126: .getObjectFromFile(WosHelper
127: .getResourceAsStream(windowTreeStateManagerConfigSerializedFile));
128: }
129:
130: public void persistWosFramework() {
131: WosHelper.persistObjectToXml(getInstance(),
132: wosframework_config_file);
133: }
134:
135: public void persistTemplateManager() {
136: WosHelper.persistObjectToXml(getTemplateManager(),
137: templateManagerConfigXmlFile);
138: }
139:
140: public void persistPageManager() {
141: WosHelper.persistObjectToXml(getPageManager(),
142: pageManagerConfigXmlFile);
143: }
144:
145: public void persistContributorManager() {
146: WosHelper.persistObjectToXml(getContributorManager(),
147: contributorManagerConfigXmlFile);
148: }
149:
150: public void persistWindowTreeStateManager() {
151: WosHelper.serializeObjectToFile(getWindowTreeStateManager(),
152: windowTreeStateManagerConfigSerializedFile);
153: //WosHelper.persistObjectToXml(theWindowTreeStateManager, StringUtils.replace(window_tree_state_manager_config_serialized_file, "serialized", "xml"));
154: }
155:
156: /**
157: * Encuentra una plantilla con el nombre o ruta especificada
158: *
159: * @param aTemplateName
160: * nombre o ruta de la plantilla a encontrar
161: * @return
162: */
163: public static KeyPositionTemplate getKeyPositionTemplateForName(
164: String aTemplateName) {
165: return getInstance().getTemplateManager()
166: .getKeyPositionTemplateForName(aTemplateName);
167: }
168:
169: public static KeyPositionTemplate getKeyPositionTemplateForSubTemplate(
170: Template aTemplate, String aPath) {
171: return getInstance().getTemplateManager()
172: .getKeyPositionTemplateForSubTemplate(aTemplate, aPath);
173: }
174:
175: public static PropagateTemplateLayoutByName getPropagateTemplateLayoutByNameFor(
176: String aTemplateName) {
177: return new PropagateTemplateLayoutByName(
178: getKeyPositionTemplateForName(aTemplateName));
179: }
180:
181: /**
182: * Devuelve un TemplateLayout a partir del nombre o ruta de una plantilla
183: *
184: * @param aName
185: * nombre o ruta de plantilla
186: * @return
187: */
188: public static TemplateLayout getTemplateLayoutForName(String aName) {
189: return new TemplateLayout(getKeyPositionTemplateForName(aName));
190: }
191:
192: public static TemplateLayout getTemplateLayoutForSubTemplate(
193: Template aTemplate, String aPath) {
194: return new TemplateLayout(getKeyPositionTemplateForSubTemplate(
195: aTemplate, aPath));
196: }
197:
198: public static void showChildWindow(Object anOpenerWindow,
199: Object aWindowToShow) {
200: getInstance().getWindowManager().showChildWindow(
201: anOpenerWindow, aWindowToShow);
202: }
203:
204: public static void showAndExecute(Object anOpenerWindow,
205: Object aWindowToShow, String aMethodName) {
206: getInstance().getWindowManager().showAndExecute(anOpenerWindow,
207: aWindowToShow, aMethodName);
208: }
209:
210: public static void hide(Object aWindow) {
211: getInstance().getWindowManager().hide(aWindow);
212: }
213:
214: public static void assignContributor(JComponent aComponent,
215: Class aContributor) {
216: aComponent.putClientProperty(contributor_property, aContributor
217: .getName());
218: }
219:
220: public static void assignContributor(JComponent aComponent,
221: String aContributorClassName) {
222: aComponent.putClientProperty(contributor_property,
223: aContributorClassName);
224: }
225:
226: public static void assignContributor(JComponent aComponent,
227: ComponentContributor aContributor) {
228: aComponent
229: .putClientProperty(contributor_property, aContributor);
230: }
231:
232: public static void assignContributor(
233: RootPaneContainer aRootPaneContainer, Class aContributor) {
234: assignContributor(aRootPaneContainer.getRootPane(),
235: aContributor);
236: }
237:
238: public static void assignContributor(
239: RootPaneContainer aRootPaneContainer,
240: String aContributorClassName) {
241: assignContributor(aRootPaneContainer.getRootPane(),
242: aContributorClassName);
243: }
244:
245: public static void assignContributor(
246: RootPaneContainer aRootPaneContainer,
247: ComponentContributor aContributor) {
248: assignContributor(aRootPaneContainer.getRootPane(),
249: aContributor);
250: }
251:
252: public void setPageManager(PageManager anPageManager) {
253: thePageManager = anPageManager;
254: }
255:
256: public void setTemplateManager(TemplateManager anTemplateManager) {
257: theTemplateManager = anTemplateManager;
258: }
259:
260: public void setWindowTreeStateManager(
261: WindowTreeStateManager anWindowTreeStateManager) {
262: theWindowTreeStateManager = anWindowTreeStateManager;
263: }
264:
265: public WindowTreeStateManager getWindowTreeStateManager() {
266: return theWindowTreeStateManager;
267: }
268:
269: public PageManager getPageManager() {
270: return thePageManager;
271: }
272:
273: public TemplateManager getTemplateManager() {
274: return theTemplateManager;
275: }
276:
277: public static ComponentNameManager getComponentNameManager() {
278: if (getInstance().componentNameManagerClassName.length() > 0)
279: return (ComponentNameManager) WosHelper
280: .createClassInstance(getInstance().componentNameManagerClassName);
281: else
282: return null;
283: }
284:
285: public String getCompleteResourcePath() {
286: return getContextPath() + getResourcesPath();
287: }
288:
289: public static Map getSessionContext() {
290: Map sessionContextInstance = (Map) sessionContext.get();
291:
292: if (sessionContextInstance == null) {
293: sessionContextInstance = new Hashtable();
294: sessionContext.set(sessionContextInstance);
295: }
296:
297: return sessionContextInstance;
298: }
299:
300: public static Map getApplicationContext() {
301: return applicationContext;
302: }
303:
304: public ContributorManager getContributorManager() {
305: return theContributorManager;
306: }
307:
308: public void setContributorManager(
309: ContributorManager unContributorManager) {
310: theContributorManager = unContributorManager;
311: }
312:
313: public static boolean isActive() {
314: return active;
315: }
316:
317: public static void setActive(boolean anActive) {
318: active = anActive;
319: }
320:
321: public String getResourcesPath() {
322: return resourcesPath;
323: }
324:
325: public void setResourcesPath(String aString) {
326: getInstance().resourcesPath = aString;
327: }
328:
329: public HierarchyWrapper getHierarchyWrapper() {
330: if (getInstance().hierarchyWrapperClassName.length() > 0)
331: return (HierarchyWrapper) WosHelper
332: .createClassInstance(getInstance().hierarchyWrapperClassName);
333: else
334: return null;
335: }
336:
337: public WindowManager getWindowManager() {
338: return (WindowManager) WosHelper
339: .createClassInstance(getInstance().windowManagerClassName);
340: }
341:
342: public boolean isCompressPersistedData() {
343: return compressPersistedData;
344: }
345:
346: public void setCompressPersistedData(boolean aB) {
347: compressPersistedData = aB;
348: }
349:
350: public String getContextPath() {
351: return contextPath;
352: }
353:
354: public void setContextPath(String aString) {
355: contextPath = aString;
356: }
357:
358: public boolean isCatchExceptions() {
359: return catchExceptions;
360: }
361:
362: public void setCatchExceptions(boolean b) {
363: catchExceptions = b;
364: }
365:
366: public static boolean useWosClassLoader() {
367: return System.getProperty(WosFramework.USE_WOS_CLASSLOADER) != null
368: && System.getProperty(WosFramework.USE_WOS_CLASSLOADER)
369: .equals("true");
370: }
371:
372: }
|