package org.freeplane.plugin.formula;
import java.net.URL;
import java.util.Hashtable;
import org.freeplane.core.resources.ResourceController;
import org.freeplane.features.mode.Controller;
import org.freeplane.features.mode.ModeController;
import org.freeplane.features.mode.mindmapmode.MModeController;
import org.freeplane.features.text.TextController;
import org.freeplane.main.osgi.IModeControllerExtensionProvider;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
private static final String FORMULA_DISABLE_PLUGIN = "formula_disable_plugin";
private static final String FORMULA_DISABLE_CACHING = "formula_disable_caching";
private static final String MENU_BAR_PARENT_LOCATION = "/menu_bar/extras/first";
static final String MENU_BAR_LOCATION = MENU_BAR_PARENT_LOCATION + "/formula";
private final class FormulaPluginRegistration implements IModeControllerExtensionProvider {
private static final String PREFERENCES_RESOURCE = "preferences.xml";
public void installExtension(ModeController modeController) {
addPluginDefaults();
addPreferencesToOptionPanel();
final boolean disablePluginProperty = ResourceController.getResourceController().getBooleanProperty(
FORMULA_DISABLE_PLUGIN);
final EvaluateAllAction evaluateAllAction = new EvaluateAllAction();
modeController.addAction(evaluateAllAction);
if (!disablePluginProperty) {
TextController.getController(modeController).addTextTransformer(new FormulaTextTransformer(1));
// to enable Formulas in text templates:
// TextController.getController(modeController).addTextTransformer(new FormulaTextTransformer(100));
final FormulaUpdateChangeListener listener = new FormulaUpdateChangeListener();
modeController.getMapController().addNodeChangeListener(listener);
modeController.getMapController().addMapChangeListener(listener);
final boolean disableCacheProperty = ResourceController.getResourceController().getBooleanProperty(
FORMULA_DISABLE_CACHING);
if (disableCacheProperty) {
System.err.println("Formula cache disabled."
+ " This might severely impair performance when using formulas.");
}
}
else {
System.out.println("Formula plugin is disabled");
evaluateAllAction.setEnabled(false);
}
}
private void addPreferencesToOptionPanel() {
final URL preferences = this.getClass().getResource(PREFERENCES_RESOURCE);
if (preferences == null)
throw new RuntimeException("cannot open preferences");
final Controller controller = Controller.getCurrentController();
MModeController modeController = (MModeController) controller.getModeController();
modeController.getOptionPanelBuilder().load(preferences);
}
private void addPluginDefaults() {
final URL defaults = this.getClass().getResource(ResourceController.PLUGIN_DEFAULTS_RESOURCE);
if (defaults == null)
throw new RuntimeException("cannot open " + ResourceController.PLUGIN_DEFAULTS_RESOURCE);
Controller.getCurrentController().getResourceController().addDefaults(defaults);
}
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(final BundleContext context) throws Exception {
final Hashtable<String, String[]> props = new Hashtable<String, String[]>();
props.put("mode", new String[] { MModeController.MODENAME /*TODO: browse mode too?*/});
context.registerService(IModeControllerExtensionProvider.class.getName(), new FormulaPluginRegistration(),
props);
}
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(final BundleContext context) throws Exception {
}
}