1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.message.internal;
\r
14 import java.io.File;
\r
15 import java.util.Hashtable;
\r
17 import org.eclipse.core.runtime.IPath;
\r
18 import org.eclipse.core.runtime.Plugin;
\r
19 import org.eclipse.osgi.framework.log.FrameworkLog;
\r
20 import org.osgi.framework.BundleContext;
\r
21 import org.osgi.framework.ServiceRegistration;
\r
22 import org.simantics.message.ILogListener;
\r
23 import org.simantics.message.ILogger;
\r
24 import org.simantics.message.IMessageSchemeManager;
\r
27 * The activator class controls the plug-in life cycle
\r
29 @SuppressWarnings("restriction")
\r
30 public class Activator extends Plugin {
\r
32 private static final String DEFAULT_LOG_FILE_NAME = "messages.log";
\r
35 public static final String PLUGIN_ID = "org.simantics.message";
\r
37 private static final String LOGGER_NAME = "org.simantics.message.logger"; //$NON-NLS-1$
\r
39 // The shared instance
\r
40 private static Activator plugin;
\r
41 private BundleContext bundleContext;
\r
43 // The one and only message service instance
\r
44 private Messages messagesService;
\r
45 private MessageSchemeManager messageSchemeManagerService;
\r
47 @SuppressWarnings("rawtypes")
\r
48 private ServiceRegistration messages = null;
\r
49 @SuppressWarnings("rawtypes")
\r
50 private ServiceRegistration messageSchemeManager = null;
\r
52 private LogWriter platformLog = null;
\r
53 private FrameworkLog frameworkLog = null;
\r
58 public Activator() {
\r
65 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
\r
68 @SuppressWarnings({ "rawtypes", "unchecked" })
\r
70 public void start(BundleContext context) throws Exception {
\r
71 super.start(context);
\r
72 this.bundleContext = context;
\r
74 messagesService = new Messages();
\r
75 messageSchemeManagerService = new MessageSchemeManager();
\r
77 messages = bundleContext.registerService(ILogger.class.getName(), messagesService, new Hashtable());
\r
78 messageSchemeManager = bundleContext.registerService(IMessageSchemeManager.class.getName(), messageSchemeManagerService, new Hashtable<String, Object>());
\r
80 // Attach a writer listener to the Messages ILog to actually get the logs stored on disk.
\r
81 // NOTE: This must be the first listener for this ILog, to guarantee that the log on disk
\r
82 // is always up-to-date if other ILogListeners want to read it. LogView does exactly this.
\r
83 FrameworkLog log = getFrameworkLog();
\r
85 platformLog = new LogWriter(getFrameworkLog());
\r
86 addLogListener(platformLog);
\r
97 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
\r
101 public void stop(BundleContext context) throws Exception {
\r
102 if (platformLog != null)
\r
103 removeLogListener(platformLog);
\r
104 if (frameworkLog != null)
\r
105 frameworkLog.close();
\r
107 if (messageSchemeManager != null) {
\r
108 messageSchemeManager.unregister();
\r
109 messageSchemeManager = null;
\r
110 messageSchemeManagerService = null;
\r
113 if (messages != null) {
\r
114 messages.unregister();
\r
116 messagesService = null;
\r
119 bundleContext = null;
\r
121 super.stop(context);
\r
125 * Returns the shared instance
\r
127 * @return the shared instance
\r
129 public static Activator getDefault() {
\r
134 * Returns the shared Simantics ILogger service instance.
\r
136 * @return the shared message service
\r
138 public ILogger getMessages() {
\r
139 return messagesService;
\r
143 * Add a listener to the Simantics platform ILogger service.
\r
145 public void addLogListener(ILogListener listener) {
\r
146 getMessages().addLogListener(listener);
\r
150 * Remove a listener from the Simantics platform ILogger service.
\r
152 public void removeLogListener(ILogListener listener) {
\r
153 getMessages().removeLogListener(listener);
\r
159 private FrameworkLog getFrameworkLog() {
\r
160 if (frameworkLog == null) {
\r
161 // TODO: make this a configurable preference, just like the osgi.logfile preference
\r
162 IPath logLocation = getStateLocation().append(DEFAULT_LOG_FILE_NAME);
\r
163 // TODO: need to clone EquinoxLogWriter and EquinoxLogFactory to this plugin
\r
164 // EquinoxLogWriter logWriter = new EclipseLogWriter(logLocation.toFile(), LOGGER_NAME, true);
\r
165 // LogServiceManager logServiceManager = new LogServiceManager(logWriter);
\r
166 // EquinoxLogFactory logFactory = new EquinoxLogFactory(logWriter, logServiceManager);
\r
167 // frameworkLog = logFactory.getService(getBundle(), null);
\r
169 return frameworkLog;
\r
175 public static File getLogFile() {
\r
176 return getDefault().getFrameworkLog().getFile();
\r
180 * Returns the shared Simantics ILogger service instance.
\r
182 * @return the shared message service
\r
184 public IMessageSchemeManager getMessageSchemeManager() {
\r
185 return messageSchemeManagerService;
\r