]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.message/src/org/simantics/message/internal/Activator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.message / src / org / simantics / message / internal / Activator.java
diff --git a/bundles/org.simantics.message/src/org/simantics/message/internal/Activator.java b/bundles/org.simantics.message/src/org/simantics/message/internal/Activator.java
new file mode 100644 (file)
index 0000000..9d90c42
--- /dev/null
@@ -0,0 +1,188 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.message.internal;\r
+\r
+import java.io.File;\r
+import java.util.Hashtable;\r
+\r
+import org.eclipse.core.runtime.IPath;\r
+import org.eclipse.core.runtime.Plugin;\r
+import org.eclipse.osgi.framework.log.FrameworkLog;\r
+import org.osgi.framework.BundleContext;\r
+import org.osgi.framework.ServiceRegistration;\r
+import org.simantics.message.ILogListener;\r
+import org.simantics.message.ILogger;\r
+import org.simantics.message.IMessageSchemeManager;\r
+\r
+/**\r
+ * The activator class controls the plug-in life cycle\r
+ */\r
+@SuppressWarnings("restriction")\r
+public class Activator extends Plugin {\r
+\r
+    private static final String  DEFAULT_LOG_FILE_NAME = "messages.log";\r
+\r
+    // The plug-in ID\r
+    public static final String   PLUGIN_ID             = "org.simantics.message";\r
+\r
+    private static final String  LOGGER_NAME           = "org.simantics.message.logger"; //$NON-NLS-1$\r
+\r
+    // The shared instance\r
+    private static Activator     plugin;\r
+    private BundleContext        bundleContext;\r
+\r
+    // The one and only message service instance\r
+    private Messages             messagesService;\r
+    private MessageSchemeManager messageSchemeManagerService;\r
+\r
+    @SuppressWarnings("rawtypes")\r
+    private ServiceRegistration  messages              = null;\r
+    @SuppressWarnings("rawtypes")\r
+    private ServiceRegistration  messageSchemeManager  = null;\r
+\r
+    private LogWriter            platformLog           = null;\r
+    private FrameworkLog         frameworkLog          = null;\r
+\r
+    /**\r
+     * The constructor\r
+     */\r
+    public Activator() {\r
+    }\r
+\r
+    /*\r
+     * (non-Javadoc)\r
+     * \r
+     * @see\r
+     * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext\r
+     * )\r
+     */\r
+    @SuppressWarnings({ "rawtypes", "unchecked" })\r
+    @Override\r
+    public void start(BundleContext context) throws Exception {\r
+        super.start(context);\r
+        this.bundleContext = context;\r
+\r
+        messagesService = new Messages();\r
+        messageSchemeManagerService = new MessageSchemeManager();\r
+\r
+        messages = bundleContext.registerService(ILogger.class.getName(), messagesService, new Hashtable());\r
+        messageSchemeManager = bundleContext.registerService(IMessageSchemeManager.class.getName(), messageSchemeManagerService, new Hashtable<String, Object>());\r
+\r
+        // Attach a writer listener to the Messages ILog to actually get the logs stored on disk.\r
+        // NOTE: This must be the first listener for this ILog, to guarantee that the log on disk\r
+        // is always up-to-date if other ILogListeners want to read it. LogView does exactly this.\r
+        FrameworkLog log = getFrameworkLog();\r
+        if (log != null) {\r
+            platformLog = new LogWriter(getFrameworkLog());\r
+            addLogListener(platformLog);\r
+        } else\r
+            platformLog = null;\r
+\r
+        plugin = this;\r
+    }\r
+\r
+    /*\r
+     * (non-Javadoc)\r
+     * \r
+     * @see\r
+     * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext\r
+     * )\r
+     */\r
+    @Override\r
+    public void stop(BundleContext context) throws Exception {\r
+        if (platformLog != null)\r
+            removeLogListener(platformLog);\r
+        if (frameworkLog != null)\r
+            frameworkLog.close();\r
+\r
+        if (messageSchemeManager != null) {\r
+            messageSchemeManager.unregister();\r
+            messageSchemeManager = null;\r
+            messageSchemeManagerService = null;\r
+        }\r
+\r
+        if (messages != null) {\r
+            messages.unregister();\r
+            messages = null;\r
+            messagesService = null;\r
+        }\r
+\r
+        bundleContext = null;\r
+        plugin = null;\r
+        super.stop(context);\r
+    }\r
+\r
+    /**\r
+     * Returns the shared instance\r
+     * \r
+     * @return the shared instance\r
+     */\r
+    public static Activator getDefault() {\r
+        return plugin;\r
+    }\r
+\r
+    /**\r
+     * Returns the shared Simantics ILogger service instance.\r
+     * \r
+     * @return the shared message service\r
+     */\r
+    public ILogger getMessages() {\r
+        return messagesService;\r
+    }\r
+\r
+    /**\r
+     * Add a listener to the Simantics platform ILogger service.\r
+     */\r
+    public void addLogListener(ILogListener listener) {\r
+        getMessages().addLogListener(listener);\r
+    }\r
+\r
+    /**\r
+     * Remove a listener from the Simantics platform ILogger service.\r
+     */\r
+    public void removeLogListener(ILogListener listener) {\r
+        getMessages().removeLogListener(listener);\r
+    }\r
+\r
+    /**\r
+     * @return\r
+     */\r
+    private FrameworkLog getFrameworkLog() {\r
+        if (frameworkLog == null) {\r
+            // TODO: make this a configurable preference, just like the osgi.logfile preference\r
+            IPath logLocation = getStateLocation().append(DEFAULT_LOG_FILE_NAME);\r
+            // TODO: need to clone EquinoxLogWriter and EquinoxLogFactory to this plugin\r
+//            EquinoxLogWriter logWriter = new EclipseLogWriter(logLocation.toFile(), LOGGER_NAME, true);\r
+//            LogServiceManager logServiceManager = new LogServiceManager(logWriter);\r
+//            EquinoxLogFactory logFactory = new EquinoxLogFactory(logWriter, logServiceManager);\r
+//            frameworkLog = logFactory.getService(getBundle(), null);\r
+        }\r
+        return frameworkLog;\r
+    }\r
+\r
+    /**\r
+     * @return\r
+     */\r
+    public static File getLogFile() {\r
+        return getDefault().getFrameworkLog().getFile();\r
+    }\r
+\r
+    /**\r
+     * Returns the shared Simantics ILogger service instance.\r
+     * \r
+     * @return the shared message service\r
+     */\r
+    public IMessageSchemeManager getMessageSchemeManager() {\r
+        return messageSchemeManagerService;\r
+    }\r
+\r
+}\r