Package ch.entwine.weblounge.test.site

Source Code of ch.entwine.weblounge.test.site.GreeterHTMLAction

/*
*  Weblounge: Web Content Management System
*  Copyright (c) 2003 - 2011 The Weblounge Team
*  http://entwinemedia.com/weblounge
*
*  This program is free software; you can redistribute it and/or
*  modify it under the terms of the GNU Lesser General Public License
*  as published by the Free Software Foundation; either version 2
*  of the License, or (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU Lesser General Public License for more details.
*
*  You should have received a copy of the GNU Lesser General Public License
*  along with this program; if not, write to the Free Software Foundation
*  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/

package ch.entwine.weblounge.test.site;

import ch.entwine.weblounge.common.content.page.Composer;
import ch.entwine.weblounge.common.content.page.PageTemplate;
import ch.entwine.weblounge.common.impl.language.LanguageUtils;
import ch.entwine.weblounge.common.impl.request.RequestUtils;
import ch.entwine.weblounge.common.impl.site.HTMLActionSupport;
import ch.entwine.weblounge.common.language.Language;
import ch.entwine.weblounge.common.request.RequestFlavor;
import ch.entwine.weblounge.common.request.WebloungeRequest;
import ch.entwine.weblounge.common.request.WebloungeResponse;
import ch.entwine.weblounge.common.site.ActionException;
import ch.entwine.weblounge.common.site.HTMLAction;
import ch.entwine.weblounge.test.util.TestSiteUtils;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;

import java.io.IOException;
import java.util.Map;

/**
* Simple test action that is able to render a greeting on the site template.
*/
public class GreeterHTMLAction extends HTMLActionSupport {

  /** Ways to call this action */
  protected enum Method {
    Greet, Announce
  }

  /** Name of the language parameter */
  public static final String LANGUAGE_PARAM = "language";

  /** Identifier of the included pagelet */
  public static final String PAGELET_ID = "include";

  /** Parameter name of code template */
  public static final String CODE_TEMPLATE = "code-template";

  /** The greetings */
  protected String greeting = null;

  /** The greeting's language */
  protected String language = null;

  /** How this action is being called */
  protected Method currentMethod = null;

  /**
   * Creates a new greeter action with explicit support for <code>GET</code> and
   * <code>OPTIONS</code> requests.
   */
  public GreeterHTMLAction() {
    enableMethods("GET", "OPTIONS");
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.impl.site.HTMLActionSupport#configure(ch.entwine.weblounge.common.request.WebloungeRequest,
   *      ch.entwine.weblounge.common.request.WebloungeResponse,
   *      ch.entwine.weblounge.common.request.RequestFlavor)
   */
  @Override
  public void configure(WebloungeRequest request, WebloungeResponse response,
      RequestFlavor flavor) throws ActionException {
    super.configure(request, response, flavor);

    // Load the greetings
    Map<String, String> allGreetings = TestSiteUtils.loadGreetings();
    try {
      language = getLanguage(request);
      greeting = allGreetings.get(language);
    } catch (IllegalStateException e) {
      throw new ActionException("Language parameter '" + LANGUAGE_PARAM + "' was not specified");
    }

    // Load the template
    String codeTemplate = StringUtils.trimToNull(request.getParameter(CODE_TEMPLATE));
    if (codeTemplate != null) {
      PageTemplate t = site.getTemplate(codeTemplate);
      if (t == null) {
        logger.warn("Template '{}' does not exist", codeTemplate);
      } else {
        logger.info("Setting template to '{}'", codeTemplate);
        setTemplate(t);
      }
    }
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.impl.site.HTMLActionSupport#startResponse(ch.entwine.weblounge.common.request.WebloungeRequest,
   *      ch.entwine.weblounge.common.request.WebloungeResponse)
   */
  @Override
  public int startResponse(WebloungeRequest request, WebloungeResponse response)
      throws ActionException {
    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
      response.setHeader("Allow", "OPTIONS,GET");
      response.setHeader("Location", getUrl().getLink());
      return SKIP_REQUEST;
    }
    return super.startResponse(request, response);
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.impl.site.HTMLActionSupport#startStage(ch.entwine.weblounge.common.request.WebloungeRequest,
   *      ch.entwine.weblounge.common.request.WebloungeResponse,
   *      ch.entwine.weblounge.common.content.page.Composer)
   */
  @Override
  public int startStage(WebloungeRequest request, WebloungeResponse response,
      Composer composer) throws ActionException {
    try {
      String htmlGreeting = StringEscapeUtils.escapeHtml(greeting);
      IOUtils.write("<h1>" + htmlGreeting + "</h1>", response.getWriter());

      // Include another pagelet
      include(request, response, PAGELET_ID, null);
      return HTMLAction.SKIP_COMPOSER;
    } catch (IOException e) {
      throw new ActionException("Unable to send json response", e);
    }
  }

  /**
   * Returns the language, which is either taken from the request parameter
   * <code>language</code> or from the language sent by the client browser. The
   * final fallback is <code>English</code>.
   *
   * @param request
   *          the request
   * @return the language name
   */
  protected String getLanguage(WebloungeRequest request) {
    String language = RequestUtils.getParameter(request, LANGUAGE_PARAM);
    if (language == null) {
      Language en = LanguageUtils.getLanguage("en");
      language = request.getLanguage().getDescription(en).toLowerCase();
      if (language == null) {
        language = "english";
      }
    }
    return language;
  }

  /**
   * {@inheritDoc}
   *
   * @see ch.entwine.weblounge.common.impl.site.HTMLActionSupport#passivate()
   */
  @Override
  public void passivate() {
    greeting = null;
    language = null;
    currentMethod = null;
    super.passivate();
  }

}
TOP

Related Classes of ch.entwine.weblounge.test.site.GreeterHTMLAction

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.