Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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.

...

languagec#
titleGeodiContent örneği

...

  


ContentReaderBase'den türeyecek bir gerçekleme ile istenilen uzantının okunması sağlanabilir.


Code Block
languagec#
titleReader ö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[] { "MyCustomContentfilecontent:.pdfmyfileextension" }
            }
        }

        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("Örnek Metin");
 
            //yield new StringContentSplitter(ReadPage1(this.CurrentContent.GetStream()));
            //yield new StringContentSplitter(ReadPage1(this.CurrentContent.CreateOrGetLocalFileSystemPath()));//CreateOrGetLocalFileSystemPath metodu lokal dosya isteyen apiler için extension zip/email/web gibi kaynaklardan veriyi indirip fiziksel dosya yolu getirir.


			//Tarih, Geometri, İsim, KM  gibi tipi 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(//GUI/Icons klasöründe olan bir yol dönülmelidir.
			return "Content/file", ContentTypeKey.TryGetGeodiContentFileExtension()).myfileextension";
        }
    }


Eklenen reader için bir WebContentViewerBase  gerçeklemesi yapılırsa GEODI dosyayı hazırlanan arayüz ile açacaktır.


Code Block
languagec#
titleViewer örneği
 class MyViewer : WebContentViewerBase 
    {


        public override string[] ContentTypeKeys
        {
            get
            {
                return new string[] { "MyCustomContentfilecontent:.pdfmyfileextension" };
            }
        }

        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;
        }

		//Viewer üzerinden erişilebilir metodlar yazılabilir.
        [WebMethod]
        public voidstring MyDownloadWebMethodMyViewerApiMethod(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)				return "...";
        }


    }