001/* 002 * Copyright 2004-2006 Geert Bevin <gbevin[remove] at uwyn dot com> 003 * Distributed under the terms of either: 004 * - the common development and distribution license (CDDL), v1.0; or 005 * - the GNU Lesser General Public License, v2.1 or later 006 * $Id: XhtmlRendererFactory.java 3106 2006-03-13 17:53:50Z gbevin $ 007 */ 008package com.uwyn.jhighlight.renderer; 009 010import java.util.Collections; 011import java.util.HashMap; 012import java.util.Map; 013import java.util.Set; 014 015/** 016 * Provides a single point of entry to instantiate Xhtml renderers. 017 * 018 * @author Geert Bevin (gbevin[remove] at uwyn dot com) 019 * @version $Revision: 3106 $ 020 * @since 1.0 021 */ 022public abstract class XhtmlRendererFactory 023{ 024 public final static String GROOVY = "groovy"; 025 public final static String JAVA = "java"; 026 public final static String BEANSHELL = "beanshell"; 027 public final static String BSH = "bsh"; 028 public final static String XML = "xml"; 029 public final static String XHTML = "xhtml"; 030 public final static String LZX = "lzx"; 031 public final static String HTML = "html"; 032 public final static String CPP = "cpp"; 033 public final static String CXX = "cxx"; 034 public final static String CPLUSPLUS = "c++"; 035 036 private final static Map RENDERERS_CLASSNAMES = new HashMap() {{ 037 put(GROOVY, GroovyXhtmlRenderer.class.getName()); 038 put(JAVA, JavaXhtmlRenderer.class.getName()); 039 put(BEANSHELL, JavaXhtmlRenderer.class.getName()); 040 put(BSH, JavaXhtmlRenderer.class.getName()); 041 put(XML, XmlXhtmlRenderer.class.getName()); 042 put(XHTML, XmlXhtmlRenderer.class.getName()); 043 put(LZX, XmlXhtmlRenderer.class.getName()); 044 put(HTML, XmlXhtmlRenderer.class.getName()); 045 put(CPP, CppXhtmlRenderer.class.getName()); 046 put(CXX, CppXhtmlRenderer.class.getName()); 047 put(CPLUSPLUS, CppXhtmlRenderer.class.getName()); 048 }}; 049 050 /** 051 * Instantiates an instance of a known <code>XhtmlRenderer</code> according to 052 * the type that's provided. 053 * 054 * @param type The type of renderer, look at the static variables of this 055 * class to see which ones are supported. 056 * @return an instance of the <code>XhtmlRenderer</code> that corresponds to the type; or 057 * <p><code>null</code> if the type wasn't known 058 * @since 1.0 059 */ 060 public static Renderer getRenderer(String type) 061 { 062 String classname = (String)RENDERERS_CLASSNAMES.get(type.toLowerCase()); 063 if (null == classname) 064 { 065 return null; 066 } 067 068 try 069 { 070 Class klass = Class.forName(classname); 071 return (Renderer)klass.newInstance(); 072 } 073 catch (Exception e) 074 { 075 throw new RuntimeException(e); 076 } 077 } 078 079 /** 080 * Returned a set with all the supported XHTML renderer types. 081 * 082 * @return a <code>Set</code> with the supported XHTML renderer types as strings. 083 * @since 1.0 084 */ 085 public static Set getSupportedTypes() 086 { 087 return Collections.unmodifiableSet(RENDERERS_CLASSNAMES.keySet()); 088 } 089}