/* * Copyright 2004-2006 Geert Bevin <gbevin[remove] at uwyn dot com> * Distributed under the terms of either: * - the common development and distribution license (CDDL), v1.0; or * - the GNU Lesser General Public License, v2.1 or later * $Id: XhtmlRendererFactory.java 3108 2006-03-13 18:03:00Z gbevin $ */ package com.uwyn.jhighlight.renderer; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * Provides a single point of entry to instantiate Xhtml renderers. * * @author Geert Bevin (gbevin[remove] at uwyn dot com) * @version $Revision: 3108 $ * @since 1.0 */ public abstract class XhtmlRendererFactory { public final static String GROOVY = "groovy"; public final static String JAVA = "java"; public final static String BEANSHELL = "beanshell"; public final static String BSH = "bsh"; public final static String XML = "xml"; public final static String XHTML = "xhtml"; public final static String LZX = "lzx"; public final static String HTML = "html"; public final static String CPP = "cpp"; public final static String CXX = "cxx"; public final static String CPLUSPLUS = "c++"; private final static Map RENDERERS_CLASSNAMES = new HashMap() {{ put(GROOVY, GroovyXhtmlRenderer.class.getName()); put(JAVA, JavaXhtmlRenderer.class.getName()); put(BEANSHELL, JavaXhtmlRenderer.class.getName()); put(BSH, JavaXhtmlRenderer.class.getName()); put(XML, XmlXhtmlRenderer.class.getName()); put(XHTML, XmlXhtmlRenderer.class.getName()); put(LZX, XmlXhtmlRenderer.class.getName()); put(HTML, XmlXhtmlRenderer.class.getName()); put(CPP, CppXhtmlRenderer.class.getName()); put(CXX, CppXhtmlRenderer.class.getName()); put(CPLUSPLUS, CppXhtmlRenderer.class.getName()); }}; /** * Instantiates an instance of a known <code>XhtmlRenderer</code> according to * the type that's provided. * * @param type The type of renderer, look at the static variables of this * class to see which ones are supported. * @return an instance of the <code>XhtmlRenderer</code> that corresponds to the type; or * <p><code>null</code> if the type wasn't known * @since 1.0 */ public static Renderer getRenderer(String type) { String classname = (String)RENDERERS_CLASSNAMES.get(type.toLowerCase()); if (null == classname) { return null; } try { Class klass = Class.forName(classname); return (Renderer)klass.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } } /** * Returned a set with all the supported XHTML renderer types. * * @return a <code>Set</code> with the supported XHTML renderer types as strings. * @since 1.0 */ public static Set getSupportedTypes() { return Collections.unmodifiableSet(RENDERERS_CLASSNAMES.keySet()); } }