[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...

Gavin King gavin.king at jboss.com
Wed Nov 8 14:54:52 EST 2006


  User: gavin   
  Date: 06/11/08 14:54:52

  Modified:    src/main/org/jboss/seam/core   Exceptions.java Pages.java
  Log:
  fine-grained pages.xml JBSEAM-476
  
  Revision  Changes    Path
  1.8       +26 -3     jboss-seam/src/main/org/jboss/seam/core/Exceptions.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Exceptions.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Exceptions.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -b -r1.7 -r1.8
  --- Exceptions.java	3 Nov 2006 22:47:24 -0000	1.7
  +++ Exceptions.java	8 Nov 2006 19:54:52 -0000	1.8
  @@ -169,7 +169,7 @@
         Element error = exception.element("http-error");
         if (error!=null)
         {
  -         final int code = Integer.parseInt( error.attributeValue("view-id") );
  +         final int code = Integer.parseInt( error.attributeValue("code") );
            final String message = error.getTextTrim();
            return new ErrorHandler()
            {
  @@ -235,6 +235,12 @@
         {
            return e.getClass().getAnnotation(Redirect.class).end();
         } 
  +
  +      @Override
  +      public String toString()
  +      {
  +         return "RedirectHandler";
  +      }
      }
      
      public static class RenderHandler implements ExceptionHandler
  @@ -267,6 +273,12 @@
         {
            return e.getClass().getAnnotation(Render.class).end();
         }
  +
  +      @Override
  +      public String toString()
  +      {
  +         return "RenderHandler";
  +      }
      }
      
      public static class ErrorHandler implements ExceptionHandler
  @@ -275,7 +287,7 @@
         {
            if ( isEnd(e) ) Conversation.instance().end();
            String message = getMessage(e);
  -         addFacesMessage(e, message);
  +         //addFacesMessage(e, message);
            error( getCode(e), Interpolator.instance().interpolate( getDisplayMessage(e, message) ) );
            return rethrow(e);
         }  
  @@ -299,6 +311,12 @@
         {
            return e.getClass().getAnnotation(HttpError.class).end();
         }      
  +      
  +      @Override
  +      public String toString()
  +      {
  +         return "ErrorHandler";
  +      }
      }
      
      public static class DebugPageHandler implements ExceptionHandler
  @@ -323,6 +341,11 @@
            return Lifecycle.getPhaseId()!=PhaseId.RENDER_RESPONSE;
         }
         
  +      @Override
  +      public String toString()
  +      {
  +         return "Debug";
  +      }
      }
      
      protected static String getDisplayMessage(Exception e, String message)
  
  
  
  1.43      +146 -87   jboss-seam/src/main/org/jboss/seam/core/Pages.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Pages.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Pages.java,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -b -r1.42 -r1.43
  --- Pages.java	8 Nov 2006 06:48:37 -0000	1.42
  +++ Pages.java	8 Nov 2006 19:54:52 -0000	1.43
  @@ -49,7 +49,7 @@
      
      private static final Log log = LogFactory.getLog(Pages.class);
      
  -   private Map<String, Page> pagesByViewId = new HashMap<String, Page>();   
  +   private Map<String, Page> pagesByViewId = Collections.synchronizedMap( new HashMap<String, Page>() );   
      private String noConversationViewId;
      
      private SortedSet<String> wildcardViewIds = new TreeSet<String>( 
  @@ -64,7 +64,7 @@
         );
      
      @Create
  -   public void initialize() throws DocumentException
  +   public void initialize()
      {
         InputStream stream = Resources.getResourceAsStream("/WEB-INF/pages.xml");      
         if (stream==null)
  @@ -74,19 +74,48 @@
         else
         {
            log.info("reading pages.xml");
  -         SAXReader saxReader = new SAXReader();
  -         saxReader.setMergeAdjacentText(true);
  -         Document doc = saxReader.read(stream);
  +         parse(stream);
  +      }
  +   }
            
  +   private void parse(InputStream stream)
  +   {
  +      Element root = getDocumentRoot(stream);
            if (noConversationViewId==null) //let the setting in components.xml override the pages.xml
            {
  -            noConversationViewId = doc.getRootElement().attributeValue("no-conversation-view-id");
  +         noConversationViewId = root.attributeValue("no-conversation-view-id");
            }
  -         
  -         List<Element> elements = doc.getRootElement().elements("page");
  +      List<Element> elements = root.elements("page");
            for (Element page: elements)
            {
  -            String viewId = page.attributeValue("view-id");
  +         parse( page, page.attributeValue("view-id") );
  +      } 
  +   }
  +
  +   private void parse(InputStream stream, String viewId)
  +   {
  +      parse( getDocumentRoot(stream), viewId );
  +   }
  +
  +   private Element getDocumentRoot(InputStream stream)
  +   {
  +      Document doc;
  +      SAXReader saxReader = new SAXReader();
  +      saxReader.setMergeAdjacentText(true);
  +      try
  +      {
  +         doc = saxReader.read(stream);
  +      }
  +      catch (DocumentException de)
  +      {
  +         throw new RuntimeException(de);
  +      }
  +      Element root = doc.getRootElement();
  +      return root;
  +   }
  +
  +   private void parse(Element page, String viewId)
  +   {
               if ( viewId.endsWith("*") )
               {
                  wildcardViewIds.add(viewId);
  @@ -155,28 +184,58 @@
                  entry.getPageParameters().add(pageParameter);
               }
            }
  +   
  +   public Page getPage(String viewId)
  +   {
  +      if (viewId==null)
  +      {
  +         return null;
  +      }
  +      else
  +      {
  +         Page result = getCachedPage(viewId);
  +         if (result==null)
  +         {
  +            return createPage(viewId);
  +         }
  +         else
  +         {
  +            return result;
  +         }
         }
      }
      
  -   public Page getPage(String viewId)
  +   private Page createPage(String viewId)
      {
  -      Page result = null;
  -      if (viewId!=null)
  +      InputStream stream = Resources.getResourceAsStream( replaceExtension(viewId, ".page.xml").substring(1) );
  +      if ( stream==null ) 
  +      {
  +         Page result = new Page(viewId);
  +         pagesByViewId.put(viewId, result);
  +         return result;
  +      }
  +      else
         {
  -         result = pagesByViewId.get(viewId);
  +         parse(stream, viewId);
  +         return getCachedPage(viewId);
  +      }
  +   }
  +
  +   private Page getCachedPage(String viewId)
  +   {
  +      Page result = pagesByViewId.get(viewId);
            if (result==null)
            {
               //workaround for what I believe is a bug in the JSF RI
  -            result = pagesByViewId.get( replaceExtension(viewId) );
  -         }
  +         result = pagesByViewId.get( replaceExtension( viewId, getSuffix() ) );
         }
  -      return result==null ? new Page(viewId) : result;
  +      return result;
      }
      
  -   private static String replaceExtension(String viewId)
  +   private static String replaceExtension(String viewId, String suffix)
      {
         int loc = viewId.lastIndexOf('.');
  -      return loc<0 ? null : viewId.substring(0, loc) + getSuffix();
  +      return loc<0 ? null : viewId.substring(0, loc) + suffix;
      }
      
      public boolean callAction()
  
  
  



More information about the jboss-cvs-commits mailing list