Exemple #1
0
        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");
        }
Exemple #2
0
        /// <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));
            }
        }
Exemple #3
0
 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;
         }
     }
 }
Exemple #4
0
        //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);
        }
Exemple #5
0
 /// <summary>
 /// Конструктор для основного документа кассеты
 /// </summary>
 /// <param name="cassette"></param>
 public RDFDocumentInfo(Cassette cassette) : this(cassette, true)
 {
 }
Exemple #6
0
        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();
        }