1 package com.icesoft.faces.facelets; 2 3 import java.io.IOException ; 4 import java.net.URL ; 5 import java.lang.reflect.Method ; 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 19 public class SeamDebugResourceResolver implements ResourceResolver { 20 private static final String Init_className = 21 "org.jboss.seam.core.Init"; 22 private static final String SeamDebugPhaseListener_className = 23 "org.jboss.seam.debug.jsf.SeamDebugPhaseListener"; 24 private static Class Init_class; 25 private static Method Init_instance_method; 26 private static Method Init_isDebug_method; 27 private static Class SeamDebugPhaseListener_class; 28 private static boolean loaded = false; 29 30 public static ResourceResolver build(ResourceResolver delegate) { 31 if( delegate == null ) { 32 throw new IllegalArgumentException ( 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 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 [0]); 53 Init_isDebug_method = Init_class.getMethod( 54 "isDebug", new Class [0]); 55 SeamDebugPhaseListener_class = Class.forName( 56 SeamDebugPhaseListener_className, true, dbgClassLoader); 57 loaded = true; 58 } 59 catch(Exception e) { 60 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 resolveUrl(String path) { 80 if ( path!=null && path.startsWith("/debug.") && Init_instance_isDebug() ) 82 { 83 URL url = SeamDebugPhaseListener_class.getClassLoader().getResource("META-INF/debug.xhtml"); 84 return url; 86 } 87 return delegate.resolveUrl(path); 88 } 89 90 private static boolean Init_instance_isDebug() { 91 try { 92 Object instance = Init_instance_method.invoke(null, new Object [0]); 93 Object isDebug = Init_isDebug_method.invoke(instance, new Object [0]); 94 return ((Boolean ) isDebug).booleanValue(); 95 } 96 catch(Exception e) { 97 return false; 99 } 100 } 101 } 102 | Popular Tags |