[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:
http://wiki.apache.org/jakarta-tapestry/ShortcutUrls

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()) {
      ipage.register(this);
    }    
  }  
 
  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;
        }
       
        hresponse.sendRedirect(newURL);
        return;
      }
    }

    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]