[Lipog-commit] net.heilancoo.portal/src/net/heilancoo/portal/responders PlainResponderBasic.java,
Status: Beta
Brought to you by:
jbu
From: Joerg B. <jb...@us...> - 2009-08-13 22:35:42
|
Update of /cvsroot/lipog/net.heilancoo.portal/src/net/heilancoo/portal/responders In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv11834/src/net/heilancoo/portal/responders Modified Files: ResponderFactory.java FileResponder.java Responder.java PlainResponder.java PlainResponderFactory.java Added Files: PlainResponderBasic.java ResponderMatcher.java Log Message: support request methods with more flexible parameter lists Index: PlainResponderFactory.java =================================================================== RCS file: /cvsroot/lipog/net.heilancoo.portal/src/net/heilancoo/portal/responders/PlainResponderFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PlainResponderFactory.java 11 May 2009 16:43:11 -0000 1.2 --- PlainResponderFactory.java 13 Aug 2009 22:35:34 -0000 1.3 *************** *** 12,25 **** package net.heilancoo.portal.responders; - import java.lang.reflect.Method; - - import net.heilancoo.portal.MimeTypeMapper; import net.heilancoo.portal.htmlforms.FormFieldContainer; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; - import org.apache.http.protocol.HttpContext; - import org.apache.log4j.Logger; - import org.osgi.framework.Bundle; /** --- 12,19 ---- *************** *** 29,52 **** public class PlainResponderFactory extends ResponderFactory { ! private static final Logger logger = Logger.getLogger(PlainResponderFactory.class); ! ! public PlainResponderFactory() { ! super(new Class<?> [] { ! HttpRequest.class, ! FormFieldContainer.class, ! HttpResponse.class, ! HttpContext.class ! }); ! } ! ! /* ! * (non-Javadoc) ! * @see net.heilancoo.portal.responses.ResponderFactory#makeGeneratorFor(java.lang.reflect.Method, org.osgi.framework.Bundle, net.heilancoo.portal.requests.MimeTypeMapper) ! */ ! @Override ! public Responder makeGeneratorFor(Method method, Bundle bundle, MimeTypeMapper mimeMapper) { ! logger.info("Making plain responder for method " + method.getName() + "."); ! ! return new PlainResponder(method); } --- 23,39 ---- public class PlainResponderFactory extends ResponderFactory { ! public PlainResponderFactory() throws SecurityException, NoSuchMethodException { ! super(new ResponderMatcher [] { ! new ResponderMatcher( ! PlainResponder.class, ! new Class<?> [] { HttpRequest.class, ! FormFieldContainer.class, ! HttpResponse.class } ! ), ! new ResponderMatcher( ! PlainResponderBasic.class, ! new Class<?> [] { FormFieldContainer.class } ! ) ! }); } --- NEW FILE: PlainResponderBasic.java --- /* * Copyright (c) 2009 Heilan' Coo -- Joerg Bullmann * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Joerg Bullmann <jb...@he...> */ package net.heilancoo.portal.responders; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import net.heilancoo.portal.MimeTypeMapper; import net.heilancoo.portal.controller.Controller; import net.heilancoo.portal.htmlforms.FormFieldContainer; import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; import org.osgi.framework.Bundle; /** * @author joerg * */ public class PlainResponderBasic extends Responder { public PlainResponderBasic(Method method, Bundle bundle, MimeTypeMapper mimeMapper) { super(method); } /* (non-Javadoc) * @see net.heilancoo.portal.responses.Responder#execute(net.heilancoo.portal.session.Session, org.apache.http.HttpRequest, net.heilancoo.portal.htmlforms.FormFieldContainer, org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) */ @Override public Object execute(Controller target, String format, HttpRequest request, FormFieldContainer fields, HttpResponse response) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { return method.invoke(target, fields); } } --- NEW FILE: ResponderMatcher.java --- /* * Copyright (c) 2009 Heilan' Coo -- Joerg Bullmann * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Joerg Bullmann <jb...@he...> */ package net.heilancoo.portal.responders; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import net.heilancoo.portal.MimeTypeMapper; import org.apache.log4j.Logger; import org.osgi.framework.Bundle; /** * @author joerg * */ public class ResponderMatcher { private static final Logger logger = Logger.getLogger(ResponderMatcher.class); private final Class<?> [] parameters; private final Constructor<?> constructor; public ResponderMatcher(Class<?> responder, Class<?> [] parameters) throws SecurityException, NoSuchMethodException { this.constructor = responder.getConstructor(Method.class, Bundle.class, MimeTypeMapper.class); this.parameters = parameters; } public Responder make(Method method, Bundle bundle, MimeTypeMapper mimeTypeMapper) { try { Class<?> [] methodParameters = method.getParameterTypes(); if(methodParameters.length != parameters.length) return null; for(int i = 0; i < parameters.length; i++) if(!parameters[i].equals(methodParameters[i])) return null; return (Responder) constructor.newInstance(method, bundle, mimeTypeMapper); } catch (IllegalArgumentException e) { logger.error(e, e); } catch (InstantiationException e) { logger.error(e, e); } catch (IllegalAccessException e) { logger.error(e, e); } catch (InvocationTargetException e) { logger.error(e, e); } catch(Throwable t) { logger.error(t, t); } return null; } } Index: FileResponder.java =================================================================== RCS file: /cvsroot/lipog/net.heilancoo.portal/src/net/heilancoo/portal/responders/FileResponder.java,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** FileResponder.java 24 Jul 2009 06:40:11 -0000 1.6 --- FileResponder.java 13 Aug 2009 22:35:33 -0000 1.7 *************** *** 21,25 **** import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; - import org.apache.http.protocol.HttpContext; /** --- 21,24 ---- *************** *** 44,53 **** @Override public Object execute(Controller target, String format, HttpRequest request, ! FormFieldContainer fields, HttpResponse response, ! HttpContext context) { File f = mapExtension ? new File(file.getAbsolutePath() + "." + format) : file; ! FileRequestHandler.serveFile(f, request, response, context, mimeMapper, false); return null; --- 43,51 ---- @Override public Object execute(Controller target, String format, HttpRequest request, ! FormFieldContainer fields, HttpResponse response) { File f = mapExtension ? new File(file.getAbsolutePath() + "." + format) : file; ! FileRequestHandler.serveFile(f, request, response, mimeMapper, false); return null; Index: ResponderFactory.java =================================================================== RCS file: /cvsroot/lipog/net.heilancoo.portal/src/net/heilancoo/portal/responders/ResponderFactory.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ResponderFactory.java 11 May 2009 16:43:11 -0000 1.2 --- ResponderFactory.java 13 Aug 2009 22:35:33 -0000 1.3 *************** *** 22,62 **** * */ ! public abstract class ResponderFactory { ! private final Class<?> [] parameterTypes; ! ! protected ResponderFactory(Class<?> [] parameterTypes) { ! this.parameterTypes = parameterTypes; ! } ! ! protected boolean matches(Method method) { ! if(method.getParameterTypes().length != parameterTypes.length) ! return false; ! ! for(int i = 0; i < parameterTypes.length; i++) { ! Class<?> meth = method.getParameterTypes()[i]; ! Class<?> gen = parameterTypes[i]; ! ! if(!meth.equals(gen)) ! return false; ! } ! return true; } public Responder tryMakingResponderFor(Method method, Bundle bundle, MimeTypeMapper mimeMapper) { ! if(!matches(method)) ! return null; ! ! try { ! return makeGeneratorFor(method, bundle, mimeMapper); ! } ! catch(ResponderCreationException e) { ! return null; } } - protected abstract Responder makeGeneratorFor(Method method, Bundle bundle, - MimeTypeMapper mimeMapper) throws ResponderCreationException; - } --- 22,43 ---- * */ ! public class ResponderFactory { ! private final ResponderMatcher [] matchers; ! protected ResponderFactory(ResponderMatcher [] matchers) { ! this.matchers = matchers; } public Responder tryMakingResponderFor(Method method, Bundle bundle, MimeTypeMapper mimeMapper) { ! for(ResponderMatcher m : matchers) { ! Responder r = m.make(method, bundle, mimeMapper); ! ! if(r != null) ! return r; } + + return null; } } Index: Responder.java =================================================================== RCS file: /cvsroot/lipog/net.heilancoo.portal/src/net/heilancoo/portal/responders/Responder.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Responder.java 24 Jul 2009 06:40:11 -0000 1.5 --- Responder.java 13 Aug 2009 22:35:34 -0000 1.6 *************** *** 19,23 **** import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; - import org.apache.http.protocol.HttpContext; /** --- 19,22 ---- *************** *** 39,43 **** public abstract Object execute(Controller target, String format, HttpRequest request, FormFieldContainer fields, ! HttpResponse response, HttpContext context) throws Exception; } --- 38,42 ---- public abstract Object execute(Controller target, String format, HttpRequest request, FormFieldContainer fields, ! HttpResponse response) throws Exception; } Index: PlainResponder.java =================================================================== RCS file: /cvsroot/lipog/net.heilancoo.portal/src/net/heilancoo/portal/responders/PlainResponder.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** PlainResponder.java 24 Jul 2009 06:40:11 -0000 1.5 --- PlainResponder.java 13 Aug 2009 22:35:34 -0000 1.6 *************** *** 15,18 **** --- 15,19 ---- import java.lang.reflect.Method; + import net.heilancoo.portal.MimeTypeMapper; import net.heilancoo.portal.controller.Controller; import net.heilancoo.portal.htmlforms.FormFieldContainer; *************** *** 20,24 **** import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; ! import org.apache.http.protocol.HttpContext; /** --- 21,25 ---- import org.apache.http.HttpRequest; import org.apache.http.HttpResponse; ! import org.osgi.framework.Bundle; /** *************** *** 28,32 **** public class PlainResponder extends Responder { ! public PlainResponder(Method method) { super(method); } --- 29,33 ---- public class PlainResponder extends Responder { ! public PlainResponder(Method method, Bundle bundle, MimeTypeMapper mimeMapper) { super(method); } *************** *** 37,47 **** @Override public Object execute(Controller target, String format, HttpRequest request, ! FormFieldContainer fields, HttpResponse response, ! HttpContext context) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { ! Object o = method.invoke(target, request, fields, response, context); ! ! return o; } --- 38,45 ---- @Override public Object execute(Controller target, String format, HttpRequest request, ! FormFieldContainer fields, HttpResponse response) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { ! return method.invoke(target, request, fields, response); } |