package org.simantics.acorn; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Properties; import org.simantics.db.DatabaseUserAgent; import org.simantics.db.Driver; import org.simantics.db.ServerI; import org.simantics.db.ServerReference; import org.simantics.db.Session; import org.simantics.db.SessionReference; import org.simantics.db.exception.DatabaseException; public class AcornDriver implements Driver { public static final String AcornDriverName = "acorn"; @Override public String getName() { return AcornDriverName; } @Override public DatabaseUserAgent getDatabaseUserAgent(String address) throws DatabaseException { Path dbFolder = Paths.get(address); return AcornDatabaseManager.getDatabase(dbFolder).getUserAgent(); } @Override public void setDatabaseUserAgent(String address, DatabaseUserAgent dbUserAgent) throws DatabaseException { Path dbFolder = Paths.get(address); AcornDatabaseManager.getDatabase(dbFolder).setUserAgent(dbUserAgent); } @Override public Session getSession(String address, Properties properties) throws DatabaseException { Path dbFolder = Paths.get(address); Session session = AcornSessionManagerImpl.getInstance().createSession(new SessionReference() { @Override public ServerReference getServerReference() { return new ServerReference() { @Override public Path getDBFolder() { return dbFolder; } }; } @Override public long getSessionId() { return 0L; } }, null); if (!properties.containsKey("clientId")) properties.put("clientId", dbFolder.toFile().getAbsolutePath()); session.registerService(Properties.class, properties); Session s = session.peekService(Session.class); if (null == s) session.registerService(Session.class, session); return session; } @Override public ServerI getServer(String address, Properties properties) throws DatabaseException { return new AcornServerI(address); } @Override public Management getManagement(String address, Properties properties) throws DatabaseException { Path dbFolder = Paths.get(address); return new AcornManagement(dbFolder, properties); } private static class AcornServerI implements ServerI { private String address; public AcornServerI(String address) { this.address = address; } @Override public void stop() throws DatabaseException { AcornDatabaseManager.getDatabase(Paths.get(address)).tryToStop(); } @Override public void start() throws DatabaseException { AcornDatabaseManager.getDatabase(Paths.get(address)).start(); } @Override public boolean isActive() throws DatabaseException { return AcornDatabaseManager.getDatabase(Paths.get(address)).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 ""; } } }