Esempio n. 1
0
 public static void Load()
 {
     PrepareFogs(XConfig);
     adapter.StartFillDb(null);
     adapter.FillDb(fogs, null);
     adapter.FinishFillDb(null);
 }
Esempio n. 2
0
        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";
            }
        }