Package org.cfeclipse.cfml

Source Code of org.cfeclipse.cfml.CFMLPlugin

/*
* Created on Jan 29, 2004
*
* The MIT License
* Copyright (c) 2004 Rob Rohan
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software
* is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package org.cfeclipse.cfml;

import java.io.File;
import java.io.IOException;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.apache.log4j.PropertyConfigurator;
import org.cfeclipse.cfml.console.ConsoleUtil;
import org.cfeclipse.cfml.dictionary.DictionaryManager;
import org.cfeclipse.cfml.editors.actions.LastActionManager;
import org.cfeclipse.cfml.editors.contentassist.CFContentAssist;
import org.cfeclipse.cfml.editors.contentassist.CFEContentAssistManager;
import org.cfeclipse.cfml.editors.contentassist.CFMLArgumentAssist;
import org.cfeclipse.cfml.editors.contentassist.CFMLComponentAssist;
import org.cfeclipse.cfml.editors.contentassist.CFMLFunctionCompletionProcessor;
import org.cfeclipse.cfml.editors.contentassist.CFMLFunctionParamAssist;
import org.cfeclipse.cfml.editors.contentassist.CFMLScopeAssist;
import org.cfeclipse.cfml.editors.contentassist.CFMLTagAssist;
import org.cfeclipse.cfml.editors.contentassist.CFMLVariableAssist;
import org.cfeclipse.cfml.editors.contentassist.HTMLTagAssistContributor;
import org.cfeclipse.cfml.editors.contentassist.TemplateAssist;
import org.cfeclipse.cfml.images.StartupHandler;
import org.cfeclipse.cfml.model.CFModelChangeEvent;
import org.cfeclipse.cfml.preferences.CFMLPreferenceManager;
import org.cfeclipse.cfml.properties.CFMLPropertyManager;
import org.cfeclipse.cfml.templates.template.CFScriptTemplateContextType;
import org.cfeclipse.cfml.templates.template.CFTemplateContextType;
import org.cfeclipse.cfml.util.CFPluginImages;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.resources.WorkspaceJob;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.text.templates.ContextTypeRegistry;
import org.eclipse.jface.text.templates.persistence.TemplateStore;
import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry;
import org.eclipse.ui.editors.text.templates.ContributionTemplateStore;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

import cfml.parsing.CFMLParser;

/**
*
* The CFEclipse plugin itself.
*
* Also see 'Simple plug-in example' in the Platform Plug-in Developer Guide
* that comes with the SDK version of Eclipse.
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin
* @author Rob
*/
public class CFMLPlugin extends AbstractUIPlugin {

  public static final String PLUGIN_ID = "org.cfeclipse.cfml";
  public static final String CONSOLE_NAME = "CFEclipse";

  /** Singleton instance so that everything can access the plugin */
  private static CFMLPlugin plugin;

  /** The bundle of resources for the plugin */
  private ResourceBundle resourceBundle;

  /** The preferences for the plugin. */
  private PreferenceStore propertyStore;

  /** Content Assist Manager */
  private CFEContentAssistManager camInstance;

  /** Last Encloser Manager */
  private LastActionManager lastEncMgrInstance;

  /** Storage for the Templates */
  private static final String CUSTOM_TEMPLATES_KEY = "org.cfeclipse.cfml.customtemplates"; //$NON-NLS-1$
  private static final String LAST_PLUGIN_VERSION = "__lastPluginVersion";
  private static final String SHOW_WELCOME = "__showWelcome";
  private TemplateStore fStore;
  private ContributionContextTypeRegistry fRegistry;

  /**
   * Returns the global Content Assist Manager.
   *
   * @see org.cfeclipse.cfml.editors.contentassist.CFEContentAssistManager
   * @return The CAM instance
   *
   */
  public CFEContentAssistManager getGlobalCAM() {

    if (this.camInstance == null) {
      throw new IllegalArgumentException("CFMLPlugin::getGlobalCAM() camInstance is null");
    }
    return this.camInstance;
  }

  /**
   * Returns the Last Encloser Manager.
   *
   * @see org.cfeclipse.cfml.editors.actions.LastActionManager
   * @return The LastActionManager instance
   *
   */
  public LastActionManager getLastActionManager() {
    if (this.camInstance == null) {
      throw new IllegalArgumentException("CFMLPlugin::getGlobalCAM() camInstance is null");
    }
    return this.lastEncMgrInstance;
  }

  /**
   * create a new cfml plugin
   */
  public CFMLPlugin() {
    super();
    plugin = this;
    try {
      this.resourceBundle = ResourceBundle.getBundle("plugin");
    } catch (MissingResourceException x) {
      x.printStackTrace(System.err);
      this.resourceBundle = null;
    }
  }

  /**
   * This method is called upon plug-in activation. Seems like most startup
   * stuff should now go here.
   */
  public void start(BundleContext context) throws Exception {
    super.start(context);

    /*
     * //System.out.println( "Property store file set to " +
     * CFMLPlugin.getDefault().getStateLocation().toString() +
     * "/properties.ini" );
     */

    PropertyConfigurator.configure(CFMLPlugin.getDefault().getBundle().getEntry("/lib/log4j.properties"));
    this.propertyStore = new PreferenceStore(CFMLPlugin.getDefault().getStateLocation().toString()
        + "/properties.ini");

    String defaultSnippetPath = CFMLPlugin.getDefault().getStateLocation().toString() + "/snippets";

    File f = new File(defaultSnippetPath);
    if (!f.exists()) {
      f.mkdir();
    }

    try {
      // load all the syntax dictionaries
      DictionaryManager.initDictionaries();

      // startup the image hovers lazily so plugin starts fast
      Job job = new WorkspaceJob("Initializing Image Hovers") {
        public IStatus runInWorkspace(IProgressMonitor monitor) {
          StartupHandler startupHandler = new StartupHandler();
          startupHandler.earlyStartup();
          if (monitor.isCanceled()) return Status.CANCEL_STATUS;
          return Status.OK_STATUS;
        }
      };
      job.schedule(3000);
      // startup the image registry in job so doesn't slow down init
      CFPluginImages.initCFPluginImages();

      setupCAM();
      setupLastEncMgr();
      checkForPluginVersionChange();
    } catch (Exception e) {
      // lots of bad things can happen...
      e.printStackTrace(System.err);
    }

    // EditorPartListener editorListener = new EditorPartListener();
    // doesn't seem to be needed and is causing errors. Leaving in case 3.4
    // needs it-- if so, rethink
    // this.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(editorListener);

  }

  private void checkForPluginVersionChange() {
    String currentVersion = (String) Platform.getBundle(getBundle().getSymbolicName()).getHeaders().get("Bundle-Version");
    String lastVersion = getPreferenceStore().getString(LAST_PLUGIN_VERSION);
    if(lastVersion == null || lastVersion.length() == 0 || !lastVersion.equals(currentVersion)) {
      getPreferenceStore().setValue(SHOW_WELCOME,true);
      UrlViewer htmlViewer = new UrlViewer();
      String whatsNewURL = CFMLPlugin.PLUGIN_ID + "/doc/intro/doc/new.html";
      htmlViewer.loadHelp(whatsNewURL);
    } else {
      getPreferenceStore().setValue(SHOW_WELCOME,false);     
    }
    getPreferenceStore().setValue(LAST_PLUGIN_VERSION,currentVersion);   
  }

  /**
   * Setups up the Content Assist Manager
   *
   */
  public void setupCAM() {
    this.camInstance = newCAM();
  }

  /**
   * Returns a new Content Assist Manager
   *
   */
  public CFEContentAssistManager newCAM() {
    CFEContentAssistManager camInstance = new CFEContentAssistManager();
    CFMLTagAssist cfmlAssistor = new CFMLTagAssist(DictionaryManager.getDictionary(DictionaryManager.CFDIC));
    HTMLTagAssistContributor htmlAssistor = new HTMLTagAssistContributor(DictionaryManager
        .getDictionary(DictionaryManager.HTDIC));

    camInstance.registerRootAssist(new CFContentAssist());
    camInstance.registerRootAssist(new CFMLScopeAssist());
    camInstance.registerRootAssist(new CFMLArgumentAssist());
    CFMLFunctionCompletionProcessor cfscp = new CFMLFunctionCompletionProcessor();
    camInstance.registerRootAssist(cfscp);
    camInstance.registerRootAssist(new CFMLFunctionParamAssist());

    camInstance.registerRootAssist(new CFMLComponentAssist());
    // //finds the components in a project, removed as we might use a new
    // CFML Varscope parser
    // finds the arguments in a cfc that you are talking about
    camInstance.registerRootAssist(new CFMLVariableAssist());
    // template assist
    camInstance.registerRootAssist(new TemplateAssist());

    camInstance.registerTagAssist(cfmlAssistor);
    camInstance.registerAttributeAssist(cfmlAssistor);
    camInstance.registerValueAssist(cfmlAssistor);

    camInstance.registerTagAssist(htmlAssistor);
    camInstance.registerAttributeAssist(htmlAssistor);
    camInstance.registerValueAssist(htmlAssistor);

    camInstance.registerTagAssist(new CFMLScopeAssist());
    return camInstance;
  }

  /**
   * Sets up the Last Encloser Manager
   *
   */
  private void setupLastEncMgr() {
    this.lastEncMgrInstance = new LastActionManager();
  }

  /**
   * This method is called when the plug-in is stopped
   */
  public void stop(BundleContext context) throws Exception {
    super.stop(context);
  }

  protected void initializeDefaultPluginPreferences() {

    // super.initializeDefaultPluginPreferences();
    CFMLPreferenceManager preferenceManager = new CFMLPreferenceManager();
    preferenceManager.initializeDefaultValues();

    try {
      CFMLPropertyManager propertyManager = new CFMLPropertyManager();
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println(e);
    }
  }

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

  public PreferenceStore getPropertyStore() {
    return this.propertyStore;
  }

  /**
   * Returns the workspace instance.
   */
  public static IWorkspace getWorkspace() {
    return ResourcesPlugin.getWorkspace();
  }

  public static CFMLParser newCFMLParser(String dict) {
    CFMLPropertyManager propertyManager = new CFMLPropertyManager();
    CFMLParser parser = new CFMLParser(propertyManager.getDictionaryDir(), dict);
    return parser;
  }

  /**
   * Returns the string from the plugin's resource bundle, or 'key' if not
   * found.
   */
  public static String getResourceString(String key) {
    ResourceBundle bundle = CFMLPlugin.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 this.resourceBundle;
  }

  public TemplateStore getTemplateStore() {
    if (fStore == null) {
      fStore = new ContributionTemplateStore(null, CFMLPlugin.getDefault().getPreferenceStore(),
          CUSTOM_TEMPLATES_KEY);
      try {
        fStore.load();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return fStore;
  }

  public ContextTypeRegistry getContextTypeRegistry() {
    if (fRegistry == null) {
      // create an configure the contexts available in the template editor
      fRegistry = new ContributionContextTypeRegistry();
      fRegistry.addContextType(CFTemplateContextType.XML_CONTEXT_TYPE);
      fRegistry.addContextType(CFScriptTemplateContextType.CFSCRIPT_CONTEXT_TYPE);
    }
    return fRegistry;
  }
 
  public static void log(String msg) {
    ConsoleUtil.printInfo(CONSOLE_NAME, msg);
  }

  public static void logError(String msg) {
    ConsoleUtil.printError(CONSOLE_NAME, msg);
  }

  public void notifyCFModelListeners(CFModelChangeEvent cfModelChangeEvent) {
    // TODO Auto-generated method stub
   
  }

}
TOP

Related Classes of org.cfeclipse.cfml.CFMLPlugin

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.