// albeit with different functions, which does have dependencies.\r
\r
import java.io.*;\r
+import java.nio.charset.Charset;\r
+import java.nio.file.Files;\r
+import java.nio.file.OpenOption;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.nio.file.StandardOpenOption;\r
+import java.util.List;\r
import java.util.UUID;\r
\r
import javax.xml.bind.JAXBContext;\r
\r
public static String DEFAULT_ENCODING = "";\r
public static String UTF8_ENCODING = "UTF-8";\r
+ public static Charset UTF8_CHARSET = Charset.forName(UTF8_ENCODING);\r
public static boolean FORCE_CREATE_PARENT_DIRS = true;\r
private static String JAVA_TEMP_DIR_PROPERTY = "java.io.tmpdir";\r
\r
return null;\r
}\r
}\r
+ \r
+ public static List<String> readFileAsLines(String filePath) {\r
+ List<String> lines = null;\r
+ try {\r
+ Path path = Paths.get(filePath);\r
+ lines = Files.readAllLines(path, UTF8_CHARSET);\r
+ } catch (Exception e) {\r
+ System.out.println("ERROR: " + e);\r
+ return null;\r
+ }\r
+ return lines;\r
+ }\r
+ \r
+ public static void writeFileFromLines(String filePath, Iterable<? extends CharSequence> lines) {\r
+ try {\r
+ Path path = Paths.get(filePath);\r
+ Files.write(path, lines, UTF8_CHARSET, StandardOpenOption.WRITE);\r
+ } catch (Exception e) {\r
+ System.out.println("ERROR: " + e);\r
+ }\r
+ }\r
\r
public static File saveFile(String dir, String relativeName, String content, boolean forceParentDirs) {\r
return saveFile(dir, relativeName, content, forceParentDirs, DEFAULT_ENCODING);\r
import java.io.File;\r
import java.io.FileInputStream;\r
import java.io.FileNotFoundException;\r
+import java.io.FileWriter;\r
import java.io.InputStream;\r
import java.sql.Connection;\r
import java.sql.PreparedStatement;\r
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;\r
import org.collectionspace.authentication.AuthN;\r
import org.collectionspace.services.common.api.JEEServerDeployment;\r
+import org.collectionspace.services.common.api.FileTools;\r
import org.collectionspace.services.common.api.Tools;\r
import org.collectionspace.services.common.authorization_mgt.AuthorizationCommon;\r
import org.collectionspace.services.common.config.ConfigReader;\r
// access rights to each.\r
HashSet<String> dbsCheckedOrCreated = createNuxeoDatabases();\r
\r
- // Update the SQL script that drops databases, so they can be\r
- // reinitialized, to reflect each of the Nuxeo-managed databases.\r
- updateInitializationScript(dbsCheckedOrCreated);\r
+ // Update the SQL script that drops databases so that they can be\r
+ // reinitialized, to include each of the Nuxeo-managed database names.\r
+ updateInitializationScript(getNuxeoDatabasesInitScriptFilename(), dbsCheckedOrCreated);\r
\r
//\r
// Start up and initialize our embedded Nuxeo instance.\r
private String getNuxeoProtoConfigFilename() {\r
return JEEServerDeployment.NUXEO_PROTOTYPE_CONFIG_FILENAME;\r
}\r
- \r
+ \r
private String getNuxeoConfigFilename(String reponame) {\r
return reponame + JEEServerDeployment.NUXEO_REPO_CONFIG_FILENAME_SUFFIX;\r
}\r
\r
+ private String getDatabaseScriptsPath() {\r
+ String cspaceInstanceId = getCspaceInstanceId();\r
+ String DATABASE_PRODUCT_NAME = "postgrres"; // FIXME: Hack during dev PLEASE REPLACE!!\r
+ return JEEServerDeployment.DATABASE_SCRIPTS_DIR_PATH + File.separator +\r
+ DATABASE_PRODUCT_NAME;\r
+// + JDBCTools.getDatabaseProductName(\r
+// JDBCTools.CSADMIN_DATASOURCE_NAME,\r
+// JDBCTools.getDatabaseName(repositoryName, cspaceInstanceId),\r
+// cspaceInstanceId);\r
+ }\r
+ \r
+ private String getNuxeoDatabasesInitScriptFilename() {\r
+ return getDatabaseScriptsPath()\r
+ + File.separator + JEEServerDeployment.NUXEO_DB_INIT_SCRIPT_FILENAME;\r
+ }\r
+ \r
/**\r
* @return the server resources path\r
*/\r
return repoConfigDoc;\r
}\r
\r
- private void updateInitializationScript(HashSet<String> dbsCheckedOrCreated) {\r
- for (String dbName : dbsCheckedOrCreated) {\r
- logger.warn("DROP DATABASE IF EXISTS " + dbName); // Temporary for debugging\r
+ private void updateInitializationScript(String dbInitializationScriptFilePath,\r
+ HashSet<String> dbsCheckedOrCreated) {\r
+ // Get the current copy of the Nuxeo databases initialization script file,\r
+ // if that file exists, and read all of its lines except for those which\r
+ // drop databases.\r
+ List<String> lines = null;\r
+ File nuxeoDatabasesInitScriptFile = new File(dbInitializationScriptFilePath);\r
+ try {\r
+ if (! nuxeoDatabasesInitScriptFile.canRead()) {\r
+ String msg = String.format("Could not find and/or read the Nuxeo databases initialization script file '%s'",\r
+ nuxeoDatabasesInitScriptFile.getCanonicalPath());\r
+ logger.warn(msg);\r
+ } else {\r
+ // Note: Exceptions are written only to the console, not thrown, by\r
+ // this method in the common-api package.\r
+ lines = FileTools.readFileAsLines(dbInitializationScriptFilePath);\r
+ for (String line : lines) {\r
+ // Elide current DROP DATABASE statements\r
+ if (line.toLowerCase().contains("DROP DATABASE".toLowerCase())) {\r
+ continue;\r
+ }\r
+ }\r
+ }\r
+ // Write new DROP DATABASE lines for every Nuxeo-managed database.\r
+ List<String> replacementLines = new ArrayList<String>();\r
+ for (String dbName : dbsCheckedOrCreated) {\r
+ replacementLines.add("DROP DATABASE IF EXISTS " + dbName);\r
+ }\r
+ // Append all (non-DROP DATABASE) existing lines from that file, if any.\r
+ if (lines != null && ! lines.isEmpty()) {\r
+ replacementLines.addAll(lines);\r
+ }\r
+ if (! nuxeoDatabasesInitScriptFile.canWrite()) {\r
+ String msg = String.format("Could not find and/or write the Nuxeo databases initialization script file '%s'",\r
+ nuxeoDatabasesInitScriptFile.getCanonicalPath());\r
+ logger.warn(msg);\r
+ } else {\r
+ // Note: Exceptions are written only to the console, not thrown, by\r
+ // this method in the common-api package.\r
+ FileTools.writeFileFromLines(dbInitializationScriptFilePath, replacementLines);\r
+ }\r
+ } catch (Exception e) {\r
+\r
}\r
+\r
}\r
}\r