Package sample.gbase.recipe

Source Code of sample.gbase.recipe.RecipeListener

/* Copyright (c) 2006 Google Inc.
*
* 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 sample.gbase.recipe;

import com.google.api.gbase.client.FeedURLFactory;
import com.google.api.gbase.client.GoogleBaseService;

import java.net.MalformedURLException;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
* Creates objects needed by the servlets and makes them available by
* setting them as attributes of the global servlet context.
*
* Makes sure the required initialization parameters are present.
*
*/
public class RecipeListener implements ServletContextListener {

  public static final String MOST_USED_VALUES_ATTRIBUTE = "mostUsedValues";

  public static final String FEED_URL_FACTORY_ATTRIBUTE = "feedUrlFactory";
 
  FeedURLFactory urlFactory;

  protected MostUsedValues mostUsedValues;

  /**
   * Creates an initialised MostUsedValues object and a FeedURLFactory
   * to be used by the servlets.
   * Makes sure the applicationName init parameter is set.
   *
   * @throws RuntimeException
   */
  public void contextInitialized(ServletContextEvent event) {
    ServletContext servletContext = event.getServletContext();
   
    String applicationName =
        servletContext.getInitParameter(RecipeUtil.APPLICATION_NAME_PARAMETER);
    if (applicationName == null) {
      RuntimeException re =
          new RuntimeException("applicationName context parameter is missing");
      servletContext.log(re.getMessage(), re.getCause());
      throw re;
    }
   
    String baseUrl = servletContext.getInitParameter("baseUrl");
    if (baseUrl == null) {
      urlFactory = FeedURLFactory.getDefault();
    } else {
      try {
        urlFactory = new FeedURLFactory(baseUrl);
      } catch (MalformedURLException e) {
        RuntimeException re =
            new RuntimeException("Cannot use the baseUrl context parameter", e);
        servletContext.log(re.getMessage(), re.getCause());
        throw re;
      }
    }
    servletContext.setAttribute(FEED_URL_FACTORY_ATTRIBUTE, urlFactory);
   
    String key = servletContext.getInitParameter(RecipeUtil.DEVELOPER_KEY_PARAMETER);

    GoogleBaseService service = new GoogleBaseService(applicationName, key);
    mostUsedValues = new MostUsedValues(service,
                                        urlFactory,
                                        RecipeUtil.RECIPE_ITEMTYPE_QUERY);
    initMostUsedValues(mostUsedValues, servletContext);
    RecipeUtil.setMostUsedValues(servletContext, mostUsedValues);
  }
 
  public void contextDestroyed(ServletContextEvent event) {
    mostUsedValues.clear();
  }

  /**
   * Initializes a MostUsedValues object to cache the most used values
   * of some attributes, suitable to be used in the web pages.
   *
   * @param mostUsedValues object to initialize
   * @param servletContext the servlet context used by mostUsedValues
   *                       to log exceptions
   */
  public static void initMostUsedValues(MostUsedValues mostUsedValues,
                                        ServletContext servletContext) {
    long interval = 1000L * 60L * 60L; // 1 hour
    mostUsedValues.cache(interval, 14, servletContext,
                         Recipe.CUISINE_ATTRIBUTE);
    mostUsedValues.cache(interval, 16, servletContext,
                         Recipe.MAIN_INGREDIENT_ATTRIBUTE);
  }

}
TOP

Related Classes of sample.gbase.recipe.RecipeListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.