public void Save() { db.Save(Dir.FullName + "/meta/" + Name + "_current.fog"); XElement xconfig = Cassette.RDFdb(Name + "_cassette_1", new XElement(ONames.TagSourcemeta, new XAttribute(ONames.rdfabout, Name + "config_1"), new XElement(ONames.TagFoldername, _folderNumber), new XElement(ONames.TagDocumentNumber, _documentNumber))); xconfig.Save(Dir.FullName + "/meta/" + Name + "_config.fog"); }
/// <summary> /// Создатель новой кассеты /// </summary> /// <param name="cassPath"></param> /// <returns></returns> static public Cassette Create(string cassPath, string owner) { string cass_name = cassPath.Split(Cassette.slashes).Last(); if (Directory.Exists(cassPath) && File.Exists(cassPath + "/cassette.finfo")) { return(new Cassette(cassPath)); } else { DirectoryInfo dir = Directory.Exists(cassPath) ? new DirectoryInfo(cassPath) : Directory.CreateDirectory(cassPath); // Специальная отметка для кассеты Cassette.finfo_default.Save(dir.FullName + "/cassette.finfo"); DirectoryInfo meta = Directory.CreateDirectory(cassPath + "/meta"); DirectoryInfo originals = Directory.CreateDirectory(cassPath + "/originals"); DirectoryInfo preview = Directory.CreateDirectory(cassPath + "/documents"); Directory.CreateDirectory(originals.FullName + "/0001"); DirectoryInfo small = Directory.CreateDirectory(preview.FullName + "/small/0001"); DirectoryInfo medium = Directory.CreateDirectory(preview.FullName + "/medium/0001"); DirectoryInfo normal = Directory.CreateDirectory(preview.FullName + "/normal/0001"); XElement xconfig = Cassette.RDFdb("configdb_" + cass_name + "_1", new XElement(ONames.TagSourcemeta, new XAttribute(ONames.rdfabout, "sourcemeta_" + cass_name + "_1"), new XElement(ONames.TagFoldername, "0001"), new XElement(ONames.TagDocumentNumber, "0001"))); xconfig.Save(meta.FullName + "/" + cass_name + "_config.fog"); //string owner = "mag_9347"; string uri = "iiss://" + cass_name + "@iis.nsk.su/meta"; XElement xmetadb = Cassette.RDFdb(cass_name + "_current", new XAttribute(ONames.AttUri, uri), new XAttribute(ONames.AttOwner, owner), new XAttribute(ONames.AttPrefix, cass_name + "_"), new XAttribute(ONames.AttCounter, "1001"), new XElement(ONames.TagCassette, new XAttribute(ONames.rdfabout, cass_name + "_cassetteId"), new XElement(ONames.TagName, cass_name), new XElement(ONames.TagCassetteUri, uri)), new XElement(ONames.TagCollectionmember, new XAttribute(ONames.rdfabout, cass_name + "_cassetteId_cmId"), new XElement(ONames.TagIncollection, new XAttribute(ONames.rdfresource, "cassetterootcollection")), new XElement(ONames.TagCollectionitem, new XAttribute(ONames.rdfresource, cass_name + "_cassetteId")))); xmetadb.Save(meta.FullName + "/" + cass_name + "_current.fog"); return(new Cassette(dir, cass_name, "0001", "0001", xmetadb)); } }
public RDFDocumentInfo(Cassette cassette, bool editable) { isEditable = editable; // Это другой toload !!! и означает загрузку фог-документа кассеты и еще префикса и каунтера this.cassette = cassette; this.uri = "iiss://" + cassette.Name + "@iis.nsk.su/meta"; filePath = cassette.Dir.FullName + "/meta/" + cassette.Name + "_current.fog"; dbId = cassette.DbId ?? (cassette.Name + "Id"); owner = cassette.Owner; if (editable) { this.root = //File.Exists(filePath+".xml") ? XElement.Load(filePath+".xml") : XElement.Load(filePath); var pAtt = root.Attribute("prefix"); var cAtt = root.Attribute("counter"); if (pAtt != null && cAtt != null && Int32.TryParse(cAtt.Value, out counter)) { prefix = pAtt.Value; isEditable = true; } } }
//public static CassetteInfo LoadCassette(string cassetteFolder) { return LoadCassette(cassetteFolder, true); } public static CassetteInfo LoadCassette(string cassetteFolder, bool loaddata, bool iseditable) { //var cassetteFolder = cassettePath.Value; //if (!Directory.Exists(cassetteFolder) || (!File.Exists(cassetteFolder + "cassette.finfo"))) return null; var cassette = new Cassette(cassetteFolder, loaddata); List <RDFDocumentInfo> di_list = null; if (loaddata) { di_list = new List <RDFDocumentInfo>(); var dd = cassette.DataDocuments().ToList(); foreach (var xDoc in dd) { di_list.Add( new RDFDocumentInfo(xDoc, cassetteFolder)); } } var cassetteInfo = new CassetteInfo { fullName = "iiss://" + cassette.Name + "@iis.nsk.su", cassette = cassette, url = cassette.Dir.FullName + '/', docsInfo = di_list, loaddata = loaddata, iseditable = iseditable, owner = cassette.Owner }; if (loaddata) { cassetteInfo.docsInfo.Add(new RDFDocumentInfo(cassette, true)); } return(cassetteInfo); }
/// <summary> /// Конструктор для основного документа кассеты /// </summary> /// <param name="cassette"></param> public RDFDocumentInfo(Cassette cassette) : this(cassette, true) { }
public static void MakeDZCollection(this Cassette cass, XElement xitem, Func <Cassette, XElement, string, Uri> makePhotoPreviews) { string uri = "iiss://" + cass.Name + "@iis.nsk.su/" + cass._folderNumber + "/" + cass._documentNumber; string sdocId = cass.GenerateNewId(); XElement sdoc = new XElement(ONames.TagDocument, new XAttribute(ONames.rdfabout, sdocId), xitem.Element(ONames.TagName), new XElement(ONames.TagIisstore, new XAttribute(ONames.AttDocumenttype, "scanned/dz"), new XAttribute(ONames.AttUri, uri))); cass.db.Add(sdoc); string xitemId = xitem.Attribute(ONames.rdfabout).Value; foreach (XAttribute att in cass.GetInverseXItems(xitemId) .Select(cm => cm.Elements() .Select(sel => sel.Attribute(ONames.rdfresource)) .Where(att => att != null && att.Value == xitemId)) .SelectMany(resourceattributes => resourceattributes)) { att.Value = sdocId; } // List <XElement> colmembers = cass.GetInverseXItems(sdocId, ONames.TagIncollection) .OrderBy(x => { var photoDocId = x.Element(ONames.TagCollectionitem).Attribute(ONames.rdfresource).Value; var path = cass.GetXItemById(photoDocId) .Element("iisstore") .Attribute(ONames.AttOriginalname).Value; var last = Math.Max(path.LastIndexOf('/'), path.LastIndexOf('\\')); return(path.Substring(last + 1).ToSpecialCase()); }) .ToList(); int ii = 0; List <XElement> photoDocs = new List <XElement>(); foreach (XElement collmem in colmembers) { string scanDocId = cass.GenerateNewId(); var photoDocLink = collmem.Element(ONames.TagCollectionitem); var photoDocId = photoDocLink.Attribute(ONames.rdfresource).Value; var photoDoc = cass.GetXItemById(photoDocId); photoDocs.Add(photoDoc); XElement scanDoc = new XElement("scanned-page", new XAttribute(ONames.rdfabout, scanDocId), new XElement("page-number", ++ii), new XElement("scanned-document", new XAttribute(ONames.rdfresource, sdocId)), new XElement("photo-page", new XAttribute(ONames.rdfresource, photoDocId))); cass.db.Add(scanDoc); collmem.Remove(); makePhotoPreviews(cass, photoDoc.Element(ONames.TagIisstore), "z"); } XNamespace dp = "http://schemas.microsoft.com/deepzoom/2009"; var rootDir = cass.Dir + "/documents/deepzoom"; if (!Directory.Exists(rootDir)) { Directory.CreateDirectory(rootDir); } rootDir += "/"; // var xmlsToArch = new Dictionary<string, string>(); var document = new XElement(dp + "Collection", new XAttribute(XNamespace.Xmlns + "dp", dp), new XAttribute("xmlns", dp.NamespaceName), new XAttribute(dp + "MaxLevel", "7"), new XAttribute(dp + "TileSize", "256"), new XAttribute(dp + "Format", "jpg"), new XAttribute(dp + "NextItemId", photoDocs.Count()), new XAttribute(dp + "ServerFormat", "Default"), photoDocs.Select((photoDoc, i) => { var uriPhoto = photoDoc.Element("iisstore").Attribute("uri").Value; var url = uriPhoto.Substring(uriPhoto.Length - 9); // xmlsToArch.Add(rootDir + url+"_files", url+"_files"); url += ".xml"; // xmlsToArch.Add(rootDir + url, url.Substring(0, 4)); var Width = photoDoc.Element("iisstore").Attribute("width").Value; var Height = photoDoc.Element("iisstore").Attribute("height").Value; return(new XElement(dp + "I", new XAttribute(dp + "Id", i), new XAttribute(dp + "N", i), new XAttribute(dp + "Source", url), new XElement(dp + "Size", new XAttribute(dp + "Width", Width) , new XAttribute(dp + "Height", Height)))); })); var imageXml = rootDir + cass._folderNumber + cass._documentNumber; document.Save(imageXml + ".xml"); // xmlsToArch.Add(imageXml + ".xml", ""); // Archive.ToZip.ZipFiles(imageXml+".zip", xmlsToArch); //Archive.ToArchive.Create(imageXml, xmlsToArch); cass.IncrementDocumentNumber(); cass.Save(); }