public static void Load() { PrepareFogs(XConfig); adapter.StartFillDb(null); adapter.FillDb(fogs, null); adapter.FinishFillDb(null); }
public static void Init() { XElement xconfig = XElement.Load(path + "config.xml"); _xconfig = xconfig; // Кассеты перечислены через элементы LoadCassette. Имена кассет в файловой системе должны сравниваться по lower case cassettes = xconfig.Elements("LoadCassette") .Select(lc => { string cassPath = lc.Value; XAttribute write_att = lc.Attribute("write"); string name = cassPath.Split('/', '\\').Last(); return(new CassInfo() { name = name, path = cassPath, writable = (write_att != null && (write_att.Value == "yes" || write_att.Value == "true")) }); }) .ToArray(); // Формирую список фог-документов List <FogInfo> fogs_list = new List <FogInfo>(); // Прямое попадание в список фогов из строчек конфигуратора foreach (var lf in xconfig.Elements("LoadFog")) { string fogname = lf.Value; int lastpoint = fogname.LastIndexOf('.'); if (lastpoint == -1) { throw new Exception("Err in fog file name construction"); } string ext = fogname.Substring(lastpoint).ToLower(); bool writable = (lf.Attribute("writable")?.Value == "true" || lf.Attribute("write")?.Value == "yes") ? true : false; var atts = ReadFogAttributes(fogname); fogs_list.Add(new FogInfo() { vid = ext, pth = fogname, writable = writable && atts.prefix != null && atts.counter != null, owner = atts.owner, prefix = atts.prefix, counter = atts.counter == null ? -1 : Int32.Parse(atts.counter) }); } // Сбор фогов из кассет for (int i = 0; i < cassettes.Length; i++) { // В каждой кассете есть фог-элемент meta/имякассеты_current.fog, в нем есть владелец и может быть запрет на запись в виде // отсутствия атрибутов prefix или counter. Также там есть uri кассеты, надо проверить. CassInfo cass = cassettes[i]; string pth = cass.path + "/meta/" + cass.name + "_current.fog"; var atts = ReadFogAttributes(pth); // запишем владельца, уточним признак записи cass.owner = atts.owner; if (atts.prefix == null || atts.counter == null) { cass.writable = false; } fogs_list.Add(new FogInfo() { //cassette = cass, pth = pth, fogx = null, owner = atts.owner, writable = true //cass.writable, //prefix = atts.prefix, //counter = atts.counter }); // А еще в кассете могут быть другие фог-документы. Они размещаются в originals IEnumerable <FileInfo> fgs = (new DirectoryInfo(cass.path + "/originals")) .GetDirectories("????").SelectMany(di => di.GetFiles("*.fog")); // Быстро проглядим документы и поместим информацию в список фогов foreach (FileInfo fi in fgs) { var attts = ReadFogAttributes(fi.FullName); // запишем владельца, уточним признак записи cass.owner = attts.owner; fogs_list.Add(new FogInfo() { //cassette = cass, pth = fi.FullName, fogx = null, owner = attts.owner, //writable = cass.writable, //prefix = attts.prefix, //counter = attts.counter writable = cass.writable && attts.prefix != null && attts.counter != null });; } } // На выходе я определил, что будет массив fogs = fogs_list.ToArray(); fogs_list = null; // Подключение к базе данных, если задано string connectionstring = xconfig.Element("database")?.Attribute("connectionstring")?.Value; if (connectionstring != null) { string pre = connectionstring.Substring(0, connectionstring.IndexOf(':')); if (pre == "trs") { adapter = new TripleRecordStoreAdapter(); } else if (pre == "xml") { adapter = new XmlDbAdapter(); } adapter.Init(connectionstring); bool toload = false; if (toload) { adapter.StartFillDb(null); //adapter.LoadFromCassettesExpress(fogs.Select(fo => fo.pth), // null, null); adapter.FillDb(fogs, null); adapter.FinishFillDb(null); } else { } if (pre == "xml") { Load(); } // Логфайл элементов Put() //putlogfilename = connectionstring.Substring(connectionstring.IndexOf(':') + 1) + "logfile_put.txt"; putlogfilename = path + "logfile_put.txt"; } }