]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.project/src/org/simantics/project/management/ServerManagerFactory.java
Include acorn db in db.client feature and make it the default db driver
[simantics/platform.git] / bundles / org.simantics.project / src / org / simantics / project / management / ServerManagerFactory.java
index 0cf2aa045455d809b2d3707e6c9a3e5cc2ad0b25..4a673b97dce934bf7165bdded2744db8382b63f8 100644 (file)
-/*******************************************************************************
- * 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.project.management;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-
-import org.apache.log4j.Logger;
-import org.simantics.db.DatabaseUserAgent;
-import org.simantics.db.Driver;
-import org.simantics.db.Manager;
-import org.simantics.db.exception.DatabaseException;
-import org.simantics.utils.FileUtils;
-
-public class ServerManagerFactory {
-    public static ServerManager create(String databaseId, String address) throws IOException, DatabaseException {
-        Driver driver = Manager.getDriver(databaseId);
-        if (driver == null)
-            throw new DatabaseException("Driver for databaseId=" + databaseId + " not found!");
-        System.out.println("ServerManagerFactory.create called with databaseId=" + databaseId + " and driver is " + driver.toString());
-        DatabaseUserAgent agent = Manager.getUserAgent(databaseId);
-        if (agent != null)
-            driver.setDatabaseUserAgent(address, agent);
-        return new ServerManager(driver);
-    }
-       /**
-        * Create a server manager in OSGi platform.
-        *
-        * @return
-        * @throws IOException
-        * @throws ClassNotFoundException
-        * @throws RuntimeException unexpected problem with OSGi environment
-        */
-       public static ServerManager createOSGI() throws IOException, RuntimeException {
-               try {
-                       ClassLoader cl = ServerManager.class.getClassLoader();
-
-                       // Object bundle = Platform.getBundle("org.simantics.db.build");
-                       Class<?> Platform_class = cl.loadClass("org.eclipse.core.runtime.Platform");
-                       Method Platform_getBundle = Platform_class.getMethod("getBundle", String.class);
-                       Object bundle = Platform_getBundle.invoke(null, "org.simantics.db.build");
-                       if (bundle==null) throw new RuntimeException("Bundle org.simantics.db.build not found.");
-
-                       // URL db_build_url = bundle.getEntry("/");
-                       Class<?> Bundle_class = cl.loadClass("org.osgi.framework.Bundle");
-                       Method Bundle_getEntry = Bundle_class.getMethod("getEntry", String.class);
-                       URL db_build_url = (URL) Bundle_getEntry.invoke(bundle, "/");
-
-               // URL db_build_file_url = FileLocator.toFileURL( db_build_url );
-                       Class<?> FileLocator_class = cl.loadClass("org.eclipse.core.runtime.FileLocator");
-                       Method FileLocator_toFileURL = FileLocator_class.getMethod("toFileURL", URL.class);
-                       URL db_build_file_url = (URL) FileLocator_toFileURL.invoke(null, db_build_url);
-
-                       @SuppressWarnings("unused")
-            String buildFile = URLDecoder.decode(db_build_file_url.getPath(), "UTF-8");
-
-//             File db_build_file = new File( buildFile );
-               //return new ServerManager( db_build_file );
-               throw new RuntimeException("ServerManager.createOSGI not implemented.");
-               } catch( ClassNotFoundException e ) {
-                       throw new RuntimeException(e);
-               } catch (SecurityException e) {
-                       throw new RuntimeException(e);
-               } catch (NoSuchMethodException e) {
-                       throw new RuntimeException(e);
-               } catch (IllegalArgumentException e) {
-                       throw new RuntimeException(e);
-               } catch (IllegalAccessException e) {
-                       throw new RuntimeException(e);
-               } catch (InvocationTargetException e) {
-                       throw new RuntimeException(e);
-               }
-       }
-
-       /**
-        * Create a server manager in an POJO environment.
-        *
-        * @return
-        * @throws IOException
-        */
-       public static ServerManager createPOJO() throws IOException {
-               String tempPath = System.getenv("tmp");
-               if (tempPath==null) tempPath = "c:/temp/";
-               File driverDir = new File(tempPath+"/core_drivers");
-               if (!driverDir.exists()) {
-                       System.out.println("Extracting Core drivers to "+driverDir);
-                       driverDir.mkdirs();
-                       ServerManagerFactory.extractDrivers(driverDir);
-               } else {
-                       System.out.println("Loading Core drivers from "+driverDir);
-               }
-               //return new ServerManager(driverDir);
-        throw new RuntimeException("ServerManager.createPOJO not implemented.");
-       }
-
-    public static ServerManager createPOJO(File driverDir) throws IOException {
-        //return new ServerManager(driverDir);
-        throw new RuntimeException("ServerManager.createPOJO not implemented.");
-    }
-
-    static ServerManager cached;
-
-    public static boolean isOSGi() {
-       try {
-               ServerManager.class.getClassLoader().loadClass("org.osgi.framework.Bundle");
-               return true;
-       } catch (ClassNotFoundException e) {
-               return false;
-       }
-    }
-
-    public synchronized static ServerManager getServerManager() {
-       if (cached!=null) return cached;
-       try {
-               try {
-                       return createOSGI();
-               } catch(RuntimeException e) {
-                       return createPOJO();
-               }
-       } catch (IOException e) {
-               throw new RuntimeException(e);
-       }
-    }
-
-
-    /**
-     * Extracts drivers files to a location.
-     *
-     * @param path location where to extract application files
-     * @throws IOException
-     */
-       public static void extractDrivers(File path)
-       throws IOException
-       {
-               // Extract org.simantics.db.build.zip to workspace
-               InputStream is = ServerManager.class.getResource("org.simantics.db.build.zip").openStream();
-               try {
-                       extractZip(is, path);
-               } finally {
-                       is.close();
-               }
-       }
-
-    /**
-     * Extract a zip file into a directory
-     *
-     * @param zipInput
-     * @param dst directory
-     * @throws IOException
-     */
-    private static void extractZip(InputStream zipInput, File dst) throws IOException {
-        Logger myLogger = Logger.getLogger(FileUtils.class);
-        byte[] buf = new byte[8192];
-        ZipInputStream zis = new ZipInputStream(zipInput);
-        ZipEntry entry;
-
-        entry = zis.getNextEntry();
-        while (entry != null) {
-            // for each entry to be extracted
-            String name = entry.getName();
-            myLogger.debug("Extracting "+name);
-            File file = new File(dst, name);
-
-            if (entry.isDirectory())
-            {
-                if ( !file.exists() ) file.mkdirs();
-            } else {
-                File parent = file.getParentFile();
-                if (!parent.exists()) parent.mkdirs();
-                if (!file.exists()) file.createNewFile();
-
-                FileOutputStream fileoutputstream = new FileOutputStream(file);
-                try {
-                    int n = 0;
-                    while ((n = zis.read(buf, 0, buf.length)) > -1)
-                        fileoutputstream.write(buf, 0, n);
-                } finally {
-                    fileoutputstream.close();
-                }
-            }
-
-            zis.closeEntry();
-            entry = zis.getNextEntry();
-        }// while
-
-        zis.close();
-    }
-
-
-}
-
+/*******************************************************************************\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.project.management;\r
+\r
+import java.io.File;\r
+import java.io.FileOutputStream;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
+import java.lang.reflect.InvocationTargetException;\r
+import java.lang.reflect.Method;\r
+import java.net.URL;\r
+import java.net.URLDecoder;\r
+import java.util.zip.ZipEntry;\r
+import java.util.zip.ZipInputStream;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.simantics.db.DatabaseUserAgent;\r
+import org.simantics.db.Driver;\r
+import org.simantics.db.Manager;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.utils.FileUtils;\r
+\r
+public class ServerManagerFactory {\r
+    public static ServerManager create(String databaseId, String address) throws IOException, DatabaseException {\r
+        Driver driver = Manager.getDriver(databaseId);\r
+        if (driver == null)\r
+            throw new IllegalArgumentException("Database driver with ID " + databaseId + " could not be found!");\r
+        System.out.println("ServerManagerFactory.create called with id " + databaseId + ", driver is " + driver.toString());\r
+        DatabaseUserAgent agent = Manager.getUserAgent(databaseId);\r
+        if (agent != null)\r
+            driver.setDatabaseUserAgent(address, agent);\r
+        return new ServerManager(driver);\r
+    }\r
+       /**\r
+        * Create a server manager in OSGi platform.\r
+        *\r
+        * @return\r
+        * @throws IOException\r
+        * @throws ClassNotFoundException\r
+        * @throws RuntimeException unexpected problem with OSGi environment\r
+        */\r
+       public static ServerManager createOSGI() throws IOException, RuntimeException {\r
+               try {\r
+                       ClassLoader cl = ServerManager.class.getClassLoader();\r
+\r
+                       // Object bundle = Platform.getBundle("org.simantics.db.build");\r
+                       Class<?> Platform_class = cl.loadClass("org.eclipse.core.runtime.Platform");\r
+                       Method Platform_getBundle = Platform_class.getMethod("getBundle", String.class);\r
+                       Object bundle = Platform_getBundle.invoke(null, "org.simantics.db.build");\r
+                       if (bundle==null) throw new RuntimeException("Bundle org.simantics.db.build not found.");\r
+\r
+                       // URL db_build_url = bundle.getEntry("/");\r
+                       Class<?> Bundle_class = cl.loadClass("org.osgi.framework.Bundle");\r
+                       Method Bundle_getEntry = Bundle_class.getMethod("getEntry", String.class);\r
+                       URL db_build_url = (URL) Bundle_getEntry.invoke(bundle, "/");\r
+\r
+               // URL db_build_file_url = FileLocator.toFileURL( db_build_url );\r
+                       Class<?> FileLocator_class = cl.loadClass("org.eclipse.core.runtime.FileLocator");\r
+                       Method FileLocator_toFileURL = FileLocator_class.getMethod("toFileURL", URL.class);\r
+                       URL db_build_file_url = (URL) FileLocator_toFileURL.invoke(null, db_build_url);\r
+\r
+                       @SuppressWarnings("unused")\r
+            String buildFile = URLDecoder.decode(db_build_file_url.getPath(), "UTF-8");\r
+\r
+//             File db_build_file = new File( buildFile );\r
+               //return new ServerManager( db_build_file );\r
+               throw new RuntimeException("ServerManager.createOSGI not implemented.");\r
+               } catch( ClassNotFoundException e ) {\r
+                       throw new RuntimeException(e);\r
+               } catch (SecurityException e) {\r
+                       throw new RuntimeException(e);\r
+               } catch (NoSuchMethodException e) {\r
+                       throw new RuntimeException(e);\r
+               } catch (IllegalArgumentException e) {\r
+                       throw new RuntimeException(e);\r
+               } catch (IllegalAccessException e) {\r
+                       throw new RuntimeException(e);\r
+               } catch (InvocationTargetException e) {\r
+                       throw new RuntimeException(e.getCause());\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Create a server manager in an POJO environment.\r
+        *\r
+        * @return\r
+        * @throws IOException\r
+        */\r
+       public static ServerManager createPOJO() throws IOException {\r
+               String tempPath = System.getenv("tmp");\r
+               if (tempPath==null) tempPath = "c:/temp/";\r
+               File driverDir = new File(tempPath+"/core_drivers");\r
+               if (!driverDir.exists()) {\r
+                       System.out.println("Extracting Core drivers to "+driverDir);\r
+                       driverDir.mkdirs();\r
+                       ServerManagerFactory.extractDrivers(driverDir);\r
+               } else {\r
+                       System.out.println("Loading Core drivers from "+driverDir);\r
+               }\r
+               //return new ServerManager(driverDir);\r
+        throw new RuntimeException("ServerManager.createPOJO not implemented.");\r
+       }\r
+\r
+    public static ServerManager createPOJO(File driverDir) throws IOException {\r
+        //return new ServerManager(driverDir);\r
+        throw new RuntimeException("ServerManager.createPOJO not implemented.");\r
+    }\r
+\r
+    static ServerManager cached;\r
+\r
+    public static boolean isOSGi() {\r
+       try {\r
+               ServerManager.class.getClassLoader().loadClass("org.osgi.framework.Bundle");\r
+               return true;\r
+       } catch (ClassNotFoundException e) {\r
+               return false;\r
+       }\r
+    }\r
+\r
+    public synchronized static ServerManager getServerManager() {\r
+       if (cached!=null) return cached;\r
+       try {\r
+               try {\r
+                       return createOSGI();\r
+               } catch(RuntimeException e) {\r
+                       return createPOJO();\r
+               }\r
+       } catch (IOException e) {\r
+               throw new RuntimeException(e);\r
+       }\r
+    }\r
+\r
+\r
+    /**\r
+     * Extracts drivers files to a location.\r
+     *\r
+     * @param path location where to extract application files\r
+     * @throws IOException\r
+     */\r
+       public static void extractDrivers(File path)\r
+       throws IOException\r
+       {\r
+               // Extract org.simantics.db.build.zip to workspace\r
+               InputStream is = ServerManager.class.getResource("org.simantics.db.build.zip").openStream();\r
+               try {\r
+                       extractZip(is, path);\r
+               } finally {\r
+                       is.close();\r
+               }\r
+       }\r
+\r
+    /**\r
+     * Extract a zip file into a directory\r
+     *\r
+     * @param zipInput\r
+     * @param dst directory\r
+     * @throws IOException\r
+     */\r
+    private static void extractZip(InputStream zipInput, File dst) throws IOException {\r
+        Logger myLogger = Logger.getLogger(FileUtils.class);\r
+        byte[] buf = new byte[8192];\r
+        ZipInputStream zis = new ZipInputStream(zipInput);\r
+        ZipEntry entry;\r
+\r
+        entry = zis.getNextEntry();\r
+        while (entry != null) {\r
+            // for each entry to be extracted\r
+            String name = entry.getName();\r
+            myLogger.debug("Extracting "+name);\r
+            File file = new File(dst, name);\r
+\r
+            if (entry.isDirectory())\r
+            {\r
+                if ( !file.exists() ) file.mkdirs();\r
+            } else {\r
+                File parent = file.getParentFile();\r
+                if (!parent.exists()) parent.mkdirs();\r
+                if (!file.exists()) file.createNewFile();\r
+\r
+                FileOutputStream fileoutputstream = new FileOutputStream(file);\r
+                try {\r
+                    int n = 0;\r
+                    while ((n = zis.read(buf, 0, buf.length)) > -1)\r
+                        fileoutputstream.write(buf, 0, n);\r
+                } finally {\r
+                    fileoutputstream.close();\r
+                }\r
+            }\r
+\r
+            zis.closeEntry();\r
+            entry = zis.getNextEntry();\r
+        }// while\r
+\r
+        zis.close();\r
+    }\r
+\r
+\r
+}\r
+\r