1   package com.stateofflow.eclipse.metrics;
2   
3   import java.util.MissingResourceException;
4   import java.util.ResourceBundle;
5   
6   import org.eclipse.core.resources.IWorkspaceRoot;
7   import org.eclipse.core.resources.ResourcesPlugin;
8   import org.eclipse.core.runtime.IPluginDescriptor;
9   import org.eclipse.core.runtime.IStatus;
10  import org.eclipse.core.runtime.Status;
11  import org.eclipse.ui.plugin.AbstractUIPlugin;
12  
13  import com.stateofflow.eclipse.metrics.configuration.MetricPresentations;
14  import com.stateofflow.eclipse.metrics.configuration.MetricsConfiguration;
15  import com.stateofflow.eclipse.metrics.factory.DefaultMetricsFactory;
16  import com.stateofflow.eclipse.metrics.factory.MetricsFactory;
17  import com.stateofflow.eclipse.metrics.preferences.DefaultInitialiser;
18  import com.stateofflow.eclipse.metrics.preferences.PreferenceStoreMetricsConfiguration;
19  
20  public final class MetricsPlugin extends AbstractUIPlugin {
21      public static final String PLUGIN_ID = "com.stateofflow.eclipse.metrics.MetricsPlugin";
22  
23      private static MetricsPlugin plugin;
24  
25      public static MetricsFactory getFactory() {
26          return new DefaultMetricsFactory(getConfigurations(), getPresentations());
27      }
28  
29      private static MetricsConfiguration getConfigurations() {
30          return new PreferenceStoreMetricsConfiguration(getDefault().getPreferenceStore());
31      }
32  
33      private static MetricPresentations getPresentations() {
34          return new MetricPresentations(getDefault().getResourceBundle());
35      }
36  
37      public static MetricsPlugin getDefault() {
38          return plugin;
39      }
40  
41      public static IWorkspaceRoot getWorkspaceRoot() {
42          return ResourcesPlugin.getWorkspace().getRoot();
43      }
44  
45      private static void log(final IStatus status) {
46          getDefault().getLog().log(status);
47      }
48  
49      public static void log(final String message) {
50          log(new Status(IStatus.OK, MetricsPlugin.PLUGIN_ID, message));
51      }
52  
53      public static void log(final Throwable ex) {
54          log("Caught exception", ex);
55      }
56  
57      public static void log(final String message, final Throwable ex) {
58          log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, message, ex));
59      }
60  
61      private ResourceBundle resourceBundle;
62  
63      public MetricsPlugin(final IPluginDescriptor pluginDescriptor) {
64          super(pluginDescriptor);
65  
66          MetricsPlugin.plugin = this;
67          initialiseResourceBundle();
68          initialisePreferences();
69      }
70  
71      private ResourceBundle getResourceBundle() {
72          return resourceBundle;
73      }
74  
75      private void initialisePreferences() {
76          new DefaultInitialiser(getPreferenceStore()).initialise();
77          savePluginPreferences();
78      }
79  
80      private void initialiseResourceBundle() {
81          try {
82              resourceBundle = ResourceBundle.getBundle("com.stateofflow.eclipse.metrics.MetricsPluginResources");
83          } catch (final MissingResourceException x) {
84              resourceBundle = null;
85          }
86      }
87  }
88