1 16 package org.directwebremoting.guice; 17 18 import com.google.inject.Key; 19 import com.google.inject.Injector; 20 import com.google.inject.Provider; 21 22 import java.util.Collection ; 23 import java.util.Iterator ; 24 import java.util.Map ; 25 26 import org.directwebremoting.AjaxFilter; 27 import org.directwebremoting.impl.DefaultAjaxFilterManager; 28 import org.directwebremoting.extend.*; 29 import org.directwebremoting.util.Logger; 30 31 import static org.directwebremoting.guice.DwrGuiceUtil.getInjector; 32 import static org.directwebremoting.guice.DwrGuiceUtil.getServletContext; 33 34 40 public class InternalAjaxFilterManager implements AjaxFilterManager 41 { 42 46 public InternalAjaxFilterManager() 47 { 48 this.ajaxFilterManager = getAjaxFilterManager(); 49 addAjaxFilters(); 50 } 51 52 public Iterator <AjaxFilter> getAjaxFilters(String scriptname) 53 { 54 return (Iterator <AjaxFilter>) ajaxFilterManager.getAjaxFilters(scriptname); 55 } 56 57 public void addAjaxFilter(AjaxFilter filter) 58 { 59 ajaxFilterManager.addAjaxFilter(filter); 60 } 61 62 public void addAjaxFilter(AjaxFilter filter, String scriptname) 63 { 64 ajaxFilterManager.addAjaxFilter(filter, scriptname); 65 } 66 67 68 private final AjaxFilterManager ajaxFilterManager; 69 70 private void addAjaxFilters() 71 { 72 Injector injector = getInjector(); 73 for (Key<?> key : injector.getBindings().keySet()) 74 { 75 Class <?> atype = key.getAnnotationType(); 76 if (atype != null && Filtering.class.isAssignableFrom(atype)) 77 { 78 String scriptName = Filtering.class.cast(key.getAnnotation()).value(); 79 Provider<AjaxFilter> provider = injector.getProvider((Key<AjaxFilter>) key); 80 if ("".equals(scriptName)) 81 { 82 addAjaxFilter(new InternalAjaxFilter(provider)); 83 } 84 else 85 { 86 addAjaxFilter(new InternalAjaxFilter(provider), scriptName); 87 } 88 } 89 } 90 } 91 92 93 97 static void setTypeName(String name) 98 { 99 typeName.set(name); 100 } 101 102 private static AjaxFilterManager getAjaxFilterManager() 103 { 104 String name = typeName.get(); 105 try 106 { 107 Class <? extends AjaxFilterManager> cls = 108 (Class <? extends AjaxFilterManager>) Class.forName(name); 109 return cls.newInstance(); 110 } 111 catch (Exception e) 112 { 113 if (name != null && !"".equals(name)) { 114 log.warn("Couldn't make AjaxFilterManager from type: " + name); 115 } 116 return new DefaultAjaxFilterManager(); 117 } 118 } 119 120 121 124 private static final ThreadLocal <String > typeName = new ThreadLocal <String >(); 125 126 127 130 private static final Logger log = Logger.getLogger(InternalAjaxFilterManager.class); 131 } 132 | Popular Tags |