]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
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
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.message.internal;\r
13 \r
14 import java.io.File;\r
15 import java.util.Hashtable;\r
16 \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
25 \r
26 /**\r
27  * The activator class controls the plug-in life cycle\r
28  */\r
29 @SuppressWarnings("restriction")\r
30 public class Activator extends Plugin {\r
31 \r
32     private static final String  DEFAULT_LOG_FILE_NAME = "messages.log";\r
33 \r
34     // The plug-in ID\r
35     public static final String   PLUGIN_ID             = "org.simantics.message";\r
36 \r
37     private static final String  LOGGER_NAME           = "org.simantics.message.logger"; //$NON-NLS-1$\r
38 \r
39     // The shared instance\r
40     private static Activator     plugin;\r
41     private BundleContext        bundleContext;\r
42 \r
43     // The one and only message service instance\r
44     private Messages             messagesService;\r
45     private MessageSchemeManager messageSchemeManagerService;\r
46 \r
47     @SuppressWarnings("rawtypes")\r
48     private ServiceRegistration  messages              = null;\r
49     @SuppressWarnings("rawtypes")\r
50     private ServiceRegistration  messageSchemeManager  = null;\r
51 \r
52     private LogWriter            platformLog           = null;\r
53     private FrameworkLog         frameworkLog          = null;\r
54 \r
55     /**\r
56      * The constructor\r
57      */\r
58     public Activator() {\r
59     }\r
60 \r
61     /*\r
62      * (non-Javadoc)\r
63      * \r
64      * @see\r
65      * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext\r
66      * )\r
67      */\r
68     @SuppressWarnings({ "rawtypes", "unchecked" })\r
69     @Override\r
70     public void start(BundleContext context) throws Exception {\r
71         super.start(context);\r
72         this.bundleContext = context;\r
73 \r
74         messagesService = new Messages();\r
75         messageSchemeManagerService = new MessageSchemeManager();\r
76 \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
79 \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
84         if (log != null) {\r
85             platformLog = new LogWriter(getFrameworkLog());\r
86             addLogListener(platformLog);\r
87         } else\r
88             platformLog = null;\r
89 \r
90         plugin = this;\r
91     }\r
92 \r
93     /*\r
94      * (non-Javadoc)\r
95      * \r
96      * @see\r
97      * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext\r
98      * )\r
99      */\r
100     @Override\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
106 \r
107         if (messageSchemeManager != null) {\r
108             messageSchemeManager.unregister();\r
109             messageSchemeManager = null;\r
110             messageSchemeManagerService = null;\r
111         }\r
112 \r
113         if (messages != null) {\r
114             messages.unregister();\r
115             messages = null;\r
116             messagesService = null;\r
117         }\r
118 \r
119         bundleContext = null;\r
120         plugin = null;\r
121         super.stop(context);\r
122     }\r
123 \r
124     /**\r
125      * Returns the shared instance\r
126      * \r
127      * @return the shared instance\r
128      */\r
129     public static Activator getDefault() {\r
130         return plugin;\r
131     }\r
132 \r
133     /**\r
134      * Returns the shared Simantics ILogger service instance.\r
135      * \r
136      * @return the shared message service\r
137      */\r
138     public ILogger getMessages() {\r
139         return messagesService;\r
140     }\r
141 \r
142     /**\r
143      * Add a listener to the Simantics platform ILogger service.\r
144      */\r
145     public void addLogListener(ILogListener listener) {\r
146         getMessages().addLogListener(listener);\r
147     }\r
148 \r
149     /**\r
150      * Remove a listener from the Simantics platform ILogger service.\r
151      */\r
152     public void removeLogListener(ILogListener listener) {\r
153         getMessages().removeLogListener(listener);\r
154     }\r
155 \r
156     /**\r
157      * @return\r
158      */\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
168         }\r
169         return frameworkLog;\r
170     }\r
171 \r
172     /**\r
173      * @return\r
174      */\r
175     public static File getLogFile() {\r
176         return getDefault().getFrameworkLog().getFile();\r
177     }\r
178 \r
179     /**\r
180      * Returns the shared Simantics ILogger service instance.\r
181      * \r
182      * @return the shared message service\r
183      */\r
184     public IMessageSchemeManager getMessageSchemeManager() {\r
185         return messageSchemeManagerService;\r
186     }\r
187 \r
188 }\r