[Jakarta-tapestry Wiki] Update of "ShortcutUrls" by HenriDupre

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[Jakarta-tapestry Wiki] Update of "ShortcutUrls" by HenriDupre

Apache Wiki
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jakarta-tapestry Wiki" for change notification.

The following page has been changed by HenriDupre:

New page:
This is a code for a Servlet Filter that allows to create shortcuts to Tapestry urls.
It is an alternative to urlrewrite. I wrote this code because I'm coding most parameters using the datasqueezer and my shortcuts needs to do more processing than urlrewrite (also I'm allergic to regular expressions).

public class ServletFilter implements Filter {

  private FilterConfig m_config;
  public void init(FilterConfig config) throws ServletException {
    m_config = config;
    for (UrlPage ipage:UrlPage.values()) {
  private DataSqueezer m_datasqueezer;

  public DataSqueezer getDataSqueezer() {
    if (m_datasqueezer == null)
      m_datasqueezer = new DataSqueezer(null);  
    return m_datasqueezer;    
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    final HttpServletRequest hrequest = (HttpServletRequest) request;
    final HttpServletResponse hresponse = (HttpServletResponse) response;

    String servletPath = hrequest.getServletPath();

    String compString = servletPath.toUpperCase();
    for (UrlPage ipage:UrlPage.values()) {
      String cString = '/' + ipage.getName();
      if (compString.startsWith(cString.toUpperCase())) {
        ExternalPageInfos infos = ipage.getPageInfos(hrequest);
        String newURL = hrequest.getContextPath() + "/exec?service=external/" + infos.pageName;
        for (String par:infos.parameters) {
          newURL = newURL + "&" + "sp=" + par;

    chain.doFilter(request, response);    

  public void destroy() {

And here is my enum that contains all the shortcut infos. It creates shortcuts to two Tapestry pages, FicheArticle and Partenaires. The first one is a shortcut article?ref=xxx and calls FicheArticle. It passes the ref and a 0 as integer to the external page. The second is a shortcut partenaire?part=xxx and calls a page "Partenaires". The getSqueezeInfo method creates a hibernate object reference for the datasqueezer that can then be loaded (using the code I posted on the Hibernate/Spring/Tapestry integration).

import java.io.Serializable;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;

import org.hibernate.Hibernate;

public enum UrlPage {

  Article("article") {
    public ExternalPageInfos getPageInfos(HttpServletRequest request) throws IOException {
      ExternalPageInfos infos = new ExternalPageInfos();
      infos.pageName = "FicheArticle";
      String idArt = getSqueezeInfo(Article.class, request.getParameter("ref"));
      infos.parameters = new String[] { idArt, squeeze(0) };
      return infos;
  Partenaires("partenaires") {
    public ExternalPageInfos getPageInfos(HttpServletRequest request) {
      ExternalPageInfos infos = new ExternalPageInfos();
      infos.pageName = "Partenaires";
      String id_part = request.getParameter("part");
      infos.parameters = new String[] { id_part };
      return infos;

  private String m_urlname;

  private static ServletFilter s_filter;

  private static String squeeze(Object obj) throws IOException {
    return s_filter.getDataSqueezer().squeeze(obj);

  private static String getSqueezeInfo(Class clazz, Object id) throws IOException {
    String info = clazz.getName();
    info = info.concat(ActualisEngine.HIB_SEPARATOR);
    info = info.concat(s_filter.getDataSqueezer().squeeze(id));
    return ActualisEngine.HIB_PREFIX + info;

  UrlPage(String name) {
    m_urlname = name;

  public String getName() {
    return m_urlname;

  public abstract ExternalPageInfos getPageInfos(HttpServletRequest request)
      throws IOException;

  public void register(ServletFilter filter) {
    s_filter = filter;

And the last class
public class ExternalPageInfos {

  String pageName;
  String[] parameters;

To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]