]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db/src/org/simantics/db/Manager.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.db / src / org / simantics / db / Manager.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;\r
13 \r
14 import java.util.Collection;\r
15 import java.util.Collections;\r
16 import java.util.HashMap;\r
17 import java.util.Map;\r
18 \r
19 import org.osgi.framework.BundleContext;\r
20 import org.osgi.framework.InvalidSyntaxException;\r
21 import org.osgi.framework.ServiceReference;\r
22 import org.simantics.db.internal.Activator;\r
23 \r
24 /**\r
25  * @author Antti Villberg\r
26  */\r
27 public final class Manager {\r
28 \r
29     private Manager() {}\r
30 \r
31     /**\r
32      * Search for registered database driver by driver id.\r
33      *\r
34      * @param id for database driver.\r
35      * @return database driver or null.\r
36      */\r
37     public static Driver getDriver(String id) {\r
38         Map<String, Driver> drivers = collectDrivers();\r
39         return drivers.get(id);\r
40     }\r
41 \r
42     private static Map<String, Driver> collectDrivers() {\r
43         BundleContext context = Activator.getContext();\r
44         Collection<ServiceReference<Driver>> serviceReferences;\r
45         try {\r
46             serviceReferences = context.getServiceReferences(Driver.class, null);\r
47         } catch (InvalidSyntaxException e) {\r
48             e.printStackTrace();\r
49             serviceReferences = Collections.emptyList();\r
50         }\r
51         Map<String, Driver> drivers = new HashMap<>(serviceReferences.size());\r
52         for (ServiceReference<Driver> reference : serviceReferences) {\r
53             Driver driver = context.getService(reference);\r
54             String driverName = driver.getName();\r
55             if (driverName != null && !driverName.isEmpty()) {\r
56                 drivers.put(driverName, driver);\r
57             }\r
58         }\r
59         return drivers;\r
60     }\r
61     \r
62     public static DatabaseUserAgent getUserAgent(String id) {\r
63         Map<String, DatabaseUserAgent> agents = collectUserAgents();\r
64         return agents.get(id);\r
65     }\r
66     \r
67     private static Map<String, DatabaseUserAgent> collectUserAgents() {\r
68         BundleContext context = Activator.getContext();\r
69         Collection<ServiceReference<DatabaseUserAgent>> serviceReferences;\r
70         try {\r
71             serviceReferences = context.getServiceReferences(DatabaseUserAgent.class, null);\r
72         } catch (InvalidSyntaxException e) {\r
73             e.printStackTrace();\r
74             serviceReferences = Collections.emptyList();\r
75         }\r
76         Map<String, DatabaseUserAgent> drivers = new HashMap<>(serviceReferences.size());\r
77         for (ServiceReference<DatabaseUserAgent> reference : serviceReferences) {\r
78             DatabaseUserAgent dbua = context.getService(reference);\r
79             String driverName = dbua.getId();\r
80             if (driverName != null && !driverName.isEmpty()) {\r
81                 drivers.put(driverName, dbua);\r
82             }\r
83         }\r
84         return drivers;\r
85     }\r
86 \r
87 }\r