[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