/*************************************************************************************************** * Copyright (c) 2006, 2016 IBM Corporation and others. All rights reserved. This program and the * accompanying materials are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: IBM Corporation - initial API and implementation **************************************************************************************************/ package org.eclipse.ui.intro.config; import java.util.Map; import org.eclipse.ui.internal.intro.impl.model.IntroModelRoot; import org.eclipse.ui.intro.IIntroSite; /** * Classes that extend this abstract class are used to configure <code>CustomizableIntroPart</code>. * Since it is possible for multiple products to use the same intro configuration, this class allows * them to customize some aspects of the intro content so that it looks different for different * products even though they all share the same intro implementation and content. * * @since 3.2 */ public abstract class IntroConfigurer { /** * The identifier of the named group where the configurer can contribute local tool bar actions. * * @see #init(IIntroSite, Map) */ public static final String TB_ADDITIONS = "additions"; //$NON-NLS-1$ protected Map<String, String> themeProperties; protected IIntroSite site; private IntroModelRoot model; /** * Provides the opportunity for the configurer to contribute to the action bars and to fetch * presentation theme properties. * * @param site * the intro part's site * @param themeProperties * properties of the current theme that can be used by the configurer, or * <code>null</code> if no theme is currently active or the active theme has no * properties. */ public void init(IIntroSite site, Map<String, String> themeProperties) { this.themeProperties = themeProperties; this.site = site; } /** * Internal method to associate the corresponding intro configuration model. May be called * independently of {@link #init(IIntroSite, Map)}. * * @noreference */ final public void bind(IntroModelRoot model) { // The configurer may vary its returned results based on the theme // properties this.model = model; if (model != null && model.getTheme() != null) { themeProperties = model.getTheme().getProperties(); } } /** * Returns the value of the theme property with a given name. * * @param name * the theme property name * @return the value of the property or <code>null</code> if property is not found, the theme * does not have properties or no theme is currently active. */ protected String getThemeProperty(String name) { if (themeProperties == null) return null; String value = (String)themeProperties.get(name); if (value != null && model != null) value = model.resolveVariables(value); return value; } /** * Returns the value of the variable defined by the configurer. This variable can appear in XML * content files in attribute names and values of elements. Whenever $variable$ is encountered * in the content, it is evaluated using this class by passing 'variable' to this method and * substituting the result in the content. * * @param variableName * the name of the substitution variable * @return the value to substitute in place of a variable or <code>null</code> if the variable * cannot be resolved. */ public abstract String getVariable(String variableName); /** * Returns the children of computed groups. Groups marked as computed will be completed at run * time when the group is asked to provide children. * * @param pageId * the identifier of the page in which this group appears * @param groupId * the identifier of the group group within the page * @return an array of intro elements for this group. Each intro element should contain only * legal elements and attributes according to the intro content schema. Returns an empty * array for no children. */ public abstract IntroElement[] getGroupChildren(String pageId, String groupId); /** * Returns an array of elements that will be used to build launch bar short cut links. Override * this method if the intro launch bar has been marked as computed. * * @return an array of elements that will be used to dynamically build shortcut links. */ public IntroElement[] getLaunchBarShortcuts() { return new IntroElement[] {}; } /** * Resolves an incomplete path in the form "page_id/@" where page_id represents the identifier * of the target page. The configurator should complete the path according to its internal * resolution mechanism. The final path must point at an anchor in the referenced page. * * @param extensionId * the id specified for the config extension * @param path * the incomplete path specified for the config extension * @return the complete path that points at the anchor element in the referenced page, or * <code>null</code> if the path cannot be resolved or the extension should be hidden. */ public abstract String resolvePath(String extensionId, String path); /** * Returns the style value that will be mixed in with the original style of the extension. * Themes can use this feature to render certain extensions differently. * * @param pageId * the identifier of the target page that this extension is contributed into * @param extensionId * the identifier of the extension to provide the mixin style for. * @return the style to add to the original extension style or <code>null</code> if no mixin * style is found for this extension. */ public String getMixinStyle(String pageId, String extensionId) { return null; } /** * Return true if {@code pageId} is the configured start page. * * @param pageId * the page identifier * @since 3.5 */ protected boolean isStartPage(String pageId) { return pageId.equals(model.getStartPageId()); } }