/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.ui.internal.application; import java.io.File; import java.text.MessageFormat; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.DialogSettings; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.preference.PreferenceStore; 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 { // The plug-in ID public static final String PLUGIN_ID = "org.eclipsetrader.ui.application"; // The shared instance private static Activator plugin; /** * The constructor */ public Activator() { } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ @Override public void start(BundleContext context) throws Exception { super.start(context); plugin = this; // TODO Remove after 1.0 release migrateSettings(); migrateDialogSections(); migrateFiles(); // ----------------------------- } private void migrateFiles() throws Exception { IPath workspacePath = Platform.getLocation().append(".metadata").append(".plugins"); File file = workspacePath.append("org.eclipsetrader.core.trading").append("alerts.xml").toFile(); if (file.exists()) { File destinationFile = workspacePath.append("org.eclipsetrader.core").append("alerts.xml").toFile(); if (!destinationFile.exists()) { destinationFile.getParentFile().mkdirs(); } else { destinationFile.delete(); } file.renameTo(destinationFile); } file = workspacePath.append("org.eclipsetrader.core.trading").append("market_brokers.xml").toFile(); if (file.exists()) { File destinationFile = workspacePath.append("org.eclipsetrader.core").append("market_brokers.xml").toFile(); if (!destinationFile.exists()) { destinationFile.getParentFile().mkdirs(); } else { destinationFile.delete(); } file.renameTo(destinationFile); } } private void migrateSettings() throws Exception { IPath workspacePath = Platform.getLocation().append(".metadata").append(".plugins").append("org.eclipse.core.runtime").append(".settings"); File preferencesFile = workspacePath.append("org.eclipsetrader.ui.prefs").toFile(); PreferenceStore preferences = new PreferenceStore(preferencesFile.toString()); if (preferencesFile.exists()) { preferences.load(); } File legacyPreferencesFile = workspacePath.append("org.eclipsetrader.ui.charts.prefs").toFile(); if (legacyPreferencesFile.exists()) { PreferenceStore legacyPreferences = new PreferenceStore(legacyPreferencesFile.toString()); legacyPreferences.load(); for (String name : legacyPreferences.preferenceNames()) { preferences.putValue(name, legacyPreferences.getString(name)); } legacyPreferencesFile.delete(); } legacyPreferencesFile = workspacePath.append("org.eclipsetrader.ui.trading.prefs").toFile(); if (legacyPreferencesFile.exists()) { PreferenceStore legacyPreferences = new PreferenceStore(legacyPreferencesFile.toString()); legacyPreferences.load(); for (String name : legacyPreferences.preferenceNames()) { preferences.putValue(name, legacyPreferences.getString(name)); } legacyPreferencesFile.delete(); } legacyPreferencesFile = workspacePath.append("org.eclipsetrader.ui.ats.prefs").toFile(); if (legacyPreferencesFile.exists()) { PreferenceStore legacyPreferences = new PreferenceStore(legacyPreferencesFile.toString()); legacyPreferences.load(); for (String name : legacyPreferences.preferenceNames()) { preferences.putValue(name, legacyPreferences.getString(name)); } legacyPreferencesFile.delete(); } if (!preferencesFile.exists()) { preferencesFile.getParentFile().mkdirs(); } preferences.save(); } private void migrateDialogSections() throws Exception { IPath workspacePath = Platform.getLocation().append(".metadata").append(".plugins"); File dialogSettingsFile = workspacePath.append("org.eclipsetrader.ui").append("dialog_settings.xml").toFile(); DialogSettings dialogSettings = new DialogSettings("Workbench"); if (dialogSettingsFile.exists()) { dialogSettings.load(dialogSettingsFile.toString()); } File legacyDialogSettingsFile = workspacePath.append("org.eclipsetrader.ui.charts").append("dialog_settings.xml").toFile(); if (legacyDialogSettingsFile.exists()) { DialogSettings legacyDialogSettings = new DialogSettings("Workbench"); legacyDialogSettings.load(legacyDialogSettingsFile.toString()); IDialogSettings[] childSections = legacyDialogSettings.getSections(); migrateSections(childSections, dialogSettings); legacyDialogSettingsFile.delete(); } legacyDialogSettingsFile = workspacePath.append("org.eclipsetrader.ui.trading").append("dialog_settings.xml").toFile(); if (legacyDialogSettingsFile.exists()) { DialogSettings legacyDialogSettings = new DialogSettings("Workbench"); legacyDialogSettings.load(legacyDialogSettingsFile.toString()); IDialogSettings[] childSections = legacyDialogSettings.getSections(); migrateSections(childSections, dialogSettings); legacyDialogSettingsFile.delete(); } legacyDialogSettingsFile = workspacePath.append("org.eclipsetrader.ui.ats").append("dialog_settings.xml").toFile(); if (legacyDialogSettingsFile.exists()) { DialogSettings legacyDialogSettings = new DialogSettings("Workbench"); legacyDialogSettings.load(legacyDialogSettingsFile.toString()); IDialogSettings[] childSections = legacyDialogSettings.getSections(); migrateSections(childSections, dialogSettings); legacyDialogSettingsFile.delete(); } if (!dialogSettingsFile.exists()) { dialogSettingsFile.getParentFile().mkdirs(); } dialogSettings.save(dialogSettingsFile.toString()); } private void migrateSections(IDialogSettings[] sections, IDialogSettings to) { for (int i = 0; i < sections.length; i++) { IDialogSettings targetSection = to.getSection(sections[i].getName()); if (targetSection != null) { IDialogSettings[] childSections = sections[i].getSections(); migrateSections(childSections, targetSection); } else { to.addSection(sections[i]); } } } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ @Override public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } /** * Logs the given message to the platform log. * * If you have an exception in hand, call log(String, Throwable) instead. * * If you have a status object in hand call log(String, IStatus) instead. * * This convenience method is for internal use by the IDE Workbench only and * must not be called outside the IDE Workbench. * * @param message * A high level UI message describing when the problem happened. */ public static void log(String message) { getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, null)); } /** * Logs the given message and throwable to the platform log. * * If you have a status object in hand call log(String, IStatus) instead. * * This convenience method is for internal use by the IDE Workbench only and * must not be called outside the IDE Workbench. * * @param message * A high level UI message describing when the problem happened. * @param t * The throwable from where the problem actually occurred. */ public static void log(String message, Throwable t) { getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, t)); } /** * Logs the given throwable to the platform log, indicating the class and * method from where it is being logged (this is not necessarily where it * occurred). * * This convenience method is for internal use by the IDE Workbench only and * must not be called outside the IDE Workbench. * * @param clazz * The calling class. * @param methodName * The calling method name. * @param t * The throwable from where the problem actually occurred. */ public static void log(Class<?> clazz, String methodName, Throwable t) { String msg = MessageFormat.format("Exception in {0}.{1}: {2}", new Object[] { clazz.getName(), methodName, t}); //$NON-NLS-1$ getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, msg, t)); } /** * Logs the given message and status to the platform log. * * This convenience method is for internal use by the IDE Workbench only and * must not be called outside the IDE Workbench. * * @param message * A high level UI message describing when the problem happened. * May be <code>null</code>. * @param status * The status describing the problem. Must not be null. */ public static void log(String message, IStatus status) { getDefault().getLog().log(new Status(status.getSeverity(), PLUGIN_ID, status.getCode(), message, status.getException())); } }