X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.acorn%2Fsrc%2Forg%2Fsimantics%2Facorn%2FAcornDriver.java;h=536c35c74552b345d73b38a3c68e066212bd9af8;hp=0e6d52b9abf0ef3f6912951424207f363bd38895;hb=4aba159170fc72d39c2f930ea224aa71f4cdc2e7;hpb=a0687ce02bac73aad9e0d7ddc85625016604f0db diff --git a/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java b/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java index 0e6d52b9a..536c35c74 100644 --- a/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java +++ b/bundles/org.simantics.acorn/src/org/simantics/acorn/AcornDriver.java @@ -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 servers = new HashMap<>(); + private Map 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 ""; + } } }