package coreservlets.listeners;

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

/** Proces nasłuchujący, który odczytuje nazwę firmy
 *  w momencie ładowania aplikacji po raz pierwszy. Nazwa
 *  jest zapisywana w atrybucie companyName kontekstu serwletu.
 *  Z tak zapisanej nazwy korzystać będą różnorodne
 *  serwlety i strony JSP.
 *  <P>
 *  Proces odczytuje również poprzednią nazwę firmy
 *  i zapisuje ją w atrybucie formerCompanyName.
 *  <P>
 *  Taken from Core Servlets and JavaServer Pages Volume II
 *  from Prentice Hall and Sun Microsystems Press,
 *  http://volume2.coreservlets.com/.
 *  (C) 2007 Marty Hall, Larry Brown, and Yaakov Chaikin;
 *  may be freely used or adapted.
 */

public class InitialCompanyNameListener
    implements ServletContextListener {
  private static final String DEFAULT_NAME =
    "MISSING-COMPANY-NAME";

  /** Odczytanie parametrów inicjalizacyjnych companyName i formerCompanyName
   *  oraz umieszczenie ich w kontekście serwletu.
   */
  public void contextInitialized(ServletContextEvent event) {
    ServletContext context = event.getServletContext();
    setInitialAttribute(context,
                        "companyName",
                        DEFAULT_NAME);
    setInitialAttribute(context,
                        "formerCompanyName",
                        "");
  }

  public void contextDestroyed(ServletContextEvent event) {}

   /** Odczytanie parametru inicjalizującego kontekstu serwletu
    *  o wskazanej nazwie. Jeśli parametr zostanie znaleziony, jego wartość
    *  jest zapisywana w atrybucie kontekstu serwletu o tej samej nazwie.
    *  Jeśli parametr inicjalizacyjny nie będzie istniał, w atrybucie
    *  kontekstu serwletu umieszczona zostanie wartość domyślna.
    */
  private void setInitialAttribute(ServletContext context,
                                   String initParamName,
                                   String defaultValue) {
    String initialValue =
      context.getInitParameter(initParamName);
    if (initialValue != null) {
      context.setAttribute(initParamName, initialValue);
    } else {
      context.setAttribute(initParamName, defaultValue);
    }
  }
  
  /** Metoda statyczna, która zwraca atrybut kontekstu serwletu
   *  o nazwie "companyName", jeżeli jest on dostępny.
   *  Jeżeli atrybut jest niedostępny, metoda zwraca
   *  wartość domyślną.
   */
  public static String getCompanyName(ServletContext context) {
    String name =
      (String)context.getAttribute("companyName");
    if (name == null) {
      name = DEFAULT_NAME;
    }
    return(name);
  }
  
  /** Metoda statyczna, która zwraca atrybut kontekstu serwletu
   *  o nazwie "formerCompanyName", jeżeli jest on dostępny.
   *  Jeżeli atrybut jest niedostępny, metoda zwraca
   *  wartość domyślną.
   */
  public static String getFormerCompanyName
                                     (ServletContext context) {
    String name =
      (String)context.getAttribute("formerCompanyName");
    if (name == null) {
      name = "";
    }
    return(name);
  }
}
