001 package org.apache.myfaces.tobago.context;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one or more
005 * contributor license agreements. See the NOTICE file distributed with
006 * this work for additional information regarding copyright ownership.
007 * The ASF licenses this file to You under the Apache License, Version 2.0
008 * (the "License"); you may not use this file except in compliance with
009 * the License. You may obtain a copy of the License at
010 *
011 * http://www.apache.org/licenses/LICENSE-2.0
012 *
013 * Unless required by applicable law or agreed to in writing, software
014 * distributed under the License is distributed on an "AS IS" BASIS,
015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
016 * See the License for the specific language governing permissions and
017 * limitations under the License.
018 */
019
020 import org.apache.myfaces.tobago.config.TobagoConfig;
021
022 import javax.faces.context.FacesContext;
023 import javax.servlet.ServletContext;
024 import javax.servlet.ServletException;
025 import java.util.Map;
026
027 public class ResourceManagerFactory {
028
029 public static final String RESOURCE_MANAGER
030 = "org.apache.myfaces.tobago.context.ResourceManager";
031
032 private ResourceManagerFactory() {
033 }
034
035 private static boolean initialized;
036
037 public static ResourceManager getResourceManager(FacesContext facesContext) {
038 assert initialized;
039 return (ResourceManager) facesContext.getExternalContext()
040 .getApplicationMap().get(RESOURCE_MANAGER);
041 }
042
043 public static ResourceManager getResourceManager(ServletContext servletContext) {
044 assert initialized;
045 return (ResourceManager) servletContext.getAttribute(RESOURCE_MANAGER);
046 }
047
048 public static void init(
049 ServletContext servletContext, TobagoConfig tobagoConfig)
050 throws ServletException {
051 assert !initialized;
052 ResourceManagerImpl resourceManager
053 = new ResourceManagerImpl(tobagoConfig);
054
055 ThemeBuilder themeBuilder = new ThemeBuilder();
056 ResourceLocator resourceLocator = new ResourceLocator(
057 servletContext, resourceManager, themeBuilder);
058 resourceLocator.locate();
059 Map<String, Theme> availableThemes = themeBuilder.resolveThemes(tobagoConfig.getRenderersConfig());
060 tobagoConfig.setAvailableThemes(availableThemes);
061 for (Theme theme : availableThemes.values()) {
062 tobagoConfig.addResourceDir(theme.getResourcePath());
063 }
064
065 servletContext.setAttribute(RESOURCE_MANAGER, resourceManager);
066
067 initialized = true;
068 }
069
070 public static void release(ServletContext servletContext) {
071 assert initialized;
072 initialized = false;
073 servletContext.removeAttribute(RESOURCE_MANAGER);
074 }
075 }