//=============== Редактирующие методы ================= 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(); // Возможно, нехороший побочный эффект } }