]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.services/src/org/simantics/db/services/GlobalServiceInitializer.java
ReflectionAdapter2 does not handle all Throwables
[simantics/platform.git] / bundles / org.simantics.db.services / src / org / simantics / db / services / GlobalServiceInitializer.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.db.services;\r
13 \r
14 import org.eclipse.core.runtime.CoreException;\r
15 import org.eclipse.core.runtime.IConfigurationElement;\r
16 import org.eclipse.core.runtime.IExtensionPoint;\r
17 import org.eclipse.core.runtime.IExtensionRegistry;\r
18 import org.eclipse.core.runtime.IStatus;\r
19 import org.eclipse.core.runtime.MultiStatus;\r
20 import org.eclipse.core.runtime.Platform;\r
21 import org.eclipse.core.runtime.Status;\r
22 import org.simantics.db.Session;\r
23 \r
24 /**\r
25  * @author Tuukka Lehtonen\r
26  */\r
27 public class GlobalServiceInitializer implements ServiceInitializer {\r
28 \r
29     private static final String PLUGIN_ID           = "org.simantics.db.services";\r
30 \r
31     private static final String SERVICE_INITIALIZER = "serviceInitializer";\r
32 \r
33     public static final int     INITIALIZER_ERROR   = 1;\r
34 \r
35     @Override\r
36     public IStatus initialize(final Session s) {\r
37         MultiStatus problems = new MultiStatus(PLUGIN_ID, INITIALIZER_ERROR, "ServiceInitializer errors:", null);\r
38 \r
39         // Initialize adaption service\r
40         merge(problems, new AdaptionServiceInitializer().initialize(s));\r
41 \r
42         //s.registerService(StructuralResourceListener.class, new StructuralResourceListenerImpl(s));\r
43 \r
44         // Find extensions if any are available\r
45         IExtensionRegistry er = Platform.getExtensionRegistry();\r
46         if (er != null) {\r
47             IExtensionPoint ep = er.getExtensionPoint(PLUGIN_ID, SERVICE_INITIALIZER);\r
48             if (ep != null) {\r
49                 for (IConfigurationElement conf : ep.getConfigurationElements()) {\r
50                     try {\r
51 //                        System.out.println("initialize: " + conf.getAttribute("class") + " (id=" + conf.getAttribute("id") + ")");\r
52                         ServiceInitializer initializer = (ServiceInitializer) conf.createExecutableExtension("class");\r
53                         merge(problems, initializer.initialize(s));\r
54                     } catch (CoreException e) {\r
55                         IStatus status = new Status(IStatus.ERROR, conf.getDeclaringExtension().getNamespaceIdentifier(), "ServiceInitializer instantiation failed, see exception for details.", e);\r
56                         problems.merge(status);\r
57                     }\r
58                 }\r
59             }\r
60         }\r
61         if (problems.isOK())\r
62             return Status.OK_STATUS;\r
63         return problems;\r
64     }\r
65 \r
66     public IStatus initialize(Session s, String initializerId) {\r
67         if (initializerId == null)\r
68             throw new IllegalArgumentException("null initializer id");\r
69 \r
70         // Find the matching service initializer extension\r
71         for (IConfigurationElement conf : Platform.getExtensionRegistry().getExtensionPoint(PLUGIN_ID, SERVICE_INITIALIZER).getConfigurationElements()) {\r
72             try {\r
73                 String id = conf.getAttribute("id");\r
74                 if (initializerId.equals(id)) {\r
75 //                    System.out.println("initialize: " + conf.getAttribute("class"));\r
76                     ServiceInitializer initializer = (ServiceInitializer) conf.createExecutableExtension("class");\r
77                     return initializer.initialize(s);\r
78                 }\r
79             } catch (CoreException e) {\r
80                 return new Status(IStatus.ERROR, conf.getDeclaringExtension().getNamespaceIdentifier(), "ServiceInitializer instantiation failed, see exception for details.", e);\r
81             }\r
82         }\r
83         return new Status(IStatus.ERROR, PLUGIN_ID, "ServiceInitializer extension with id '" + initializerId + "' not found.", null);\r
84     }\r
85 \r
86     private void merge(MultiStatus result, IStatus status) {\r
87         if (!status.isOK())\r
88             result.add(status);\r
89     }\r
90 \r
91 }\r