]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java
Acorn: Fix WriteRunnable.runReally() and other fixes
[simantics/platform.git] / bundles / org.simantics.acorn / src / org / simantics / acorn / AcornDriver.java
index 99ec490621edb30449380b7bf42e909fe90da7a9..536c35c74552b345d73b38a3c68e066212bd9af8 100644 (file)
@@ -2,8 +2,11 @@ package org.simantics.acorn;
 
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Properties;
 
+import org.simantics.db.Database;
 import org.simantics.db.DatabaseUserAgent;
 import org.simantics.db.Driver;
 import org.simantics.db.ServerI;
@@ -16,6 +19,9 @@ public class AcornDriver implements Driver {
 
     public static final String AcornDriverName = "acorn";
 
+    private Map<String, ServerI> servers = new HashMap<>();
+    private Map<String, Management> managements = new HashMap<>();
+    
     @Override
     public String getName() {
         return AcornDriverName;
@@ -23,14 +29,12 @@ public class AcornDriver implements Driver {
 
     @Override
     public DatabaseUserAgent getDatabaseUserAgent(String address) throws DatabaseException {
-        Path dbFolder = Paths.get(address);
-        return AcornDatabaseManager.getDatabase(dbFolder).getUserAgent();
+        return AcornDatabaseManager.getDatabase(Paths.get(address)).getUserAgent();
     }
 
     @Override
     public void setDatabaseUserAgent(String address, DatabaseUserAgent dbUserAgent) throws DatabaseException {
-        Path dbFolder = Paths.get(address);
-        AcornDatabaseManager.getDatabase(dbFolder).setUserAgent(dbUserAgent);
+        AcornDatabaseManager.getDatabase(Paths.get(address)).setUserAgent(dbUserAgent);
     }
 
     @Override
@@ -55,7 +59,7 @@ public class AcornDriver implements Driver {
             }
         }, null);
         if (!properties.containsKey("clientId"))
-            properties.put("clientId", dbFolder.toFile().getAbsolutePath());
+            properties.put("clientId", dbFolder.toAbsolutePath().toString());
         session.registerService(Properties.class, properties);
         Session s = session.peekService(Session.class);
         if (null == s)
@@ -65,36 +69,47 @@ public class AcornDriver implements Driver {
 
     @Override
     public ServerI getServer(String address, Properties properties) throws DatabaseException {
-        return new AcornServerI(address);
+        ServerI server = servers.get(address);
+        if (server == null) {
+            server = new AcornServerI(AcornDatabaseManager.getDatabase(Paths.get(address)), address);
+            servers.put(address, server);
+        }
+        return server;
     }
 
     @Override
     public Management getManagement(String address, Properties properties) throws DatabaseException {
-        Path dbFolder = Paths.get(address);
-        return new AcornManagement(dbFolder, properties);
+        Management mgmt = managements.get(address);
+        if (mgmt == null) {
+            mgmt = new AcornManagement(AcornDatabaseManager.getDatabase(Paths.get(address)), properties);
+            managements.put(address, mgmt);
+        }
+        return mgmt;
     }
     
     private static class AcornServerI implements ServerI {
         
+        private Database database;
         private String address;
 
-        public AcornServerI(String address) {
+        public AcornServerI(Database db, String address) {
+            this.database = db;
             this.address = address;
         }
         
         @Override
         public void stop() throws DatabaseException {
-            AcornDatabaseManager.getDatabase(Paths.get(address)).tryToStop();
+            database.tryToStop();
         }
         
         @Override
         public void start() throws DatabaseException {
-            AcornDatabaseManager.getDatabase(Paths.get(address)).start();
+            database.start();
         }
         
         @Override
         public boolean isActive() throws DatabaseException {
-            return AcornDatabaseManager.getDatabase(Paths.get(address)).isRunning();
+            return database.isRunning();
         }
         
         @Override