KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > facelets > SeamDebugResourceResolver


1 package com.icesoft.faces.facelets;
2
3 import java.io.IOException JavaDoc;
4 import java.net.URL JavaDoc;
5 import java.lang.reflect.Method JavaDoc;
6
7 import javax.faces.context.FacesContext;
8
9 import com.sun.facelets.impl.ResourceResolver;
10 import com.sun.facelets.impl.DefaultResourceResolver;
11 import com.icesoft.util.SeamUtilities;
12
13 /**
14  * Intercepts any request for a path like /debug.xxx and renders
15  * the Seam debug page using facelets.
16  *
17  * @author Mark Collette
18  */

19 public class SeamDebugResourceResolver implements ResourceResolver {
20     private static final String JavaDoc Init_className =
21         "org.jboss.seam.core.Init";
22     private static final String JavaDoc SeamDebugPhaseListener_className =
23         "org.jboss.seam.debug.jsf.SeamDebugPhaseListener";
24     private static Class JavaDoc Init_class;
25     private static Method JavaDoc Init_instance_method;
26     private static Method JavaDoc Init_isDebug_method;
27     private static Class JavaDoc SeamDebugPhaseListener_class;
28     private static boolean loaded = false;
29     
30     public static ResourceResolver build(ResourceResolver delegate) {
31         if( delegate == null ) {
32             throw new IllegalArgumentException JavaDoc(
33                 "SeamDebugResourceResolver must have valid delegate ResourceResolver");
34         }
35         if( !loadSeamDebugClasses() )
36             return null;
37         return new SeamDebugResourceResolver( delegate );
38     }
39     
40     private static boolean loadSeamDebugClasses() {
41         if( !loaded ) {
42             try {
43                 ClassLoader JavaDoc dbgClassLoader =
44                     SeamUtilities.getSeamDebugPhaseListenerClassLoader();
45                 if( dbgClassLoader == null ) {
46                     dbgClassLoader =
47                         Thread.currentThread().getContextClassLoader();
48                 }
49                 Init_class = Class.forName(
50                     Init_className, true, dbgClassLoader);
51                 Init_instance_method = Init_class.getMethod(
52                     "instance", new Class JavaDoc[0]);
53                 Init_isDebug_method = Init_class.getMethod(
54                     "isDebug", new Class JavaDoc[0]);
55                 SeamDebugPhaseListener_class = Class.forName(
56                     SeamDebugPhaseListener_className, true, dbgClassLoader);
57                 loaded = true;
58             }
59             catch(Exception JavaDoc e) {
60 //e.printStackTrace();
61
// Silently fail, since it's valid to not be in Seam,
62
// or not have the Seam debug JAR available
63
Init_class = null;
64                 Init_instance_method = null;
65                 Init_isDebug_method = null;
66                 SeamDebugPhaseListener_class = null;
67                 loaded = false;
68             }
69         }
70         return loaded;
71     }
72
73     private ResourceResolver delegate;
74
75     private SeamDebugResourceResolver(ResourceResolver delegate) {
76         this.delegate = delegate;
77     }
78
79     public URL JavaDoc resolveUrl(String JavaDoc path) {
80 //System.out.println("SeamDebugResourceResolver.resolveUrl() path: " + path);
81
if ( path!=null && path.startsWith("/debug.") && Init_instance_isDebug() )
82         {
83             URL JavaDoc url = SeamDebugPhaseListener_class.getClassLoader().getResource("META-INF/debug.xhtml");
84 //System.out.println("SeamDebugResourceResolver.resolveUrl() url: " + url);
85
return url;
86         }
87         return delegate.resolveUrl(path);
88     }
89     
90     private static boolean Init_instance_isDebug() {
91         try {
92             Object JavaDoc instance = Init_instance_method.invoke(null, new Object JavaDoc[0]);
93             Object JavaDoc isDebug = Init_isDebug_method.invoke(instance, new Object JavaDoc[0]);
94             return ((Boolean JavaDoc) isDebug).booleanValue();
95         }
96         catch(Exception JavaDoc e) {
97 //e.printStackTrace();
98
return false;
99         }
100     }
101 }
102
Popular Tags