[Buix-commits] r144 - trunk/jaxx/src/java/jaxx/tags
Author: tchemit Date: 2008-01-12 13:39:18 +0000 (Sat, 12 Jan 2008) New Revision: 144 Modified: trunk/jaxx/src/java/jaxx/tags/TagManager.java Log: generify Modified: trunk/jaxx/src/java/jaxx/tags/TagManager.java =================================================================== --- trunk/jaxx/src/java/jaxx/tags/TagManager.java 2008-01-12 13:34:53 UTC (rev 143) +++ trunk/jaxx/src/java/jaxx/tags/TagManager.java 2008-01-12 13:39:18 UTC (rev 144) @@ -40,7 +40,7 @@ * TagHandler instances, because subclasses of the bean class should be handled by the same TagHandler * (assuming no more specific mappings exist), which requires creating a new instance of the TagHandler. */ - private static ClassMap<Class> registeredBeans = new ClassMap<Class>(); + private static ClassMap<Class<? extends TagHandler>> registeredBeans = new ClassMap<Class<? extends TagHandler>>(); // still targeting 1.4, so I can't use javax.xml.namespace.QName private static class QName { @@ -99,9 +99,10 @@ * @param handler the <code>TagHandler</code> class, which must descend from <code>DefaultObjectHandler</code> * @throws IllegalArgumentException if the handler class does not descend from <code>DefaultObjectHandler</code> */ - public static void registerBean(ClassDescriptor beanClass, Class handler) { - if (!DefaultObjectHandler.class.isAssignableFrom(handler)) + public static <T extends TagHandler> void registerBean(ClassDescriptor beanClass, Class<T> handler) { + if (!DefaultObjectHandler.class.isAssignableFrom(handler)) { throw new IllegalArgumentException("handler class must be a subclass of DefaultObjectHandler"); + } registeredBeans.put(beanClass, handler); String name = beanClass.getName(); int dotPos = name.lastIndexOf("."); @@ -147,7 +148,7 @@ * @param tag the simple name of the tag * @param handler the <code>TagHandler</code> which should process the tag */ - public static void registerTag(String namespace, String tag, TagHandler handler) { + public static <T extends TagHandler> void registerTag(String namespace, String tag, T handler) { if (namespace == null) { namespace = "*"; } @@ -196,24 +197,24 @@ * are considered. * @throws jaxx.CompilerException ? */ - public static DefaultObjectHandler getTagHandler(ClassDescriptor beanClass) throws CompilerException { + public static DefaultObjectHandler getTagHandler(ClassDescriptor beanClass) throws CompilerException { try { if (beanClass == null) { throw new NullPointerException(); } String namespace = getNamespace(beanClass); String tag = getSimpleName(beanClass); - TagHandler handler = registeredTags.get(new QName(namespace, tag)); + DefaultObjectHandler handler = (DefaultObjectHandler) registeredTags.get(new QName(namespace, tag)); if (handler == null) { - Class<?> handlerClass = registeredBeans.get(beanClass); + Class<? extends TagHandler> handlerClass = registeredBeans.get(beanClass); if (handlerClass == null) { throw new CompilerException("unable to find handler for " + beanClass); } - Constructor<?> constructor = handlerClass.getConstructor(ClassDescriptor.class); + Constructor<? extends TagHandler> constructor = handlerClass.getConstructor(ClassDescriptor.class); handler = (DefaultObjectHandler) constructor.newInstance(beanClass); registerTag(namespace, tag, handler); } - return (DefaultObjectHandler) handler; + return handler; } catch (InstantiationException e) { throw new RuntimeException(e);
participants (1)
-
tchemit@users.labs.libre-entreprise.org