private bool Initialize() { IsFirstLoad = false; AdditionalPreviewParsers = new List<Interfaces.DocumentParser>(); if (String.IsNullOrEmpty(DatabasePath)) DatabasePath = "Data//"; if (!Directory.Exists(DatabasePath)) { try { Directory.CreateDirectory(DatabasePath); } catch (Exception e) { logger.Fatal("Could not create data directory", e); return false; } } if (!File.Exists(DatabasePath + "Settings.xml")) { logger.Debug(DatabasePath + "Settings.xml" + " didn't exist -> First load"); IsFirstLoad = true; return false; } try { CurrentCompany = new Models.CompanyInformation(); CurrentCompany.ParseFromXElement(XElement.Parse(File.ReadAllText(DatabasePath + "Settings.xml")).Element("CurrentCompany").Element(CurrentCompany.XElementName)); } catch (Exception e) { logger.Fatal("Parsing LastCompany failed!", e); return false; } try { //Orders if (!File.Exists(DatabasePath + CurrentCompany.CompanyID + "\\Documents.xml")) using (StreamWriter writer = File.CreateText(DatabasePath + CurrentCompany.CompanyID + "\\Documents.xml")) writer.Write(new XElement(new XElement("Documents")).ToString()); using (StreamReader reader = File.OpenText(DatabasePath + CurrentCompany.CompanyID + "\\Documents.xml")) DocumentDB = XElement.Load(reader); logger.Debug("OrderDB successfully loaded"); } catch (Exception e) { logger.Fatal("Initializing DocumentDB failed!", e); return false; } try { // Articles if (!File.Exists(DatabasePath + CurrentCompany.CompanyID + "\\Articles.xml")) using (StreamWriter writer = File.CreateText(DatabasePath + CurrentCompany.CompanyID + "\\Articles.xml")) writer.Write(new XElement(new XElement("Articles")).ToString()); using (StreamReader reader = File.OpenText(DatabasePath + CurrentCompany.CompanyID + "\\Articles.xml")) ArticleDB = XElement.Load(reader); logger.Debug("ArticleDB successfully loaded"); } catch (Exception e) { logger.Fatal("Initializing ArticleDB failed!", e); return false; } try { // Customers if (!File.Exists(DatabasePath + CurrentCompany.CompanyID + "\\Customers.xml")) using (StreamWriter writer = File.CreateText(DatabasePath + CurrentCompany.CompanyID + "\\Customers.xml")) writer.Write(new XElement(new XElement("Customers")).ToString()); using (StreamReader reader = File.OpenText(DatabasePath + CurrentCompany.CompanyID + "\\Customers.xml")) CustomerDB = XElement.Load(reader); logger.Debug("CustomerDB successfully loaded"); } catch (Exception e) { logger.Fatal("Initializing CustomerDB failed!", e); return false; } try { // Others if (!File.Exists(DatabasePath + CurrentCompany.CompanyID + "\\Others.xml")) using (StreamWriter writer = File.CreateText(DatabasePath + CurrentCompany.CompanyID + "\\Others.xml")) writer.Write(new XElement(new XElement("Settings")).ToString()); using (StreamReader reader = File.OpenText(DatabasePath + CurrentCompany.CompanyID + "\\Others.xml")) SettingsDB = XElement.Load(reader); logger.Debug("SettingsDB successfully loaded"); } catch (Exception e) { logger.Fatal("Initializing SettingsDB failed!", e); return false; } OtherDBs = new List<XElement>(); if (RegisteredAdditionalDBs == null) RegisteredAdditionalDBs = new List<Interfaces.IXMLStorageable>(); else { foreach (var item in RegisteredAdditionalDBs) registerStorageableItem(item, false); } logger.Info("XDatabase connected"); return true; }
private IEnumerable<Models.CompanyInformation> getCompanyList() { logger.Trace("Start getting company list"); XElement CompanySettings; var temp = new ObservableCollection<Models.CompanyInformation>(); foreach (string dir in System.IO.Directory.GetDirectories(DatabasePath)) { logger.Trace("Parsing " + dir + "\\Others.xml"); try { using (StreamReader reader = File.OpenText(dir + "\\Others.xml")) CompanySettings = XElement.Load(reader); } catch (Exception e) { logger.Trace("Error parsing " + dir + "\\Others.xml", e); continue; } var item = new Models.CompanyInformation(); item.ParseFromXElement(CompanySettings.Element(item.XElementName)); try { temp.Add(item); } catch (Exception e) { logger.Trace("Error creating CompanyInformation", e); } } logger.Trace("Finished creating company list with " + temp.Count.ToString() + " items"); return temp; }