/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.seam.wiki.core.template; import org.jboss.seam.annotations.*; import org.jboss.seam.annotations.Observer; import org.jboss.seam.log.Log; import org.jboss.seam.ScopeType; import org.jboss.seam.Component; import org.jboss.seam.wiki.core.model.WikiDocumentDefaults; import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException; import org.jboss.seam.core.Interpolator; import java.util.*; /** * @author Christian Bauer */ @Name("templateRegistry") @Scope(ScopeType.APPLICATION) public class TemplateRegistry { @Logger static Log log; @In( value="#{deploymentStrategy.annotatedClasses['org.jboss.seam.wiki.core.template.WikiDocumentTemplate']}", required = false ) Set<Class> templateClasses; Map<Class, String> templates = new HashMap<Class, String>(); List<Class> templateTypes = new ArrayList<Class>(); @Observer("Wiki.startup") public void create() { log.debug("initializing template registry"); for (Class<?> templateClass : templateClasses) { String templateName = interpolate(templateClass.getAnnotation(WikiDocumentTemplate.class).value()); if (!WikiDocumentDefaults.class.isAssignableFrom(templateClass)) { throw new InvalidWikiConfigurationException("Annotated @WikiDocumentTemplate class '" + templateClass + "' does not implement WikiDocumentDefaults interface"); } log.debug("adding template class " + templateClass.getName() + " as '" + templateName + "'"); templates.put(templateClass, templateName); templateTypes.add(templateClass); } } private String interpolate(String s) { return Interpolator.instance().interpolate(s); } public Map<Class, String> getTemplates() { return templates; } public List<Class> getTemplateTypes() { return templateTypes; } public static TemplateRegistry instance() { return (TemplateRegistry)Component.getInstance(TemplateRegistry.class); } }