]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.services/src/org/simantics/db/services/GlobalServiceInitializer.java
84a2d1c6a3a9e380a3fef8b6cb57a53a5cb020a5
[simantics/platform.git] / bundles / org.simantics.db.services / src / org / simantics / db / services / GlobalServiceInitializer.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management
3  * in Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.db.services;
13
14 import org.eclipse.core.runtime.CoreException;
15 import org.eclipse.core.runtime.IConfigurationElement;
16 import org.eclipse.core.runtime.IExtensionPoint;
17 import org.eclipse.core.runtime.IExtensionRegistry;
18 import org.eclipse.core.runtime.IStatus;
19 import org.eclipse.core.runtime.MultiStatus;
20 import org.eclipse.core.runtime.Platform;
21 import org.eclipse.core.runtime.Status;
22 import org.simantics.db.Session;
23
24 /**
25  * @author Tuukka Lehtonen
26  */
27 public class GlobalServiceInitializer implements ServiceInitializer {
28
29     private static final String PLUGIN_ID           = "org.simantics.db.services";
30
31     private static final String SERVICE_INITIALIZER = "serviceInitializer";
32
33     public static final int     INITIALIZER_ERROR   = 1;
34
35     @Override
36     public IStatus initialize(final Session s) {
37         MultiStatus problems = new MultiStatus(PLUGIN_ID, INITIALIZER_ERROR, "ServiceInitializer errors:", null);
38
39         // Initialize adaption service
40         merge(problems, new AdaptionServiceInitializer().initialize(s));
41
42         //s.registerService(StructuralResourceListener.class, new StructuralResourceListenerImpl(s));
43
44         // Find extensions if any are available
45         IExtensionRegistry er = Platform.getExtensionRegistry();
46         if (er != null) {
47             IExtensionPoint ep = er.getExtensionPoint(PLUGIN_ID, SERVICE_INITIALIZER);
48             if (ep != null) {
49                 for (IConfigurationElement conf : ep.getConfigurationElements()) {
50                     try {
51 //                        System.out.println("initialize: " + conf.getAttribute("class") + " (id=" + conf.getAttribute("id") + ")");
52                         ServiceInitializer initializer = (ServiceInitializer) conf.createExecutableExtension("class");
53                         merge(problems, initializer.initialize(s));
54                     } catch (CoreException e) {
55                         IStatus status = new Status(IStatus.ERROR, conf.getDeclaringExtension().getNamespaceIdentifier(), "ServiceInitializer instantiation failed, see exception for details.", e);
56                         problems.merge(status);
57                     }
58                 }
59             }
60         }
61         if (problems.isOK())
62             return Status.OK_STATUS;
63         return problems;
64     }
65
66     public IStatus initialize(Session s, String initializerId) {
67         if (initializerId == null)
68             throw new IllegalArgumentException("null initializer id");
69
70         // Find the matching service initializer extension
71         for (IConfigurationElement conf : Platform.getExtensionRegistry().getExtensionPoint(PLUGIN_ID, SERVICE_INITIALIZER).getConfigurationElements()) {
72             try {
73                 String id = conf.getAttribute("id");
74                 if (initializerId.equals(id)) {
75 //                    System.out.println("initialize: " + conf.getAttribute("class"));
76                     ServiceInitializer initializer = (ServiceInitializer) conf.createExecutableExtension("class");
77                     return initializer.initialize(s);
78                 }
79             } catch (CoreException e) {
80                 return new Status(IStatus.ERROR, conf.getDeclaringExtension().getNamespaceIdentifier(), "ServiceInitializer instantiation failed, see exception for details.", e);
81             }
82         }
83         return new Status(IStatus.ERROR, PLUGIN_ID, "ServiceInitializer extension with id '" + initializerId + "' not found.", null);
84     }
85
86     private void merge(MultiStatus result, IStatus status) {
87         if (!status.isOK())
88             result.add(status);
89     }
90
91 }