Esempio n. 1
0
        //=============== Редактирующие методы =================
        public override XElement EditCommand(XElement comm)
        {
            // Определение активного fog-документа
            XAttribute owner_att = comm.Attribute("owner");

            if (owner_att == null)
            {
                return(null);
            }
            //var af = connection.GetFogFiles().ToArray();
            Cassettes.RDFDocumentInfo active_fog = connection.GetFogFiles1()
                                                   .Where(fg => fg.owner == owner_att.Value && fg.isEditable)
                                                   .FirstOrDefault();
            if (active_fog == null)
            {
                return(null);
            }
            owner_att.Remove();
            // Еще надо бы проверить временную отметку. Сейчас мы "поверим", что она более поздняя
            if (comm.Name == "{http://fogid.net/o/}delete")
            {
                XAttribute id_att = comm.Attribute("id");
                if (id_att != null)
                {
                    string id = id_att.Value;
                    active_fog.GetRoot().Add(new XElement(comm));
                    active_fog.isChanged = true;
                    active_fog.Save();
                    dbadapter.Delete(id);
                }
            }
            else if (comm.Name == "{http://fogid.net/o/}substitute")
            {
                throw new NotImplementedException();
            }
            else
            {
                XAttribute id_att = comm.Attribute(Cassettes.ONames.rdfabout);
                if (id_att == null)
                {
                    string id = active_fog.NextId();
                    comm.Add(new XAttribute(Cassettes.ONames.rdfabout, id));
                    comm = dbadapter.Add(comm);
                }
                else
                {
                    comm = dbadapter.AddUpdate(comm);
                }
                active_fog.GetRoot().Add(new XElement(comm));
                active_fog.isChanged = true;
                active_fog.Save();
            }
            return(comm);
        }
        public override IEnumerable <Cassettes.RDFDocumentInfo> GetFogFiles1()
        {
            // loaddata или toload - признак того, что нужно загружать внутренние fog-документы, если они есть
            // isEditable или write - признак того, что позволено изменять элементы кассеты (файлы, фог-документы)
            List <Cassettes.RDFDocumentInfo> docs = new List <RDFDocumentInfo>();

            foreach (var cpair in cassettesInfo)
            {
                var ci     = cpair.Value;
                var toload = ci.loaddata;
                Cassettes.RDFDocumentInfo di0 = new Cassettes.RDFDocumentInfo(ci.cassette, ci.iseditable);
                docs.Add(di0);
                //if (!toload) continue;
                var qu = di0.GetRoot()
                         .Elements()
                         .Where(e =>
                {
                    if (e.Name == "document")
                    {
                        if (e.Element("iisstore")?.Attribute("documenttype")?.Value == "application/fog")
                        {
                            return(true);
                        }
                    }
                    else if (e.Name == "{http://fogid.net/o/}document")
                    {
                        string dmi = e.Element("{http://fogid.net/o/}docmetainfo")?.Value;
                        if (dmi != null && dmi.Contains("documenttype:application/fog;"))
                        {
                            return(true);
                        }
                    }
                    return(false);
                });
                foreach (var docnode in qu)
                {
                    docs.Add(new Cassettes.RDFDocumentInfo(docnode, ci.cassette.Dir.FullName, ci.iseditable));
                }
            }
            return(docs);
        }
        public IEnumerable <Cassettes.RDFDocumentInfo> GetFogFiles()
        {
            foreach (var cpair in cassettesInfo)
            {
                var ci     = cpair.Value;
                var toload = ci.loaddata;
                Cassettes.RDFDocumentInfo di0 = new Cassettes.RDFDocumentInfo(ci.cassette, true);
                yield return(di0);

                var qu = di0.GetRoot()
                         .Elements()
                         .Where(e =>
                {
                    if (e.Name == "document")
                    {
                        if (e.Element("iisstore")?.Attribute("documenttype")?.Value == "application/fog")
                        {
                            return(true);
                        }
                    }
                    else if (e.Name == "{http://fogid.net/o/}document")
                    {
                        string dmi = e.Element("{http://fogid.net/o/}docmetainfo")?.Value;
                        if (dmi != null && dmi.Contains("documenttype:application/fog;"))
                        {
                            return(true);
                        }
                    }
                    return(false);
                });
                foreach (var docnode in qu)
                {
                    var di = new Cassettes.RDFDocumentInfo(docnode, ci.cassette.Dir.FullName, toload);
                    //if (toload) di.ClearRoot();
                    yield return(di);
                }
                //di0.ClearRoot(); // Возможно, нехороший побочный эффект
            }
        }