]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java
Removed contact application support prints
[simantics/platform.git] / bundles / org.simantics.acorn / src / org / simantics / acorn / AcornDriver.java
index 0e6d52b9abf0ef3f6912951424207f363bd38895..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,44 +69,63 @@ public class AcornDriver implements Driver {
 
     @Override
     public ServerI getServer(String address, Properties properties) throws DatabaseException {
-        return new ServerI() {
-            
-            @Override
-            public void stop() throws DatabaseException {
-                // nop
-            }
-            
-            @Override
-            public void start() throws DatabaseException {
-                // nop
-            }
-            
-            @Override
-            public boolean isActive() throws DatabaseException {
-                return true;
-            }
-            
-            @Override
-            public String getAddress() throws DatabaseException {
-                return address;
-            }
-            
-            @Override
-            public String executeAndDisconnect(String command) throws DatabaseException {
-                return "";
-            }
-            
-            @Override
-            public String execute(String command) throws DatabaseException {
-                return "";
-            }
-        };
+        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(Database db, String address) {
+            this.database = db;
+            this.address = address;
+        }
+        
+        @Override
+        public void stop() throws DatabaseException {
+            database.tryToStop();
+        }
+        
+        @Override
+        public void start() throws DatabaseException {
+            database.start();
+        }
+        
+        @Override
+        public boolean isActive() throws DatabaseException {
+            return database.isRunning();
+        }
+        
+        @Override
+        public String getAddress() throws DatabaseException {
+            return address;
+        }
+        
+        @Override
+        public String executeAndDisconnect(String command) throws DatabaseException {
+            return "";
+        }
+        
+        @Override
+        public String execute(String command) throws DatabaseException {
+            return "";
+        }
     }
 
 }