Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

Bir içeriğe dönüş yapmak, özelliklerini belirlemek için IGeodiContent(GeodiContentBase) kullanılır. GeodiContent enumaratorune erişimi olan bir gerçeklemedir. 

İçeriğinde içerik boyutu, tarihi, Stream getirme yöntemi ve MimeType benzeri ContentType bilgisi bulunur.

IContentReader(ContentReaderBase) içeriğin indexlenebilmesi için okunmasını sağlar. String ve obje içerikleri Splitter'lar ile döndürür. Gerçekleme hangi ContentType bilgilerini okuyabildiğini belirtir.

IWebContentViewer (WebContentViewerBase) içeriğin görüntülenmesini sağlar. Gerçekleme hangi ContentType bilgilerini gösterebileceğini belirtir. Gerçeklemeye bağlı html not alma, kelime arama gibi özelliklere sahip olabileceği gibi başka bir platform/uygulamaya da yönlenebilir.


GeodiContent örneği
 public class MyCustomContent: GeodiContentBase
    {
		//Indexlenen nesnenin yeniden oluşturulabilmesi için boş cunsturcter içermelidir.
        public MyCustomContent()
            : base()
        {

        }

        public MyCustomContent(string MyFile)
            : this()
        {
            this.MyFile = MyFile;
            DisplayName = Path.GetFileName(MyFile);
            ContentDate = File.GetLastWriteTime(MyFile);
        }



        [PathValueFormatter]
        public string MyFile {get;set;}

		//bazı apiler dosya veya seekable stream istemekte, Stream yerine local dosya ile daha hızlı çalışabilmektedir. Bu property reader için dosyayı almadan önce elde edilebilecek bir ön bilgidir.
        public override bool IsLocalContent
        {
            get
            {
                return true;
            }
        }

        public override string ContentTypeKey
        {
            get
            {
				//MyFile değeri ile dinamik dönüş yapılabilir.
				return "MyCustomContent:.pdf"; 
				//Halihzırda  FileContent:.pdf için bir reader bulunmaktadır.
                //return "FileContent:.pdf"; 
            }
        }

       

        public override string UNCPath
        {
            get
            {
				//PathToRelative %AppData%, %MyDocuments% gibi konumları ortaklaştıran Dece.Extentsions methodlardan biridir. Kullanılması zorunlu değildir.
				//UNCPath dokümanın unique id bilgisidir, Başka bir içerikle karışmaması için benzersiz olmalı, 
				// bir içeriğin versiyonunun doğru ayarlanabilmesi için aynı içerik için her zaman aynı UNCPath dönülmelidir.
                return MyFile.PathToRelative().ToLowerInvariant();
            }
        }
		//Bu metod GEODI 4.0 ile gereksiz hale gelmeye başlamıştır. null dönülebilir. ileri versiyonlarda Obsolete olarak ayarlanıp kullanımdan çıkarılacaktır.
        public override PathNormalizer CreatePath()
        {
            return new PathNormalizer(this.MyFile);
        }



        public override Stream GetStream()
        {
			//Bir Stream dönemeyen, kendi reader'ına sahip içerikler için null dönülebilir.
			//pdf hazır bir GEODI Reader'a yönlenilecekse Stream döndürülmelidir.
            return File.Open(this.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
        }

    }
Reader örneği
  public class MyContentReader : ContentReaderBase
    {
        public MyContentReader()
            : base()
        {
            this.DisplayName = "MyContentReader";
            this.Category = Geodi.CoreV1.Defines.CategoryInfoDefines.Other;
        }

        MyContentReader(IGeodiContent Source)
            : base(Source)
        {
            this.DisplayName = "MyContentReader";
            this.Category = Geodi.CoreV1.Defines.CategoryInfoDefines.Other;

        }


        public override string[] ContentTypeKeys
        {
            get
            {
                return new string[] {"MyCustomContent:.pdf"}
            }
        }

        public override IContentReader Create(IGeodiContent Source)
        {
            return new MyContentReader(Source);
        }


        public override IEnumerable<IContentSplitter> GetSectionSplitters(GeodiEnumaratorScopeArgs Args)
        {
 
 
			//StringContentSplitter gerçeklemesi StringContentSplitter array alarak birleştirilmiş alt sayfaları işleyebilir. 
			//Her Splitter için Section bilgiside verilerek Custom Viewer için ihtiyaç duyulacak sayfa, bbox ... gibi tekrar erişim bilgileri index'e eklenebilir.
 
			yield new StringContentSplitter("Örnek Tanım içeriği");
 
            //yield new StringContentSplitter(ReadPage1(this.CurrentContent.GetStream()));
            //yield new StringContentSplitter(ReadPage1(this.CurrentContent.CreateOrGetLocalFileSystemPath()));//lokal dosya isteyen apiler için extension


			//Tarih, Geometri, İsim, KM  gibi bilinen değerler HeaderArraySplitter object array IContentSplitter gerçeklemesi ile döndürülebilir.
			List<object> HeaderItems = new List<object>();
					//DynamicValue<IGeometry> geom = new DynamicValue<IGeometry>(geoApiGeom);
                    //geom.Attributes["ItemType"] = "Geometry";
                    //geom.Attributes["DisplayName"] = MyLabel;
					//HeaderItems.Add(geom);
			HeaderItems.Add(DateTime.Now);
			yield new HeaderArraySplitter(HeaderItems)

        }

        private StringContentSplitter GetString(string str)
        {
            ////if (this.CurrentContent.ContentTypeKey == "filecontent:.html" || this.CurrentContent.ContentTypeKey == "filecontent:.htm")
            ////    str = Dece.Parsing.HTML.HTMLPage.ClearHtml(str); //Html için başka splitter var.
            return new StringContentSplitter(str);
        }


        public override string GetIconName(string ContentTypeKey)
        {
			return "Content/file.pdf";
            //return string.Concat("Content/file", ContentTypeKey.TryGetGeodiContentFileExtension());
        }
    }
Viewer örneği
 class MyViewer : WebContentViewerBase 
    {


        public override string[] ContentTypeKeys
        {
            get
            {
                return new string[] { "MyCustomContent:.pdf" };
            }
        }

        public override bool StartView(CoreV1.GeodiEntry Entry, CoreV1.GeodiWorkspace Workspace, Dece.Net.HttpClient Client)
        {
			//Tüm kullanıcı etkileişmleri bu html içeriğindedir. GUI/ContentViewer üzerinde açık kod örnekleri mevcuttur.
            Client.Response.GUI.WriteHtmlPage("GUI/ContentViewer/MyViewer.html");
            return true;
        }

        [WebMethod]
        public void MyDownloadWebMethod(HttpClient context, string wsName, int content_id)
        {
            Geodi.CoreV1.GeodiWorkspace ws = Geodi.CoreV1.GeodiWorkspacesManager.Default.TryGetWorkspace(wsName, true);

            IQueryableStroageManager qStorageManager = ws.StorageManagers.GetFirstQueryable();
            IGeodiContent content = qStorageManager.GetContent(content_id);

            if (content.Enumarator!=null &&
                HttpClient.AuthorizationRequired &&
                !content.Enumarator.Permissions.HasPermission(context.GetCurrentLoginInfo(), "GEODI.ENUMERATOR_DOWNLOAD"))
                context.ThrowUnauthorizedAccess(true);

				//context.Response.ContentType = "image/jpeg";
                //context.Response.Headers["Content-Length"] = data.Length.ToString();
                //context.Response.FlushHeaders();
				//content.GetStream().CopyTo(context.Response.OutputStream);
                ////context.Response.OutputStream.Write(data, 0, data.Length);
	            //context.Response.OutputStream.Flush();

           	content.WriteToResponse(context);
        }


    }


  • No labels