/* * $Id: IWUrlRedirector.java,v 1.9 2005/02/10 10:42:47 thomas Exp $ * Created on 30.12.2004 * * Copyright (C) 2004 Idega Software hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package com.idega.servlet.filter; import java.io.IOException; import java.rmi.RemoteException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.idega.core.builder.business.BuilderService; import com.idega.core.builder.business.BuilderServiceFactory; import com.idega.idegaweb.IWMainApplication; /** * Filter that detects incoming urls and redirects to another url. <br> * Now used for mapping old idegaWeb urls to the new appropriate ones.<br><br> * * Last modified: $Date: 2005/02/10 10:42:47 $ by $Author: thomas $ * * @author <a href="mailto:tryggvil@idega.com">tryggvil</a> * @version $Revision: 1.9 $ */ public class IWUrlRedirector extends BaseFilter implements Filter { public void init(FilterConfig arg0) throws ServletException { } public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)srequest; HttpServletResponse response = (HttpServletResponse)sresponse; setApplicationServletContextPath(request); boolean doRedirect = getIfDoRedirect(request); if(doRedirect){ String newUrl = getNewRedirectURL(request); response.sendRedirect(newUrl); } else{ chain.doFilter(srequest,sresponse); } } /** * @param request * @return */ String getNewRedirectURL(HttpServletRequest request) { //TODO: Make this logic support regular expressions String requestUri = getURIMinusContextPath(request); if(getIWMainApplication(request).isInSetupMode()){ return getSetupUri(request); } else if(requestUri.startsWith(OLD_BUILDER_SERVLET_URI) || requestUri.equals(OLD_BUILDER_INDEX_JSP_URI)){ String pageId = request.getParameter(OLD_BUILDER_PAGE_PARAMETER); IWMainApplication iwma = getIWMainApplication(request); BuilderService bs; try { bs = BuilderServiceFactory.getBuilderService(iwma.getIWApplicationContext()); if(pageId==null){ pageId=bs.getRootPageKey(); } return bs.getPageURI(pageId); } catch (RemoteException e) { e.printStackTrace(); } } else if(requestUri.startsWith(OLD_IDEGAWEB_LOGIN)){ if(requestUri.equals(OLD_IDEGAWEB_LOGIN) || requestUri.equals(OLD_IDEGAWEB_LOGIN_WITHSLASH)){ return getNewLoginUri(request); } } else if(requestUri.equals(NEW_IDEGAWEB_LOGIN_MINUSSLASH)){ return getNewLoginUri(request); } throw new RuntimeException("Error handling redirect Url"); } /** * @param request * @return */ boolean getIfDoRedirect(HttpServletRequest request) { if(IWMainApplication.useNewURLScheme){ String requestUri = getURIMinusContextPath(request); String oldIdegaWebUriWithSlash = OLD_IDEGAWEB_LOGIN_WITHSLASH; if(getIWMainApplication(request).isInSetupMode()){ String fullRequestUri = request.getRequestURI(); //this is a small hack to make the bundles load: getIWMainApplication(request).registerBundle("com.idega.core",false); getIWMainApplication(request).registerBundle("com.idega.faces",false); getIWMainApplication(request).registerBundle("com.idega.webface",false); getIWMainApplication(request).registerBundle("com.idega.setup",false); if(!fullRequestUri.equals(getSetupUri(request))){ return true; } } if(requestUri.startsWith(OLD_BUILDER_SERVLET_URI)){ return true; } else if(requestUri.equals(OLD_BUILDER_INDEX_JSP_URI)){ return true; } else if(requestUri.equals(oldIdegaWebUriWithSlash)){ return true; } else if(requestUri.equals(OLD_IDEGAWEB_LOGIN)){ return true; } else if(requestUri.equals(NEW_IDEGAWEB_LOGIN_MINUSSLASH)){ return true; } } return false; } public void destroy() { // TODO Auto-generated method stub } }