 |
/*
* Berkeley DB XML .NET API
*
* Copyright (C) 2007 Jana Business Consulting Ltd. All rights reserved.
*
* For more information, see http://www.janabiz.com.
*
*/
using System;
using System.Collections;
using System.IO;
using JanaBiz.Db;
using JanaBiz.DbXml;
using JanaBiz.DbXml.Exceptions;
public class LoadContainer
{
public static void Main(string[] args)
{
IDictionary options = parseArguments(args, "h:p:");
string envdir = (string) options['h'];
string filePath = (string) options['p'];
if (envdir == null || filePath == null) {
Usage();
}
DirectoryInfo fileDir = new DirectoryInfo(filePath);
if (!fileDir.Exists) {
Console.WriteLine("File path directory does not exist.");
Usage();
}
DirectoryInfo nsDataDir = GetSubDirectory(fileDir, "nsData");
DirectoryInfo simpleDataDir = GetSubDirectory(fileDir, "simpleData");
DbEnvironment dbEnv = null;
XmlManager mgr = null;
try {
// Open an environment
dbEnv = CreateDbEnvironment(envdir);
// Open an environment and manager
using (mgr = CreateManager(dbEnv)) {
LoadFiles(mgr, "namespaceExampleData.dbxml",
nsDataDir.GetFiles("*.xml"));
LoadFiles(mgr, "simpleExampleData.dbxml",
simpleDataDir.GetFiles("*.xml"));
}
} catch (DbXmlException e) {
Console.WriteLine("Error in exampleLoadContainer");
Console.WriteLine(e.ToString());
} finally {
if (mgr != null) {
mgr.Close();
}
if (dbEnv != null) {
dbEnv.Close();
}
}
}
public static void LoadFiles(XmlManager mgr, string containerName, FileInfo[] files)
{
// Open a transactional container
XmlContainerConfig containerconfig = new XmlContainerConfig();
containerconfig.AllowCreate = true;
containerconfig.Transactional = true;
XmlContainer container = null;
try {
container = mgr.OpenContainer(null, containerName, containerconfig);
// Create an update context
using (XmlUpdateContext uc = mgr.CreateUpdateContext()) {
// Start a transaction
using (XmlTransaction txn = mgr.CreateTransaction()) {
XmlDocumentConfig docconfig = new XmlDocumentConfig();
foreach (FileInfo file in files) {
using (FileStream stream = file.OpenRead()) {
// Create a document
using (XmlDocument doc = mgr.CreateDocument()) {
doc.Name = file.Name;
doc.StreamContent = mgr.CreateInputStream(stream);
XmlMetaData metaData = new XmlMetaData("http://dbxmlExamples/timestamp",
"timeStamp",
new XmlValue(DateTime.Now.ToString()));
doc.SetMetaData(metaData);
container.PutDocument(txn, doc, uc, docconfig);
Console.WriteLine("Added " + file.Name + " to container " +
containerName);
}
}
}
// Commit the index adds
txn.Commit();
}
}
} catch (DbXmlException e) {
Console.WriteLine(e.ToString());
} finally {
if (container != null) {
container.Close();
}
}
}
public static DirectoryInfo GetSubDirectory(DirectoryInfo fileDir, string subdir)
{
DirectoryInfo[] dirs = fileDir.GetDirectories(subdir);
if (dirs.Length < 1) {
Console.WriteLine(subdir + " subdirectory does not exist.");
Usage();
}
return dirs[0];
}
public static DbEnvironment CreateDbEnvironment(string envdir)
{
DbEnvironmentConfig envconf = new DbEnvironmentConfig();
envconf.CacheSize = 50*1024;
envconf.AllowCreate = true;
envconf.InitializeCache = true;
envconf.Transactional = true;
envconf.InitializeLocking = true;
envconf.InitializeLogging = true;
envconf.RunRecovery = true;
envconf.ErrorWriter = Console.Out;
envconf.ErrorPrefix = "LOG";
DbEnvironment env = new DbEnvironment(envdir, envconf);
return env;
}
public static XmlManager CreateManager(DbEnvironment env)
{
XmlManagerConfig mgrconfig = new XmlManagerConfig();
mgrconfig.AdoptEnvironment = true;
try {
return new XmlManager(env, mgrconfig);
} catch (Exception e) {
env.Close();
throw e;
}
}
private static void Usage()
{
Console.WriteLine("This program loads the examples XML data into the examples container.");
Console.WriteLine("Provide the directory where you want to place your database environment, ");
Console.WriteLine("and the path to the xmlData directory (this exists in your DB XML examples");
Console.WriteLine("directory).");
Console.WriteLine();
Console.WriteLine("\t-h <dbenv directory> -p <filepath>");
Console.WriteLine("For example:");
Console.WriteLine("\texampleLoadContainer.exe -h examplesEnvironment -p /home/user1/dbxml-1.1.0/examples/xmlData");
Environment.Exit(-1);
}
private static IDictionary parseArguments(string[] args, string options)
{
IDictionary result = new Hashtable();
for (int i = 0; i < args.Length; ++i) {
string arg = args[i];
if ((arg.StartsWith("-")
#if WIN32
|| arg.StartsWith("/")
#endif
) && arg.Length > 1) {
int index = options.IndexOf(arg[1]);
if (index == -1) {
Console.WriteLine("Unknown option: " + arg);
Usage();
break;
} else {
++index;
if (index < options.Length && options[index] == ':') {
if (arg.Length > 2 && (arg[2] == '='
#if WIN32
|| arg[2] == ':'
#endif
)) {
result[arg[1]] = arg.Substring(3);
} else if (arg.Length > 2) {
Console.WriteLine("Unknown option: " + arg);
Usage();
} else {
++i;
if (i >= args.Length) {
Console.WriteLine("Invalid option: " + arg);
Usage();
}
result[arg[1]] = args[i];
}
} else {
result[arg[1]] = "true";
}
}
} else {
Console.WriteLine("Too many arguments: " + arg);
Usage();
}
}
return result;
}
}
 |
|
 |
|