-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.application.db;\r
-\r
-import java.io.IOException;\r
-\r
-import org.simantics.application.arguments.Arguments;\r
-import org.simantics.application.arguments.IArguments;\r
-import org.simantics.application.arguments.SimanticsArguments;\r
-import org.simantics.db.ServerI;\r
-import org.simantics.db.Session;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.service.LifecycleSupport;\r
-import org.simantics.utils.datastructures.disposable.AbstractDisposable;\r
-import org.simantics.utils.datastructures.disposable.IDisposable;\r
-\r
-public class DatabaseHandle extends AbstractDisposable implements IDatabaseHandle, IDisposable {\r
-\r
- private ServerI server;\r
-\r
- private Session session;\r
-\r
- @SuppressWarnings("unused")\r
- private final boolean deleteAtDispose;\r
-\r
- /**\r
- * @param arguments\r
- * @return\r
- * @throws Exception\r
- */\r
- public static DatabaseHandle open(String[] arguments) throws Exception {\r
- IArguments args = Arguments.parse(arguments, SimanticsArguments.SERVER);\r
- if (!args.contains(SimanticsArguments.SERVER))\r
- throw new IllegalArgumentException("Missing " + SimanticsArguments.SERVER.getArgument() + " argument, a server is required.");\r
-\r
- DatabaseHandle handle = new DatabaseHandle();\r
- handle.init(args.get(SimanticsArguments.SERVER), false);\r
- return handle;\r
- }\r
-\r
- /**\r
- * @param arguments\r
- * @return\r
- * @throws Exception\r
- */\r
- public static DatabaseHandle open(String serverAddress) throws Exception {\r
- return new DatabaseHandle().init(serverAddress, false);\r
- }\r
-\r
-// /**\r
-// * @param arguments\r
-// * @return\r
-// * @throws Exception\r
-// */\r
-// public static DatabaseHandle open(ServerAddress address) throws Exception {\r
-// return DatabaseHandle.open(address.getDbid());\r
-// }\r
-\r
- /**\r
- * @param arguments\r
- * @return\r
- * @throws Exception\r
- */\r
- public static DatabaseHandle checkout(String serverAddress) throws Exception {\r
- return new DatabaseHandle().init(serverAddress, true);\r
- }\r
-\r
-// /**\r
-// * @param arguments\r
-// * @return\r
-// * @throws Exception\r
-// */\r
-// public static DatabaseHandle checkout(ServerAddress address) throws Exception {\r
-// return new DatabaseHandle().init(address.getDbid(), true);\r
-// }\r
-\r
- private DatabaseHandle() {\r
- deleteAtDispose = false;\r
- }\r
-\r
- /**\r
- * @param arguments\r
- * @param deleteAtDispose\r
- * @throws Exception\r
- */\r
- public DatabaseHandle(String[] arguments, boolean deleteAtDispose) throws Exception {\r
- this.deleteAtDispose = deleteAtDispose;\r
-\r
- IArguments args = Arguments.parse(arguments,\r
- SimanticsArguments.SERVER,\r
- SimanticsArguments.CHECKOUT);\r
-\r
- if (!args.contains(SimanticsArguments.SERVER))\r
- throw new IllegalArgumentException("Missing " + SimanticsArguments.SERVER.getArgument() + " argument, a server is required.");\r
- boolean checkout = args.contains(SimanticsArguments.CHECKOUT);\r
-\r
- init(args.get(SimanticsArguments.SERVER), checkout);\r
- }\r
-\r
- /**\r
- * @param checkout\r
- * @return this\r
- * @throws Exception\r
- * @throws IOException\r
- */\r
- private DatabaseHandle init(String serverAddress, boolean checkout) throws IOException, Exception {\r
- if (checkout) {\r
- // Let UndoCoreManager pick a port on localhost for the working\r
- // copy by setting the address of the local ServerInfo to null.\r
- throw new UnsupportedOperationException("re-implement checkout");\r
-// activation = UndoCoreManager.getManager().checkout(\r
-// new ServerInfo("Remote Server", server),\r
-// new ServerInfo(UUID.randomUUID().toString()));\r
-//\r
-// ServerAddress localServer = activation.getDescriptor().getLocal().getAddress();\r
-// session = DatabaseUtils.connect(localServer);\r
- } else {\r
- session = DatabaseUtils.connect(serverAddress);\r
-// session = DatabaseUtils.connect(new ServerAddress("", 0, serverAddress));\r
- }\r
-\r
- return this;\r
- }\r
-\r
- @Override\r
- protected void doDispose() {\r
- // TODO: make this robust and safe\r
-\r
- if (session != null) {\r
- try {\r
- LifecycleSupport support = session.getService(LifecycleSupport.class);\r
- support.close(-1, false);\r
- session = null;\r
- } catch (DatabaseException e) {\r
- }\r
- }\r
-\r
-// if (activation != null) {\r
-// try {\r
-// UndoCoreManager manager = UndoCoreManager.getManager();\r
-// manager.deactivate(activation, 3000, TimeUnit.MILLISECONDS);\r
-//\r
-// if (deleteAtDispose) {\r
-// IServerDescriptor desc = activation.getDescriptor();\r
-// manager.deleteLocal(new ServerInfo[] { desc.getParent(), desc.getLocal() });\r
-// }\r
-// } catch (IOException e) {\r
-// } catch (InterruptedException e) {\r
-// }\r
-// activation = null;\r
-// }\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.simantics.application.db.IDatabaseHandle#getServer()\r
- */\r
- @Override\r
- public ServerI getServer() {\r
- return server;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.simantics.application.db.IDatabaseHandle#getSession()\r
- */\r
- @Override\r
- public Session getSession() {\r
- return session;\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.application.db;
+
+import java.io.IOException;
+
+import org.simantics.application.arguments.Arguments;
+import org.simantics.application.arguments.IArguments;
+import org.simantics.application.arguments.SimanticsArguments;
+import org.simantics.db.ServerI;
+import org.simantics.db.Session;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.service.LifecycleSupport;
+import org.simantics.utils.datastructures.disposable.AbstractDisposable;
+import org.simantics.utils.datastructures.disposable.IDisposable;
+
+public class DatabaseHandle extends AbstractDisposable implements IDatabaseHandle, IDisposable {
+
+ private ServerI server;
+
+ private Session session;
+
+ @SuppressWarnings("unused")
+ private final boolean deleteAtDispose;
+
+ /**
+ * @param arguments
+ * @return
+ * @throws Exception
+ */
+ public static DatabaseHandle open(String[] arguments) throws Exception {
+ IArguments args = Arguments.parse(arguments, SimanticsArguments.SERVER);
+ if (!args.contains(SimanticsArguments.SERVER))
+ throw new IllegalArgumentException("Missing " + SimanticsArguments.SERVER.getArgument() + " argument, a server is required.");
+
+ DatabaseHandle handle = new DatabaseHandle();
+ handle.init(args.get(SimanticsArguments.SERVER), false);
+ return handle;
+ }
+
+ /**
+ * @param arguments
+ * @return
+ * @throws Exception
+ */
+ public static DatabaseHandle open(String serverAddress) throws Exception {
+ return new DatabaseHandle().init(serverAddress, false);
+ }
+
+// /**
+// * @param arguments
+// * @return
+// * @throws Exception
+// */
+// public static DatabaseHandle open(ServerAddress address) throws Exception {
+// return DatabaseHandle.open(address.getDbid());
+// }
+
+ /**
+ * @param arguments
+ * @return
+ * @throws Exception
+ */
+ public static DatabaseHandle checkout(String serverAddress) throws Exception {
+ return new DatabaseHandle().init(serverAddress, true);
+ }
+
+// /**
+// * @param arguments
+// * @return
+// * @throws Exception
+// */
+// public static DatabaseHandle checkout(ServerAddress address) throws Exception {
+// return new DatabaseHandle().init(address.getDbid(), true);
+// }
+
+ private DatabaseHandle() {
+ deleteAtDispose = false;
+ }
+
+ /**
+ * @param arguments
+ * @param deleteAtDispose
+ * @throws Exception
+ */
+ public DatabaseHandle(String[] arguments, boolean deleteAtDispose) throws Exception {
+ this.deleteAtDispose = deleteAtDispose;
+
+ IArguments args = Arguments.parse(arguments,
+ SimanticsArguments.SERVER,
+ SimanticsArguments.CHECKOUT);
+
+ if (!args.contains(SimanticsArguments.SERVER))
+ throw new IllegalArgumentException("Missing " + SimanticsArguments.SERVER.getArgument() + " argument, a server is required.");
+ boolean checkout = args.contains(SimanticsArguments.CHECKOUT);
+
+ init(args.get(SimanticsArguments.SERVER), checkout);
+ }
+
+ /**
+ * @param checkout
+ * @return this
+ * @throws Exception
+ * @throws IOException
+ */
+ private DatabaseHandle init(String serverAddress, boolean checkout) throws IOException, Exception {
+ if (checkout) {
+ // Let UndoCoreManager pick a port on localhost for the working
+ // copy by setting the address of the local ServerInfo to null.
+ throw new UnsupportedOperationException("re-implement checkout");
+// activation = UndoCoreManager.getManager().checkout(
+// new ServerInfo("Remote Server", server),
+// new ServerInfo(UUID.randomUUID().toString()));
+//
+// ServerAddress localServer = activation.getDescriptor().getLocal().getAddress();
+// session = DatabaseUtils.connect(localServer);
+ } else {
+ session = DatabaseUtils.connect(serverAddress);
+// session = DatabaseUtils.connect(new ServerAddress("", 0, serverAddress));
+ }
+
+ return this;
+ }
+
+ @Override
+ protected void doDispose() {
+ // TODO: make this robust and safe
+
+ if (session != null) {
+ try {
+ LifecycleSupport support = session.getService(LifecycleSupport.class);
+ support.close(-1, false);
+ session = null;
+ } catch (DatabaseException e) {
+ }
+ }
+
+// if (activation != null) {
+// try {
+// UndoCoreManager manager = UndoCoreManager.getManager();
+// manager.deactivate(activation, 3000, TimeUnit.MILLISECONDS);
+//
+// if (deleteAtDispose) {
+// IServerDescriptor desc = activation.getDescriptor();
+// manager.deleteLocal(new ServerInfo[] { desc.getParent(), desc.getLocal() });
+// }
+// } catch (IOException e) {
+// } catch (InterruptedException e) {
+// }
+// activation = null;
+// }
+ }
+
+ /* (non-Javadoc)
+ * @see org.simantics.application.db.IDatabaseHandle#getServer()
+ */
+ @Override
+ public ServerI getServer() {
+ return server;
+ }
+
+ /* (non-Javadoc)
+ * @see org.simantics.application.db.IDatabaseHandle#getSession()
+ */
+ @Override
+ public Session getSession() {
+ return session;
+ }
+
+}