Package tk.eclipse.plugin.htmleditor

Source Code of tk.eclipse.plugin.htmleditor.HTMLPlugin

package tk.eclipse.plugin.htmleditor;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

import tk.eclipse.plugin.htmleditor.views.IPaletteContributer;
import tk.eclipse.plugin.jseditor.launch.JavaScriptLaunchUtil;
import tk.eclipse.plugin.jspeditor.editors.IJSPFilter;
import tk.eclipse.plugin.jspeditor.editors.ITLDLocator;


/**
* The main plugin class to be used in the desktop.
*
* @author Naoki Takezoe
* @author Tom Wickham-Jones
*/
public class HTMLPlugin extends AbstractUIPlugin {
 
  //The shared instance.
  private static HTMLPlugin plugin;
  //Resource bundle.
  private ResourceBundle resourceBundle;
  //Color Provider
  private ColorProvider colorProvider;
 
  public static final String ICON_HTML     = "_icon_html";
  public static final String ICON_XML      = "_icon_xml";
  public static final String ICON_JSP      = "_icon_jsp";
  public static final String ICON_CSS      = "_icon_css";
  public static final String ICON_WEB      = "_icon_web";
  public static final String ICON_FILE     = "_icon_file";
  public static final String ICON_TAG      = "_icon_tag";
  public static final String ICON_ATTR     = "_icon_attribute";
  public static final String ICON_VALUE    = "_icon_value";
  public static final String ICON_FOLDER   = "_icon_folder";
  public static final String ICON_BUTTON   = "_icon_button";
  public static final String ICON_TEXT     = "_icon_text";
  public static final String ICON_RADIO    = "_icon_radio";
  public static final String ICON_CHECK    = "_icon_check";
  public static final String ICON_SELECT   = "_icon_select";
  public static final String ICON_TEXTAREA = "_icon_textarea";
  public static final String ICON_TABLE    = "_icon_table";
  public static final String ICON_COLUMN   = "_icon_column";
  public static final String ICON_LABEL    = "_icon_label";
  public static final String ICON_PASS     = "_icon_pass";
  public static final String ICON_LIST     = "_icon_list";
  public static final String ICON_PANEL    = "_icon_panel";
  public static final String ICON_LINK     = "_icon_link";
  public static final String ICON_HIDDEN   = "_icon_hidden";
  public static final String ICON_OUTPUT   = "_icon_output";
  public static final String ICON_CSS_RULE = "_icon_css_rule";
  public static final String ICON_CSS_PROP = "_icon_css_prop";
  public static final String ICON_PROPERTY = "_icon_property";
  public static final String ICON_FORWARD  = "_icon_forward";
  public static final String ICON_BACKWARD = "_icon_backword";
  public static final String ICON_REFRESH  = "_icon_refresh";
  public static final String ICON_RUN      = "_icon_run";
  public static final String ICON_TAG_HTML = "_icon_html";
  public static final String ICON_TITLE    = "_icon_title";
  public static final String ICON_FORM     = "_icon_form";
  public static final String ICON_IMAGE    = "_icon_image";
  public static final String ICON_COMMENT  = "_icon_comment";
  public static final String ICON_BODY     = "_icon_body";
  public static final String ICON_DOCTYPE  = "_icon_doctype";
  public static final String ICON_ELEMENT  = "_icon_element";
  public static final String ICON_ATTLIST  = "_icon_attlist";
  public static final String ICON_NOTATE   = "_icon_notate";
  public static final String ICON_ENTITY   = "_icon_entity";
  public static final String ICON_FUNCTION = "_icon_function";
  public static final String ICON_VARIABLE = "_icon_variable";
  public static final String ICON_CLASS    = "_icon_class";
  public static final String ICON_TEMPLATE = "_icon_template";
  public static final String ICON_JAVASCRIPT = "_icon_javascript";
  public static final String ICON_XSD      = "_icon_xsd";
  public static final String ICON_DTD      = "_icon_dtd";
  public static final String ICON_PALETTE  = "_icon_palette";
  public static final String ICON_ERROR    = "_icon_error";
  public static final String ICON_JAR      = "_icon_jar";
  public static final String ICON_JAR_EXT  = "_icon_jar_ext";
  public static final String ICON_INTERFACE = "_icon_interface";
  public static final String ICON_PACKAGE  = "_icon_package";
 
  public static final String PREF_COLOR_ATTRIBUTE  = "_pref_color_attribute";
  public static final String PREF_COLOR_TAG        = "_pref_color_tag";
  public static final String PREF_COLOR_WO_TAG     = "_pref_color_wo_tag";
  public static final String PREF_COLOR_COMMENT    = "_pref_color_comment";
  public static final String PREF_COLOR_STRING     = "_pref_color_string";
  public static final String PREF_COLOR_DOCTYPE    = "_pref_color_doctype";
  public static final String PREF_COLOR_SCRIPT     = "_pref_color_scriptlet";
  public static final String PREF_COLOR_OGNL       = "_pref_color_ognl";
  public static final String PREF_COLOR_DYNAMIC    = "_pref_color_dynamic";
  public static final String PREF_COLOR_CSSPROP    = "_pref_color_cssprop";
  public static final String PREF_COLOR_CSSCOMMENT = "_pref_color_csscomment";
  public static final String PREF_COLOR_CSSVALUE   = "_pref_color_cssvalue";
  public static final String PREF_EDITOR_TYPE      = "_pref_editor_type";
  public static final String PREF_DTD_URI          = "_pref_dtd_uri";
  public static final String PREF_DTD_PATH         = "_pref_dtd_path";
  public static final String PREF_DTD_CACHE        = "_pref_dtd_cache";
  public static final String PREF_ASSIST_AUTO      = "_pref_assist_auto";
  public static final String PREF_ASSIST_CHARS     = "_pref_assist_chars";
  public static final String PREF_ASSIST_TIMES     = "_pref_assist_times";
  public static final String PREF_ASSIST_CLOSE     = "_pref_assist_close";
  public static final String PREF_PALETTE_ITEMS    = "_pref_palette_items";
  public static final String PREF_USE_SOFTTAB      = "_pref_use_softtab";
  public static final String PREF_SOFTTAB_WIDTH    = "_pref_softtab_width";
  public static final String PREF_COLOR_BG         = "AbstractTextEditor.Color.Background";
  public static final String PREF_COLOR_BG_DEF     = "AbstractTextEditor.Color.Background.SystemDefault";
  public static final String PREF_COLOR_FG         = "__pref_color_foreground";
  public static final String PREF_TLD_URI          = "__pref_tld_uri";
  public static final String PREF_TLD_PATH         = "__pref_tld_path";
  public static final String PREF_JSP_COMMENT      = "__pref_jsp_comment";
  public static final String PREF_JSP_KEYWORD      = "__pref_jsp_keyword";
  public static final String PREF_JSP_STRING       = "__pref_jsp_string";
  public static final String PREF_PAIR_CHAR        = "__pref_pair_character";
  public static final String PREF_SHOW_XML_ERRORS  = "__pref_show_xml_errors";
  public static final String PREF_COLOR_JSSTRING   = "__pref_color_jsstring";
  public static final String PREF_COLOR_JSKEYWORD  = "__pref_color_jskeyword";
  public static final String PREF_COLOR_JSCOMMENT  = "__pref_color_jscomment";
  public static final String PREF_CUSTOM_ATTRS     = "__pref_custom_attributes";
  public static final String PREF_CUSTOM_ELEMENTS  = "__pref_custom_elements";
  public static final String PREF_TASK_TAGS        = "__pref_task_tags";
  public static final String PREF_ENABLE_CLASSNAME = "__pref_enable_classname";
  public static final String PREF_CLASSNAME_ATTRS  = "__pref_classname_attrs";
  public static final String PREF_SCHEMA_MAPPINGS  = "__pref_schema_mappings";

  public static final String PREF_TEMPLATE_COMPACT_VIEW  = "_pref_template_compact_view";

 
  public static final String[] SUPPORTED_IMAGE_TYPES = {
      "gif","png","jpg","jpeg","bmp"
  };
 
  private static Map<String, String> innerDTD = new LinkedHashMap<String, String>();
  static {
    innerDTD.put("http://java.sun.com/j2ee/dtds/web-app_2_2.dtd","/DTD/web-app_2_2.dtd");
    innerDTD.put("http://java.sun.com/dtd/web-app_2_3.dtd","/DTD/web-app_2_3.dtd");
    innerDTD.put("http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd","/DTD/web-jsptaglibrary_1_1.dtd");
    innerDTD.put("http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd","/DTD/web-jsptaglibrary_1_2.dtd");
    innerDTD.put("XMLSchema.dtd","/DTD/XMLSchema.dtd");
    innerDTD.put("datatypes.dtd","/DTD/datatypes.dtd");
   
    innerDTD.put("http://java.sun.com/xml/ns/j2ee","/XSD/web-app_2_4.xsd");
    innerDTD.put("j2ee_1_4.xsd","/XSD/j2ee_1_4.xsd");
    innerDTD.put("j2ee_web_services_1_1.xsd","/XSD/j2ee_web_services_1_1.xsd");
    innerDTD.put("j2ee_web_services_client_1_1.xsd","/XSD/j2ee_web_services_client_1_1.xsd");
    innerDTD.put("jsp_2_0.xsd","/XSD/jsp_2_0.xsd");
    innerDTD.put("jspxml.xsd","/XSD/jspxml.xsd");
    innerDTD.put("web-app_2_4.xsd","/XSD/web-app_2_4.xsd");
    innerDTD.put("web-jsptaglibrary_2_0.xsd","/XSD/web-jsptaglibrary_2_0.xsd");
    innerDTD.put("xml.xsd","/XSD/xml.xsd");
  }
 
  private static Map<String, String> innerTLD = new LinkedHashMap<String, String>();
  static {
    innerTLD.put("http://java.sun.com/jstl/core_rt","/TLD/c-1_0-rt.tld");
    innerTLD.put("http://java.sun.com/jstl/core","/TLD/c-1_0.tld");
    innerTLD.put("http://java.sun.com/jsp/jstl/core","/TLD/c.tld");
    innerTLD.put("http://java.sun.com/jstl/fmt_rt","/TLD/fmt-1_0-rt.tld");
    innerTLD.put("http://java.sun.com/jstl/fmt","/TLD/fmt-1_0.tld");
    innerTLD.put("http://java.sun.com/jsp/jstl/fmt","/TLD/fmt.tld");
//    innerTLD.put("http://java.sun.com/jsp/jstl/functions","/TLD/fn.tld");
    innerTLD.put("http://java.sun.com/jstl/sql_rt","/TLD/sql-1_0-rt.tld");
    innerTLD.put("http://java.sun.com/jstl/sql","/TLD/sql-1_0.tld");
    innerTLD.put("http://java.sun.com/jsp/jstl/sql","/TLD/sql.tld");
    innerTLD.put("http://java.sun.com/jstl/xml_rt","/TLD/x-1_0-rt.tld");
    innerTLD.put("http://java.sun.com/jstl/xml","/TLD/x-1_0.tld");
    innerTLD.put("http://java.sun.com/jsp/jstl/xml","/TLD/x.tld");
  }
 
  /**
   * The constructor.
   */
  public HTMLPlugin() {
    super();
    plugin = this;
    try {
      resourceBundle = ResourceBundle.getBundle("tk.eclipse.plugin.htmleditor.HTMLPluginResources");
    } catch (MissingResourceException x) {
      resourceBundle = null;
    }
  }
 
  public String getPluginId(){
    return getBundle().getSymbolicName();
  }
 
  public ColorProvider getColorProvider(){
    return this.colorProvider;
  }
 
  public static Map<String, String> getInnerDTD(){
    return innerDTD;
  }
 
  public static Map<String, String> getInnerTLD(){
    return innerTLD;
  }
 
  /**
   * This method is called upon plug-in activation
   */
  @Override
  public void start(BundleContext context) throws Exception {
    super.start(context);
    colorProvider = new ColorProvider(getPreferenceStore());
  }
 
  @Override
  protected void initializeImageRegistry(ImageRegistry reg) {
    super.initializeImageRegistry(reg);
    reg.put(ICON_HTML,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/html.png")));
    reg.put(ICON_XML,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/xml.png")));
    reg.put(ICON_JSP,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/jsp.png")));
    reg.put(ICON_CSS,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/css.png")));
    reg.put(ICON_WEB,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/web.gif")));
    reg.put(ICON_FILE,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/file.gif")));
    reg.put(ICON_TAG,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/tag.gif")));
    reg.put(ICON_ATTR,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/attribute.gif")));
    reg.put(ICON_VALUE,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/value.gif")));
    reg.put(ICON_FOLDER,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/folder.gif")));
    reg.put(ICON_BUTTON,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/button.gif")));
    reg.put(ICON_TEXT,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/text.gif")));
    reg.put(ICON_RADIO,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/radio.gif")));
    reg.put(ICON_CHECK,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/checkbox.gif")));
    reg.put(ICON_SELECT,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/select.gif")));
    reg.put(ICON_TEXTAREA,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/textarea.gif")));
    reg.put(ICON_TABLE,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/table.gif")));
    reg.put(ICON_COLUMN,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/column.gif")));
    reg.put(ICON_LABEL,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/label.gif")));
    reg.put(ICON_PASS,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/password.gif")));
    reg.put(ICON_LIST,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/list.gif")));
    reg.put(ICON_PANEL,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/panel.gif")));
    reg.put(ICON_LINK,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/link.gif")));
    reg.put(ICON_HIDDEN,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/hidden.gif")));
    reg.put(ICON_OUTPUT,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/output.gif")));
    reg.put(ICON_CSS_RULE,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/css_rule.gif")));
    reg.put(ICON_CSS_PROP,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/css_prop.gif")));
    reg.put(ICON_PROPERTY,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/properties.gif")));
    reg.put(ICON_FORWARD,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/forward.gif")));
    reg.put(ICON_BACKWARD,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/backward.gif")));
    reg.put(ICON_REFRESH,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/refresh.gif")));
    reg.put(ICON_RUN,ImageDescriptor.createFromURL(getBundle().getEntry("/icons/run.gif")));
    reg.put(ICON_BODY, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/body.gif")));
    reg.put(ICON_FORM, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/form.gif")));
    reg.put(ICON_TAG_HTML, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/html.gif")));
    reg.put(ICON_IMAGE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/image.gif")));
    reg.put(ICON_TITLE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/title.gif")));
    reg.put(ICON_COMMENT, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/comment.gif")));
    reg.put(ICON_DOCTYPE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/doctype.gif")));
    reg.put(ICON_ENTITY, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/entity.gif")));
    reg.put(ICON_ATTLIST, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/attlist.gif")));
    reg.put(ICON_ELEMENT, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/element.gif")));
    reg.put(ICON_NOTATE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/notation.gif")));
    reg.put(ICON_FUNCTION, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/function.gif")));
    reg.put(ICON_VARIABLE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/var.gif")));
    reg.put(ICON_CLASS, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/class.gif")));
    reg.put(ICON_TEMPLATE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/template.gif")));
    reg.put(ICON_JAVASCRIPT, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/javascript.gif")));
    reg.put(ICON_XSD, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/xsd.gif")));
    reg.put(ICON_DTD, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/dtd.gif")));
    reg.put(ICON_PALETTE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/palette.gif")));
    reg.put(ICON_ERROR, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/error.gif")));
    reg.put(ICON_JAR, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/jar.gif")));
    reg.put(ICON_JAR_EXT, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/jar_ext.gif")));
    reg.put(ICON_INTERFACE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/interface.gif")));
    reg.put(ICON_PACKAGE, ImageDescriptor.createFromURL(getBundle().getEntry("/icons/package.gif")));
  }
 
  /**
   * This method is called when the plug-in is stopped
   */
  @Override
  public void stop(BundleContext context) throws Exception {
    JavaScriptLaunchUtil.removeLibraries();
    colorProvider.dispose();
    super.stop(context);
  }

  /**
   * Returns the shared instance.
   */
  public static HTMLPlugin getDefault() {
    return plugin;
  }

  /**
   * Returns the string from the plugin's resource bundle,
   * or 'key' if not found.
   */
  public static String getResourceString(String key) {
    ResourceBundle bundle = HTMLPlugin.getDefault().getResourceBundle();
    try {
      return (bundle != null) ? bundle.getString(key) : key;
    } catch (MissingResourceException e) {
      return key;
    }
  }

  /**
   * Returns the plugin's resource bundle,
   */
  public ResourceBundle getResourceBundle() {
    return resourceBundle;
  }
 
  /**
   * Open the alert dialog.
   * @param message message
   */
  public static void openAlertDialog(String message){
    MessageBox box = new MessageBox(Display.getCurrent().getActiveShell(),SWT.NULL|SWT.ICON_ERROR);
    box.setMessage(message);
    box.setText(getResourceString("ErrorDialog.Caption"));
    box.open();
  }
 
  /**
   * Generates a message from a template and parameters.
   * Replace template {0}{1}.. with parameters�B
   *
   * @param message message
   * @param params  parameterd
   * @return generated message
   */
  public static String createMessage(String message,String[] params){
    for(int i=0;i<params.length;i++){
      message = message.replaceAll("\\{"+i+"\\}",params[i]);
    }
    return message;
  }
 
  /**
   * Logging debug information.
   *
   * @param message message
   */
  public static void logDebug(String message){
    ILog log = getDefault().getLog();
    IStatus status = new Status(IStatus.INFO,getDefault().getPluginId(),0,message,null);
    log.log(status);
  }
 
  /**
   * Logging error information.
   *
   * @param message message
   */
  public static void logError(String message){
    ILog log = getDefault().getLog();
    IStatus status = new Status(IStatus.ERROR,getDefault().getPluginId(),0,message,null);
    log.log(status);
  }
 
  /**
   * Logging exception information.
   *
   * @param ex exception
   */
  public static void logException(Throwable ex){
    ILog log = getDefault().getLog();
    IStatus status = null;
    if(ex instanceof CoreException){
      status = ((CoreException)ex).getStatus();
    } else {
      status = new Status(IStatus.ERROR,getDefault().getPluginId(),0,ex.toString(),ex);
    }
    log.log(status);
   
    // TODO debug
    ex.printStackTrace();
  }
 
  /////////////////////////////////////////////////////////////////////////////////
  // Methods for extention points
  /////////////////////////////////////////////////////////////////////////////////
 
  private String[] noValidationNatureIds;
 
  public String[] getNoValidationNatureId(){
    if(noValidationNatureIds==null){
      List<String> list = new ArrayList<String>();
      IExtensionRegistry registry = Platform.getExtensionRegistry();
      IExtensionPoint point = registry.getExtensionPoint(getPluginId() + ".noValidationNatures");
      IExtension[] extensions = point.getExtensions();
      for(int i=0;i<extensions.length;i++){
        IConfigurationElement[] elements = extensions[i].getConfigurationElements();
        for (int j = 0; j < elements.length; j++) {
          if ("noValidationNature".equals(elements[j].getName())) {
            String natureId = elements[j].getAttribute("natureId");
            list.add(natureId);
          }
        }
      }
      noValidationNatureIds = list.toArray(new String[list.size()]);
    }
    return noValidationNatureIds;
  }
 
  /**
   * Returns contributed IFileAssistProcessor.
   */
  public IFileAssistProcessor[] getFileAssistProcessors(){
    List<IFileAssistProcessor> list = loadContributedClasses("fileAssistProcessor", "processor");
    return list.toArray(new IFileAssistProcessor[list.size()]);
  }

 
  /** This contains URI and ICustomTagConverterContributer */
  private HashMap<String, ICustomTagConverterContributer> converterContributers = null;
 
  /**
   * Returns contributed ICustomTagConverterContributer.
   */
  public ICustomTagConverterContributer getCustomTagContributer(String uri){
    try {
      if(converterContributers==null){
        converterContributers = new HashMap<String, ICustomTagConverterContributer>();
        IExtensionRegistry registry = Platform.getExtensionRegistry();
        IExtensionPoint point = registry.getExtensionPoint(getPluginId() + ".customTagConverter");
        IExtension[] extensions = point.getExtensions();
        for(int i=0;i<extensions.length;i++){
          IConfigurationElement[] elements = extensions[i].getConfigurationElements();
          for (int j = 0; j < elements.length; j++) {
            if ("contributer".equals(elements[j].getName())) {
              String contributerUri = elements[j].getAttribute("uri");
              ICustomTagConverterContributer contributer = (ICustomTagConverterContributer) elements[j].createExecutableExtension("class");
              converterContributers.put(contributerUri,contributer);
            }
          }
        }
      }
      return converterContributers.get(uri);
    } catch(Exception ex){
      logException(ex);
      return null;
    }
  }
 
  /** List of ICustomTagAttributeAssist */
  private List<ICustomTagAttributeAssist> customTagAttrAssists = null;

  /**
   * Returns contributed ICustomTagAttributeAssist.
   */
  public ICustomTagAttributeAssist[] getCustomTagAttributeAssists(){
    if(customTagAttrAssists==null){
      customTagAttrAssists = loadContributedClasses("customTagAttributeAssist", "customTagAttributeAssist");
    }
    return customTagAttrAssists.toArray(new ICustomTagAttributeAssist[customTagAttrAssists.size()]);
  }
 
  /** List of IHyperlinkProvider */
  private List<IHyperlinkProvider> hyperlinkProviders = null;
 
  /**
   * Returns contributed IHyperlinkProvider.
   */
  public IHyperlinkProvider[] getHyperlinkProviders(){
    if(hyperlinkProviders==null){
      hyperlinkProviders = loadContributedClasses("hyperlinkProvider", "provider");
    }
    return hyperlinkProviders.toArray(new IHyperlinkProvider[hyperlinkProviders.size()]);
  }
 
  /** List of IPaletteContributer */
  private HashMap<String, IPaletteContributer> palette = null;
 
  /**
   * Returns contributed IPaletteContributer which was registered as specified group name.
   */
  public IPaletteContributer getPaletteContributer(String group){
    if(palette==null){
      loadPalleteContributer();
    }
    return palette.get(group);
  }
 
  /**
   * Returns group names of contributed IPaletteContributer.
   */
  public String[] getPaletteContributerGroups(){
    if(palette==null){
      loadPalleteContributer();
    }
    return palette.keySet().toArray(new String[0]);
  }
 
  /**
   * Load informations of IPaletteContributer.
   */
  private void loadPalleteContributer(){
    try {
      palette = new HashMap<String, IPaletteContributer>();
      IExtensionRegistry registry = Platform.getExtensionRegistry();
      IExtensionPoint point = registry.getExtensionPoint(getPluginId() + ".paletteItem");
      IExtension[] extensions = point.getExtensions();
      for(int i=0;i<extensions.length;i++){
        IConfigurationElement[] elements = extensions[i].getConfigurationElements();
        for (int j = 0; j < elements.length; j++) {
          if ("contributer".equals(elements[j].getName())) {
            String group = elements[j].getAttribute("name");
            IPaletteContributer contributer = (IPaletteContributer) elements[j].createExecutableExtension("class");
            palette.put(group,contributer);
          }
        }
      }
    } catch(Exception ex){
      logException(ex);
    }
  }
 
  /** This contains URI and ICustomTagConverterContributer */
  private HashMap<String, ICustomTagValidatorContributer> validatorContributers = null;

  /**
   * Returns contributed <code>ICustomTagValidatorContributer</code>.
   */
  public ICustomTagValidatorContributer getCustomTagValidatorContributer(String uri){
    try {
      if(validatorContributers==null){
        validatorContributers = new HashMap<String, ICustomTagValidatorContributer>();
        IExtensionRegistry registry = Platform.getExtensionRegistry();
        IExtensionPoint point = registry.getExtensionPoint(getPluginId() + ".customTagValidator");
        IExtension[] extensions = point.getExtensions();
        for(int i=0;i<extensions.length;i++){
          IConfigurationElement[] elements = extensions[i].getConfigurationElements();
          for (int j = 0; j < elements.length; j++) {
            if ("contributer".equals(elements[j].getName())) {
              String contributerUri = elements[j].getAttribute("uri");
              ICustomTagValidatorContributer validator = (ICustomTagValidatorContributer) elements[j].createExecutableExtension("class");
              validatorContributers.put(contributerUri,validator);
            }
          }
        }
      }
      return validatorContributers.get(uri);
    } catch(Exception ex){
      logException(ex);
      return null;
    }
  }
 
  /** List of ITLDLocator */
  private HashSet<ITLDLocator> tldlocators = null;

  /**
   * Returns the array of contributed <code>ITLDLocator</code>s.
   */
  public ITLDLocator[] getTLDLocatorContributions(){
    if(tldlocators == null){
      loadTLDLocatorContributions();
    }
    return tldlocators.toArray(new ITLDLocator[tldlocators.size()]);
  }

  private void loadTLDLocatorContributions() {
    try {
      tldlocators = new HashSet<ITLDLocator>();
      IExtensionRegistry registry = Platform.getExtensionRegistry();
      IExtensionPoint point = registry.getExtensionPoint(getPluginId() + ".tldLocator");
      IExtension[] extensions = point.getExtensions();
      for(int i=0;i<extensions.length;i++){
        IConfigurationElement[] elements = extensions[i].getConfigurationElements();
        for (int j = 0; j < elements.length; j++) {
          if ("contributer".equals(elements[j].getName())) {
            //String group = elements[j].getAttribute("name");
            ITLDLocator contributer = (ITLDLocator) elements[j].createExecutableExtension("class");
            tldlocators.add(contributer);
          }
        }
      }
    } catch(Exception ex){
      logException(ex);
    }
  }
 
 
  /*
   * Collect Filters contributed by other plugins
   * @since 2.0.5
   */
  private IJSPFilter[] jspFilters = null;
 
  /**
   * Returns the array of contributed <code>IJSPFilter</code>s.
   *
   * @since 2.0.5
   */
  public IJSPFilter[] getJSPFilters() {
    if (jspFilters != null) {
      return jspFilters;
    }
   
    List<IJSPFilter> filters = loadContributedClasses("pagefilter", "jspfilter");
    jspFilters = filters.toArray(new IJSPFilter[filters.size()]);

    return jspFilters;
  }
 
  /**
   * @since 2.0.5
   */
  @SuppressWarnings("unchecked")
  private static <T> List<T> loadContributedClasses(String extPointId, String elementName){
    List<T> result = new ArrayList<T>();
    try {
      IExtensionRegistry registry = Platform.getExtensionRegistry();
      IExtensionPoint point = registry.getExtensionPoint(getDefault().getPluginId() + "." + extPointId);
      IExtension[] extensions = point.getExtensions();
      for (int i = 0; i < extensions.length; i++) {
        IConfigurationElement[] elements = extensions[i].getConfigurationElements();
        for (int j = 0; j < elements.length; j++) {
          if (elementName.equals(elements[j].getName())) {
            result.add((T)elements[j].createExecutableExtension("class"));
          }
        }
      }
    } catch (Exception ex) {
      logException(ex);
    }
    return result;
  }
 
 
}
TOP

Related Classes of tk.eclipse.plugin.htmleditor.HTMLPlugin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.