[jboss-cvs] jboss-seam/src/ui/org/jboss/seam/ui/facelet ...

Peter Muir peter at bleepbleep.org.uk
Thu Mar 22 11:20:07 EDT 2007


  User: pmuir   
  Date: 07/03/22 11:20:07

  Modified:    src/ui/org/jboss/seam/ui/facelet  FaceletsRenderer.java
  Log:
  Tidy up and JBSEAM-1093
  
  Revision  Changes    Path
  1.12      +119 -82   jboss-seam/src/ui/org/jboss/seam/ui/facelet/FaceletsRenderer.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: FaceletsRenderer.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/ui/org/jboss/seam/ui/facelet/FaceletsRenderer.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -b -r1.11 -r1.12
  --- FaceletsRenderer.java	2 Mar 2007 15:05:08 -0000	1.11
  +++ FaceletsRenderer.java	22 Mar 2007 15:20:07 -0000	1.12
  @@ -2,7 +2,6 @@
   
   import java.io.IOException;
   import java.io.StringWriter;
  -import java.io.Writer;
   import java.net.URL;
   
   import javax.faces.component.UIViewRoot;
  @@ -29,41 +28,89 @@
   @Scope(ScopeType.STATELESS)
   @Intercept(InterceptionType.NEVER)
   @Name("org.jboss.seam.core.renderer")
  - at Install(value=true,precedence=Install.BUILT_IN,
  -        classDependencies={"com.sun.facelets.Facelet"})
  + at Install(value = true, precedence = Install.BUILT_IN, classDependencies = { "com.sun.facelets.Facelet" })
   public class FaceletsRenderer extends Renderer
   {
   
  -    @Override
  -    public String render(String viewId) 
  +   private class Context 
       {
          
  -       // JBSEAM-950
  -       ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  +      public Context(String viewId)
  +      {
  +         this.viewId = viewId;
  +      }
  +      
  +      private String viewId;
          
  +      private ClassLoader originalClassLoader;
  +      private ResponseWriter originalResponseWriter;
  +      private UIViewRoot originalViewRoot;
  +      private StringWriter writer = new StringWriter();
  +      
  +      public Context wrap() 
  +      {
  +         // Make sure we are using the correct ClassLoader
  +         originalClassLoader = Thread.currentThread().getContextClassLoader();
         Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
          
  +         // If a FacesContext isn't available, set one up
          if (FacesContext.getCurrentInstance() == null) 
          {
  -             MockFacesContext mockFacesContext = new MockFacesContext(new MockExternalContext()).setCurrent();
  +            MockFacesContext mockFacesContext = new MockFacesContext(new MockExternalContext())
  +                     .setCurrent();
                mockFacesContext.createViewRoot();
          }
  +         
           FacesContext facesContext = FacesContext.getCurrentInstance();
   
  -        ResponseWriter originalWriter = facesContext.getResponseWriter();
  +         // Wrap the ResponseWriter
  +         originalResponseWriter = facesContext.getResponseWriter();
  +         facesContext.setResponseWriter(facesContext.getRenderKit().createResponseWriter(writer,
  +                  null, null));
  +         
  +         // Create a new UIViewRoot
  +         originalViewRoot = facesContext.getViewRoot();
  +         UIViewRoot viewRoot = new UIViewRoot();
  +         viewRoot.setRenderKitId(facesContext.getApplication().getViewHandler().calculateRenderKitId(facesContext));
  +         viewRoot.setViewId(viewId);
  +         viewRoot.setLocale(originalViewRoot.getLocale());
  +         facesContext.setViewRoot(viewRoot);
  +         return this;
  +      }
  +      
  +      public void unwrap() 
  +      {
  +         FacesContext facesContext = FacesContext.getCurrentInstance();
  +         if (originalResponseWriter != null)
  +         {
  +            facesContext.setResponseWriter(originalResponseWriter);
  +         }
  +         if (originalViewRoot != null)
  +         {
  +            facesContext.setViewRoot(originalViewRoot);
  +         }
  +         Thread.currentThread().setContextClassLoader(originalClassLoader);
           
  +      }
   
  +      public String getWrittenOutput() 
  +      {
  +         return writer.getBuffer().toString(); 
  +      }
           
  +   }
           
   
  +   @Override
  +   public String render(String viewId)
  +   {
  +      Context context = new Context(viewId);
           try 
           {
  -            StringWriter stringWriter = new StringWriter();
  -            wrapResponseWriter(facesContext, stringWriter);
  -
  +         context.wrap();
  +         FacesContext facesContext = FacesContext.getCurrentInstance();
               renderFacelet(facesContext, faceletForURL(resourceURL(viewId)));
  -
  -            return stringWriter.getBuffer().toString();
  +         return context.getWrittenOutput();
           } 
           catch (IOException e) 
           {
  @@ -71,14 +118,9 @@
           } 
           finally 
           {
  -            if (originalWriter != null) 
  -            {
  -                facesContext.setResponseWriter(originalWriter);
  +         context.unwrap();
               }
  -            Thread.currentThread().setContextClassLoader(classLoader);
           }
  -    }
  -
   
       protected URL resourceURL(String viewId) 
       {
  @@ -93,28 +135,23 @@
           return url;
      }
   
  -    protected Facelet faceletForURL(URL url) 
  -        throws IOException
  +   protected Facelet faceletForURL(URL url) throws IOException
       {
  -        return new DefaultFaceletFactory(new SAXCompiler(), 
  -                                         new DefaultResourceResolver()).getFacelet(url);
  +      return new DefaultFaceletFactory(new SAXCompiler(), new DefaultResourceResolver())
  +               .getFacelet(url);
       }
   
   
  -    protected void wrapResponseWriter(FacesContext facesContext, Writer writer) 
  -    {
  -        ResponseWriter responseWriter = 
  -            facesContext.getRenderKit().createResponseWriter(writer, null, null);
  -
  -        facesContext.setResponseWriter(responseWriter);
  -    }
   
  -    protected void renderFacelet(FacesContext facesContext, Facelet facelet) 
  -        throws IOException
  +   protected void renderFacelet(FacesContext facesContext, Facelet facelet) throws IOException
       {
           UIViewRoot root = facesContext.getViewRoot();
           facelet.apply(facesContext, root);
           JSF.renderChildren(facesContext, root);
       }
   
  +   
  +
  +   
  +   
   }
  
  
  



More information about the jboss-cvs-commits mailing list