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
10 * Semantum Oy - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.internal;
\r
14 import java.io.File;
\r
15 import java.util.Properties;
\r
16 import java.util.UUID;
\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
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
33 * To get up and running, simply invoke:
\r
35 * SessionUtil util = new SessionUtil("my-client-id");
\r
37 * File workspaceLocation = ...;
\r
38 * Session session = util.openSession(workspaceLocation);
\r
39 * // do something with the database session
\r
46 * This class is a provisional utility, pending for public inclusion.
\r
48 * @author Tuukka Lehtonen
\r
51 public class SessionUtil {
\r
53 private String clientId;
\r
54 @SuppressWarnings("unused")
\r
55 private File workspace;
\r
57 private ServerManager serverManager;
\r
58 private ServerEx server;
\r
59 private Session session;
\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
68 public SessionUtil() {
\r
69 this(UUID.randomUUID().toString());
\r
72 public SessionUtil(String clientId) {
\r
73 serverManager = ServerManagerFactory.getServerManager();
\r
74 this.clientId = clientId;
\r
77 public void close() throws DatabaseException {
\r
78 if (session != null) {
\r
79 session.getService(LifecycleSupport.class).close();
\r
81 serverManager.close();
\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
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