Package org.zkoss.zest.sys

Source Code of org.zkoss.zest.sys.ZestFilter

/* ZestFilter.java

  Purpose:
   
  Description:
   
  History:
    Thu Mar  3 09:52:16 TST 2011, Created by tomyeh

Copyright (C) 2011 Potix Corporation. All Rights Reserved.

*/
package org.zkoss.zest.sys;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterChain;
import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.zkoss.lang.Classes;
import org.zkoss.util.logging.Log;

import org.zkoss.zest.sys.Parser;
import org.zkoss.zest.sys.impl.ParserImpl;

/**
* The ZEST filter to match URL, instantiate actions, invoke actions and
* forward to a view.
*
* <p>It provides better ecapsulation. This filter is actually a thin layer
* on top of ZestManager.
*
* @author tomyeh
*/
public class ZestFilter implements Filter {
  private static final Log log = Log.lookup(ZestManager.class);

  private ZestManager _manager;

  @Override
  public void doFilter(ServletRequest request, ServletResponse response,
  FilterChain chain) throws IOException, ServletException {
    if (!(request instanceof HttpServletRequest)
    || !_manager.action((HttpServletRequest)request, (HttpServletResponse)response))
      chain.doFilter(request, response);
  }
  @Override
  public void destroy() {
    _manager.destroy();
    _manager = null;
  }
  @Override
  public final void init(FilterConfig config) throws ServletException {
    final ServletContext ctx = config.getServletContext();
    final ZestManager oldManager = ZestManager.getManager(ctx);

    //prepare parser
    final Parser parser;
    String clsnm = config.getInitParameter("parser-class");
    parser = clsnm != null ?
      (Parser)newInstance(clsnm, Parser.class): new ParserImpl();

    //prepare manager
    clsnm = config.getInitParameter("manager-class");
    _manager = clsnm != null ?
      (ZestManager)newInstance(clsnm, ZestManager.class): new ZestManager();
    _manager.init(ctx, parser);

    if (oldManager != null)
      log.warning(oldManager+" is replaced"+_manager);
  }
  private static Object newInstance(String clsnm, Class klass) throws ServletException {
    final Object o;
    try {
      o = Classes.newInstanceByThread(clsnm);
    } catch (Throwable t) {
      throw new ServletException("Unable to instantiate "+clsnm, t);
    }
    if (!klass.isInstance(o))
      throw new ServletException(o+" not an instance of "+klass);
    return o;
  }
}
TOP

Related Classes of org.zkoss.zest.sys.ZestFilter

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.