org.absmodels.abs.plugin.Activator.java Source code

Java tutorial

Introduction

Here is the source code for org.absmodels.abs.plugin.Activator.java

Source

/** 
 * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. 
 * This file is licensed under the terms of the Modified BSD License.
 */
package org.absmodels.abs.plugin;

import static org.absmodels.abs.plugin.util.Constants.*;
import static org.absmodels.abs.plugin.util.UtilityFunctions.getDefaultPreferenceStore;

import java.util.ArrayList;

import org.absmodels.abs.plugin.util.Constants;
import org.absmodels.abs.plugin.util.UtilityFunctions;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends AbstractUIPlugin {

    private IResourceChangeListener resourceChangeTracker;

    private static class AddRemoveTracker implements IResourceChangeListener {
        private final class RebuildAbsModelJob extends WorkspaceJob {
            private final ArrayList<IResourceDelta> added;

            private RebuildAbsModelJob(ArrayList<IResourceDelta> added) {
                super(REBUILD_ABS_MODEL_JOB_NAME);
                this.added = added;
            }

            /*
             * TODO: Review--This code looks strange:
             * The changeset can refer to different projects, but apparently only a build on the last
             * delta's project is triggered? Also note that there's probably a break missing in the loop.
             */
            @Override
            public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
                IProject project = null;
                boolean absFileWasAdded = false;
                for (IResourceDelta r : added) {
                    project = r.getResource().getProject();
                    if (project.isAccessible() && project.hasNature(NATURE_ID)) {
                        if (UtilityFunctions.isABSFile(r.getResource()))
                            absFileWasAdded = true;
                    }
                }
                if (absFileWasAdded)
                    project.build(IncrementalProjectBuilder.FULL_BUILD, monitor);

                return Status.OK_STATUS;
            }
        }

        @Override
        public void resourceChanged(IResourceChangeEvent event) {
            IResourceDelta delta = event.getDelta();
            final ArrayList<IResourceDelta> removed = new ArrayList<IResourceDelta>();
            final ArrayList<IResourceDelta> added = new ArrayList<IResourceDelta>();
            try {
                delta.accept(new IResourceDeltaVisitor() {

                    @Override
                    public boolean visit(IResourceDelta delta) throws CoreException {
                        switch (delta.getKind()) {
                        case IResourceDelta.ADDED:
                            added.add(delta);
                            break;
                        case IResourceDelta.REMOVED:
                            removed.add(delta);
                            break;
                        case IResourceDelta.CHANGED:
                            break;
                        }
                        return true;
                    }
                });
            } catch (CoreException e1) {
                logException(e1);
            }
            if (removed.size() > 0) {
                new RebuildAbsModelJob(removed).schedule();
            }

            if (added.size() > 0) {
                new RebuildAbsModelJob(added).schedule();
            }
        }
    }

    // The shared instance
    private static Activator plugin;

    /**
     * The constructor
     */
    public Activator() {
        super();
        plugin = this;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
     */
    @Override
    public void start(BundleContext context) throws Exception {
        super.start(context);
        //Print SWT Stack traces in case of an SWT Error (Ticket #199)
        Device.DEBUG = true;
        Display.DEBUG = true;
        initializePreferenceStore();
        initializeColors();
        IWorkspace workspace = ResourcesPlugin.getWorkspace();
        resourceChangeTracker = new AddRemoveTracker();
        workspace.addResourceChangeListener(resourceChangeTracker, IResourceChangeEvent.POST_CHANGE);
    }

    private void setDefaultValue(String name, RGB value) {
        PreferenceConverter.setDefault(getDefaultPreferenceStore(), name, value);
    }

    private void setDefaultValue(String name, boolean value) {
        getDefaultPreferenceStore().setDefault(name, value);
    }

    private void setDefaultValue(String name, String value) {
        getDefaultPreferenceStore().setDefault(name, value);
    }

    public void initializePreferenceStore() {
        //Initialize default values of preferenceStore

        //Colors for syntax highlighting
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_KEYWORD, SYNTAXCOLOR_RGB_KEYWORD);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_STRING, SYNTAXCOLOR_RGB_STRING);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_COMMENT, SYNTAXCOLOR_RGB_COMMENT);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_FUNCTION, SYNTAXCOLOR_RGB_FUNCTION);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_DATATYPE, SYNTAXCOLOR_RGB_DATATYPE);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_VAR, SYNTAXCOLOR_RGB_VAR);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_PARAM, SYNTAXCOLOR_RGB_PARAM);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_FIELD, SYNTAXCOLOR_RGB_FIELD);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_INTERFACE, SYNTAXCOLOR_RGB_INTERFACE);
        setDefaultValue(SYNTAXCOLOR_COLOR + SYNTAXCOLOR_CONSTRUCTOR, SYNTAXCOLOR_RGB_CONSTRUCTOR);

        //Style for syntax highlighting
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_KEYWORD, true);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_STRING, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_COMMENT, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_FUNCTION, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_DATATYPE, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_VAR, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_PARAM, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_FIELD, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_INTERFACE, false);
        setDefaultValue(SYNTAXCOLOR_BOLD + SYNTAXCOLOR_CONSTRUCTOR, false);

        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_KEYWORD, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_STRING, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_COMMENT, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_FUNCTION, true);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_DATATYPE, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_VAR, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_PARAM, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_FIELD, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_INTERFACE, false);
        setDefaultValue(SYNTAXCOLOR_ITALIC + SYNTAXCOLOR_CONSTRUCTOR, true);

        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_KEYWORD, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_STRING, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_COMMENT, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_FUNCTION, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_DATATYPE, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_VAR, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_PARAM, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_FIELD, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_INTERFACE, false);
        setDefaultValue(SYNTAXCOLOR_UNDERLINE + SYNTAXCOLOR_CONSTRUCTOR, false);

        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_KEYWORD, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_STRING, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_COMMENT, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_FUNCTION, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_DATATYPE, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_VAR, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_PARAM, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_FIELD, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_INTERFACE, false);
        setDefaultValue(SYNTAXCOLOR_STRIKETHROUGH + SYNTAXCOLOR_CONSTRUCTOR, false);

        //Default Maude directory is dependent of operating system
        if (Platform.getOS().equals(Platform.OS_WIN32)) {
            setDefaultValue(MAUDE_EXEC_PATH, DEFAULT_MAUDE_EXEC_PATH_WIN32);
        } else if (Platform.getOS().equals(Platform.OS_LINUX)) {
            setDefaultValue(MAUDE_EXEC_PATH, DEFAULT_MAUDE_EXEC_PATH_LINUX);
        } else if (Platform.getOS().equals(Platform.OS_MACOSX)) {
            setDefaultValue(MAUDE_EXEC_PATH, DEFAULT_MAUDE_EXEC_PATH_MACOSX);
        } else {
            setDefaultValue(MAUDE_EXEC_PATH, DEFAULT_MAUDE_EXEC_PATH);
        }

        //      setDefaultValue(MAUDE_PARTIAL_EXECUTION, false);
        //      setDefaultValue(MAUDE_STEP_NUMBER, 0);
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
     */
    @Override
    public void stop(BundleContext context) throws Exception {
        ResourcesPlugin.getWorkspace().removeResourceChangeListener(resourceChangeTracker);
        super.stop(context);
    }

    //-------------------- INIT ------------------------------------------------------------------------------

    public static void initializeColors() {
        ColorRegistry colorRegistry = JFaceResources.getColorRegistry();
        colorRegistry.put(STYLER_COLOR_BLACK, STYLER_COLOR_BLACK_RGB);
        colorRegistry.put(STYLER_COLOR_GREY, STYLER_COLOR_GREY_RGB);
        colorRegistry.put(STYLER_COLOR_TYPES, STYLER_COLOR_TYPES_RGB);
    }

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

    public static void logException(Exception e) {
        getDefault().getLog().log(new Status(IStatus.ERROR, Constants.PLUGIN_ID, e.getMessage(), e));
    }
}