Coverage Report - org.apache.maven.plugins.site.webapp.DoxiaFilter
 
Classes in this File Line Coverage Branch Coverage Complexity
DoxiaFilter
0%
0/60
0%
0/26
7,667
 
 1  
 package org.apache.maven.plugins.site.webapp;
 2  
 
 3  
 /*
 4  
  * Licensed to the Apache Software Foundation (ASF) under one
 5  
  * or more contributor license agreements.  See the NOTICE file
 6  
  * distributed with this work for additional information
 7  
  * regarding copyright ownership.  The ASF licenses this file
 8  
  * to you under the Apache License, Version 2.0 (the
 9  
  * "License"); you may not use this file except in compliance
 10  
  * with the License.  You may obtain a copy of the License at
 11  
  *
 12  
  *   http://www.apache.org/licenses/LICENSE-2.0
 13  
  *
 14  
  * Unless required by applicable law or agreed to in writing,
 15  
  * software distributed under the License is distributed on an
 16  
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 17  
  * KIND, either express or implied.  See the License for the
 18  
  * specific language governing permissions and limitations
 19  
  * under the License.
 20  
  */
 21  
 
 22  
 import org.apache.maven.doxia.siterenderer.DocumentRenderer;
 23  
 import org.apache.maven.doxia.siterenderer.Renderer;
 24  
 import org.apache.maven.doxia.siterenderer.RendererException;
 25  
 import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
 26  
 import org.apache.maven.plugins.site.ReportDocumentRenderer;
 27  
 
 28  
 import javax.servlet.Filter;
 29  
 import javax.servlet.FilterChain;
 30  
 import javax.servlet.FilterConfig;
 31  
 import javax.servlet.ServletContext;
 32  
 import javax.servlet.ServletException;
 33  
 import javax.servlet.ServletRequest;
 34  
 import javax.servlet.ServletResponse;
 35  
 import javax.servlet.http.HttpServletRequest;
 36  
 import java.io.File;
 37  
 import java.io.IOException;
 38  
 import java.util.ArrayList;
 39  
 import java.util.Iterator;
 40  
 import java.util.List;
 41  
 import java.util.Locale;
 42  
 import java.util.Map;
 43  
 
 44  
 /**
 45  
  * Render a page as requested.
 46  
  *
 47  
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
 48  
  */
 49  0
 public class DoxiaFilter
 50  
     implements Filter
 51  
 {
 52  
     public static final String SITE_RENDERER_KEY = "siteRenderer";
 53  
 
 54  
     public static final String I18N_DOXIA_CONTEXTS_KEY = "i18nDoxiaContexts";
 55  
 
 56  
     public static final String LOCALES_LIST_KEY = "localesList";
 57  
 
 58  
     private Renderer siteRenderer;
 59  
 
 60  
     private Map i18nDoxiaContexts;
 61  
 
 62  
     private List localesList;
 63  
 
 64  
     /**
 65  
      * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
 66  
      */
 67  
     public void init( FilterConfig filterConfig )
 68  
         throws ServletException
 69  
     {
 70  0
         ServletContext servletContext = filterConfig.getServletContext();
 71  
 
 72  0
         siteRenderer = (Renderer) servletContext.getAttribute( SITE_RENDERER_KEY );
 73  
 
 74  0
         i18nDoxiaContexts = (Map) servletContext.getAttribute( I18N_DOXIA_CONTEXTS_KEY );
 75  
 
 76  0
         localesList = (List) servletContext.getAttribute( LOCALES_LIST_KEY );
 77  0
     }
 78  
 
 79  
     /**
 80  
      * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
 81  
      */
 82  
     public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain )
 83  
         throws IOException, ServletException
 84  
     {
 85  0
         HttpServletRequest req = (HttpServletRequest) servletRequest;
 86  
 
 87  
         // ----------------------------------------------------------------------
 88  
         // Handle the servlet path
 89  
         // ----------------------------------------------------------------------
 90  0
         String path = req.getServletPath();
 91  
         // welcome file
 92  0
         if ( path.endsWith( "/" ) )
 93  
         {
 94  0
             path += "index.html";
 95  
         }
 96  
 
 97  
         // Remove the /
 98  0
         path = path.substring( 1 );
 99  
 
 100  
         // Handle locale request
 101  
         SiteRenderingContext context;
 102  
         Map documents;
 103  
         File generatedSiteDirectory;
 104  
 
 105  0
         String localeWanted = null;
 106  0
         for ( Iterator it = localesList.iterator(); it.hasNext(); )
 107  
         {
 108  0
             Locale locale = (Locale) it.next();
 109  
 
 110  0
             if ( path.startsWith( locale.getLanguage() + "/" ) )
 111  
             {
 112  0
                 localeWanted = locale.toString();
 113  0
                 path = path.substring( locale.getLanguage().length() + 1 );
 114  
             }
 115  
         }
 116  
 
 117  0
         if ( localeWanted == null )
 118  
         {
 119  0
             DoxiaBean defaultDoxiaBean = (DoxiaBean) i18nDoxiaContexts.get( "default" );
 120  0
             if ( defaultDoxiaBean == null )
 121  
             {
 122  0
                 throw new ServletException( "No doxia bean found for the default locale" );
 123  
             }
 124  0
             context = defaultDoxiaBean.getContext();
 125  0
             documents = defaultDoxiaBean.getDocuments();
 126  0
             generatedSiteDirectory = defaultDoxiaBean.getGeneratedSiteDirectory();
 127  
         }
 128  
         else
 129  
         {
 130  0
             DoxiaBean i18nDoxiaBean = (DoxiaBean) i18nDoxiaContexts.get( localeWanted );
 131  0
             if ( i18nDoxiaBean == null )
 132  
             {
 133  0
                 throw new ServletException( "No doxia bean found for the locale " + localeWanted );
 134  
             }
 135  0
             context = i18nDoxiaBean.getContext();
 136  0
             documents = i18nDoxiaBean.getDocuments();
 137  0
             generatedSiteDirectory = i18nDoxiaBean.getGeneratedSiteDirectory();
 138  
         }
 139  
 
 140  
         // ----------------------------------------------------------------------
 141  
         // Handle report and documents
 142  
         // ----------------------------------------------------------------------
 143  0
         if ( documents.containsKey( path ) )
 144  
         {
 145  
             try
 146  
             {
 147  0
                 DocumentRenderer renderer = (DocumentRenderer) documents.get( path );
 148  0
                 renderer.renderDocument( servletResponse.getWriter(), siteRenderer, context );
 149  
 
 150  0
                 if ( renderer instanceof ReportDocumentRenderer )
 151  
                 {
 152  0
                     ReportDocumentRenderer reportDocumentRenderer = (ReportDocumentRenderer) renderer;
 153  0
                     if ( reportDocumentRenderer.isExternalReport() )
 154  
                     {
 155  
                         try
 156  
                         {
 157  0
                             filterChain.doFilter( servletRequest, servletResponse );
 158  
                         }
 159  0
                         catch ( Exception e )
 160  
                         {
 161  0
                             throw new ServletException( e );
 162  0
                         }
 163  
                     }
 164  
                 }
 165  
             }
 166  0
             catch ( RendererException e )
 167  
             {
 168  0
                 throw new ServletException( e );
 169  0
             }
 170  
         }
 171  0
         else if ( generatedSiteDirectory != null && generatedSiteDirectory.exists() )
 172  
         {
 173  0
             context.getSiteDirectories().clear();
 174  0
             context.addSiteDirectory( generatedSiteDirectory );
 175  
             try
 176  
             {
 177  0
                 Map locateDocuments = siteRenderer.locateDocumentFiles( context );
 178  
 
 179  0
                 if ( locateDocuments.containsKey( path ) )
 180  
                 {
 181  0
                     DocumentRenderer renderer = (DocumentRenderer) locateDocuments.get( path );
 182  0
                     renderer.renderDocument( servletResponse.getWriter(), siteRenderer, context );
 183  
                 }
 184  
             }
 185  0
             catch ( RendererException e )
 186  
             {
 187  0
                 throw new ServletException( e );
 188  0
             }
 189  
 
 190  0
             List originalSiteDirectories = new ArrayList( context.getSiteDirectories() );
 191  0
             for ( Iterator i = originalSiteDirectories.iterator(); i.hasNext(); )
 192  
             {
 193  0
                 File dir = (File) i.next();
 194  0
                 context.addSiteDirectory( dir );
 195  
             }
 196  
         }
 197  
         else
 198  
         {
 199  0
             filterChain.doFilter( servletRequest, servletResponse );
 200  
         }
 201  0
     }
 202  
 
 203  
     /**
 204  
      * @see javax.servlet.Filter#destroy()
 205  
      */
 206  
     public void destroy()
 207  
     {
 208  0
     }
 209  
 }