/* * Copyright (C) 2003-2009 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.ks.rendering; import java.util.HashMap; import java.util.Map; import org.exoplatform.ks.rendering.api.Renderer; import org.exoplatform.ks.rendering.api.UnsupportedSyntaxException; import org.exoplatform.ks.rendering.spi.MarkupRenderDelegate; import org.exoplatform.ks.rendering.spi.RendererPlugin; /** * @author <a href="mailto:patrice.lamarque@exoplatform.com">Patrice Lamarque</a> * @version $Revision$ */ public class MarkupRenderingService { protected Map<String, Renderer> rendererRegistry; public MarkupRenderingService() { rendererRegistry = new HashMap<String, Renderer>(); } public void registerRenderer(RendererPlugin plugin) { registerRenderer(plugin.getRenderer()); } public void registerRenderer(Renderer renderer) { rendererRegistry.put(renderer.getSyntax(), renderer); } public Renderer getRenderer(String syntax) { Renderer r = rendererRegistry.get(syntax); if (r == null) { throw new UnsupportedSyntaxException("No renderer has been registered for syntax " + syntax); } return r; } /** * Convenience method to delegate markup of an object. * @param <T> * @param delegate * @param target * @return */ public <T> String delegateRendering(MarkupRenderDelegate<T> delegate, T target) { String message = delegate.getMarkup(target); if (message != null) { Renderer renderer = getRenderer(delegate.getSyntax(target)); return renderer.render(message); } return null; } }