]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics/src/org/simantics/internal/SessionUtil.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics / src / org / simantics / internal / SessionUtil.java
1 /*******************************************************************************\r
2  * Copyright (c) 2013 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  *     Semantum Oy - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.internal;\r
13 \r
14 import java.io.File;\r
15 import java.util.Properties;\r
16 import java.util.UUID;\r
17 \r
18 import org.eclipse.core.runtime.IProduct;\r
19 import org.eclipse.core.runtime.Platform;\r
20 import org.simantics.db.ServerEx;\r
21 import org.simantics.db.Session;\r
22 import org.simantics.db.exception.DatabaseException;\r
23 import org.simantics.db.service.LifecycleSupport;\r
24 import org.simantics.db.service.XSupport;\r
25 import org.simantics.project.management.ServerManager;\r
26 import org.simantics.project.management.ServerManagerFactory;\r
27 \r
28 /**\r
29  * An as-simple-as-possible utility class for starting a Simantics database\r
30  * instance and opening a connection ({@link Session}) to it.\r
31  *\r
32  * <p>\r
33  * To get up and running, simply invoke:\r
34  * <pre>\r
35  *     SessionUtil util = new SessionUtil("my-client-id");\r
36  *     try {\r
37  *         File workspaceLocation = ...;\r
38  *         Session session = util.openSession(workspaceLocation);\r
39  *         // do something with the database session\r
40  *     } finally {\r
41  *         util.close();\r
42  *     }\r
43  * </pre>\r
44  *\r
45  * <p>\r
46  * This class is a provisional utility, pending for public inclusion.\r
47  *\r
48  * @author Tuukka Lehtonen\r
49  * @see Session\r
50  */\r
51 public class SessionUtil {\r
52 \r
53         private String clientId;\r
54         @SuppressWarnings("unused")\r
55         private File workspace;\r
56 \r
57         private ServerManager serverManager;\r
58         private ServerEx server;\r
59         private Session session;\r
60 \r
61         public static String getApplicationClientId() {\r
62                 IProduct product = Platform.getProduct();\r
63                 if(product == null) return "noProduct";\r
64                 String application = product.getApplication();\r
65                 return application != null ? application : UUID.randomUUID().toString();\r
66         }\r
67 \r
68         public SessionUtil() {\r
69                 this(UUID.randomUUID().toString());\r
70         }\r
71 \r
72         public SessionUtil(String clientId) {\r
73                 serverManager = ServerManagerFactory.getServerManager();\r
74                 this.clientId = clientId;\r
75         }\r
76 \r
77         public void close() throws DatabaseException {\r
78                 if (session != null) {\r
79                         session.getService(LifecycleSupport.class).close();\r
80                 }\r
81                 serverManager.close();\r
82         }\r
83 \r
84 //      public Session open(File workspace) throws IOException, DatabaseException {\r
85 //              File dbDir = new File(workspace, "db");\r
86 //              if (!dbDir.exists() || !dbDir.isDirectory())\r
87 //                      throw new FileNotFoundException("database directory " + dbDir + " not found");\r
88 //              server = serverManager.getServer(dbDir);\r
89 //              server.start(null);\r
90 //              session = openSession(server, dbDir);\r
91 //              this.workspace = workspace;\r
92 //              return session;\r
93 //      }\r
94 \r
95         private Session openSession(ServerEx server, File dbDir) throws DatabaseException {\r
96                 Properties info = new Properties(ServerManager.DEFAULT);\r
97                 session = server.createSession(info);\r
98                 session.getService(XSupport.class).setServiceMode(true, true);\r
99                 return session;\r
100         }\r
101 \r
102 }\r