/* * JBoss, Home of Professional Open Source * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.seam.wiki.core.plugin.metamodel; import org.jboss.seam.Component; import org.jboss.seam.wiki.core.exception.InvalidWikiConfigurationException; import java.util.ArrayList; import java.util.List; import java.io.Serializable; /** * Plugin metadata. * * @author Christian Bauer */ public class Plugin implements Serializable { // Some constants that represent the sub-package layout of a plugin package public static final String PACKAGE_I18N = "i18n"; public static final String PACKAGE_I18N_MESSAGES = "messages"; public static final String PACKAGE_TEMPLATES = "templates"; public static final String PACKAGE_THEMES = "themes"; public static final String PACKAGE_THEMES_CSS = "css"; public static final String PACKAGE_THEMES_IMG = "img"; public static final String KEY_PATTERN = "[a-zA-Z0-9]+"; // Web request paths for resource loading, one for generating URIs, the other for parsing requests public static final String GENERATE_RESOURCE_PATH_THEME = "/seam/resource/wikiPluginTheme"; public static final String REGISTER_SEAM_RESOURCE_THEME = "/wikiPluginTheme"; private String descriptorPath; private String descriptorPackagePath; private String key; private String label; private PluginInfo pluginInfo; private List<PluginModule> modules = new ArrayList<PluginModule>(); public Plugin(String descriptorPath, String key) { if (!key.matches(KEY_PATTERN)) throw new InvalidWikiConfigurationException("Key doesn't match pattern '"+KEY_PATTERN+"': " + key); this.descriptorPath = descriptorPath; // '/foo/bar/Baz.plugin.xhtml' this.descriptorPackagePath = descriptorPath.substring(0, descriptorPath.lastIndexOf("/")); // '/foo/bar' this.key = key; } public String getDescriptorPath() { return descriptorPath; } public String getDescriptorPackagePath() { return descriptorPackagePath; } public String getKey() { return key; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public PluginInfo getPluginInfo() { return pluginInfo; } public void setPluginInfo(PluginInfo pluginInfo) { this.pluginInfo = pluginInfo; } public List<PluginModule> getModules() { return modules; } public PluginModule getModuleByKey(String key) { for (PluginModule pluginModule : getModules()) { if (pluginModule.getKey().equals(key)) return pluginModule; } return null; } public void setModules(List<PluginModule> modules) { this.modules = modules; } public String getPackageCSSPath() { return getPackageThemePath() + "/" + Plugin.PACKAGE_THEMES_CSS; } public String getPackageThemePath() { String currentTheme = (String) Component.getInstance("currentTheme"); return getDescriptorPackagePath() + "/" + Plugin.PACKAGE_THEMES + "/" + currentTheme; } public String getPackageDefaultTemplatePath(String templateName) { return getDescriptorPackagePath() + "/" + Plugin.PACKAGE_TEMPLATES + "/" + templateName + ".xhtml"; } public String getPackageI18NPath() { return getDescriptorPackagePath() + "/" + Plugin.PACKAGE_I18N; } }