package org.qrone.r7.handler; import java.lang.reflect.InvocationTargetException; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.qrone.r7.Extendable; import org.qrone.r7.resolver.CascadeResolver; import org.qrone.r7.resolver.URIResolver; import org.qrone.r7.script.ext.ClassPrototype; import org.qrone.r7.script.ext.ListPrototype; import org.qrone.r7.script.ext.MapPrototype; import org.qrone.r7.script.window.WindowEncodes; import org.qrone.r7.script.window.WindowFileSystem; import org.qrone.r7.script.window.WindowFormats; public abstract class ExtendableURIHandler implements URIHandler, Extendable{ protected CascadeResolver resolver; protected CascadeHandler handler; public ExtendableURIHandler() { resolver = new CascadeResolver(); handler = new CascadeHandler(); } @Override public boolean handle(HttpServletRequest request, HttpServletResponse response, String uri, String path, String leftpath, List<String> arg) { return handler.handle(request, response, uri, path, leftpath, arg); } public void addExtension(Class c){ try { if(URIHandler.class.isAssignableFrom(c)){ handler.add((URIHandler)c.getConstructor(URIResolver.class).newInstance(resolver)); }else if(URIResolver.class.isAssignableFrom(c)){ resolver.add((URIResolver)c.getConstructor().newInstance()); } } catch (IllegalArgumentException e) { } catch (SecurityException e) { } catch (InstantiationException e) { } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } } protected void rawextend(Extendable e){ e.addExtension(ClassPrototype.class); e.addExtension(MapPrototype.class); e.addExtension(ListPrototype.class); e.addExtension(WindowEncodes.class); e.addExtension(WindowFormats.class); e.addExtension(WindowFileSystem.class); } }