Package ch.entwine.weblounge.common.impl.site

Source Code of ch.entwine.weblounge.common.impl.site.ActionPoolFactory

/*
*  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.common.impl.site;

import ch.entwine.weblounge.common.content.ResourceURI;
import ch.entwine.weblounge.common.content.page.HTMLHeadElement;
import ch.entwine.weblounge.common.impl.content.page.PageURIImpl;
import ch.entwine.weblounge.common.site.Action;
import ch.entwine.weblounge.common.site.Environment;
import ch.entwine.weblounge.common.site.HTMLAction;

import org.apache.commons.pool.BasePoolableObjectFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;

/**
* The action pool factory will create action objects according to the action
* configuration that is passed in at construction time.
*/
public final class ActionPoolFactory extends BasePoolableObjectFactory<Action> {

  /** Logging facility */
  private static final Logger logger = LoggerFactory.getLogger(ActionPoolFactory.class);

  /** The action blueprint */
  protected Action blueprint = null;
 
  /**
   * Creates a new action pool factory that will create action objects for the
   * given site according to the configuration.
   *
   * @param sample
   *          the action configuration
   */
  public ActionPoolFactory(Action sample) {
    this.blueprint = sample;
  }

  /**
   * {@inheritDoc}
   *
   * @see org.apache.commons.pool.BasePoolableObjectFactory#makeObject()
   */
  @Override
  public Action makeObject() throws Exception {
    logger.debug("Creating new action '{}'", blueprint.getIdentifier());
   
    Action action = blueprint.getClass().newInstance();
   
    // Module
    action.setModule(blueprint.getModule());
   
    // Site
    action.setSite(blueprint.getSite());

    // Identifier
    action.setIdentifier(blueprint.getIdentifier());

    // Path
    action.setPath(blueprint.getPath());

    // Includes
    for (HTMLHeadElement header : blueprint.getHTMLHeaders()) {
      action.addHTMLHeader(header);
    }

    // Options
    for (Map.Entry<String, Map<Environment, List<String>>> option : blueprint.getOptions().entrySet()) {
      for (Environment environment : option.getValue().keySet()) {
        List<String> values = option.getValue().get(environment);
        for (String value : values) {
          action.setOption(option.getKey(), value, environment);
        }
      }
    }
   
    // Recheck time
    action.setClientRevalidationTime(blueprint.getClientRevalidationTime());

    // Valid time
    action.setCacheExpirationTime(blueprint.getCacheExpirationTime());

    // Are we looking at an html action?
    if (blueprint instanceof HTMLAction) {
      HTMLAction htmlBlueprint = (HTMLAction)blueprint;
      HTMLAction htmlAction = (HTMLAction)action;

      // Page URI
      if (htmlBlueprint.getPageURI() != null) {
        ResourceURI uri = htmlBlueprint.getPageURI();
        htmlAction.setPageURI(new PageURIImpl(uri.getSite(), uri.getPath()));
      }

      // Default page template
      htmlAction.setDefaultTemplate(htmlBlueprint.getDefaultTemplate());
    }
   
    // Name
    action.setName(blueprint.getName());

    return action;
  }

  /**
   * {@inheritDoc}
   *
   * @see org.apache.commons.pool.BasePoolableObjectFactory#destroyObject(java.lang.Object)
   */
  @Override
  public void destroyObject(Action action) throws Exception {
    logger.debug("Destroying action '{}'", action.getIdentifier());
    try {
      action.passivate();
    } catch (Throwable t) {
      logger.error("Error destroying action: {}", t.getMessage(), t);
    }
    super.destroyObject(action);
  }

  /**
   * {@inheritDoc}
   *
   * @see org.apache.commons.pool.BasePoolableObjectFactory#activateObject(java.lang.Object)
   */
  @Override
  public void activateObject(Action action) throws Exception {
    logger.debug("Activating action '{}'", action.getIdentifier());
    try {
      action.activate();
    } catch (Throwable t) {
      logger.error("Error destroying action: {}", t.getMessage(), t);
    }
    super.activateObject(action);
  }

  /**
   * {@inheritDoc}
   *
   * @see org.apache.commons.pool.BasePoolableObjectFactory#passivateObject(java.lang.Object)
   */
  @Override
  public void passivateObject(Action action) throws Exception {
    logger.debug("Passivating action '{}'", action.getIdentifier());
    try {
      action.passivate();
    } catch (Throwable t) {
      logger.error("Error destroying action: {}", t.getMessage(), t);
    }
    super.passivateObject(action);
  }
 
  /**
   * {@inheritDoc}
   *
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
    return "action pool factory [" + blueprint + "]";
  }

}
TOP

Related Classes of ch.entwine.weblounge.common.impl.site.ActionPoolFactory

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.