/** * 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)); } }