GEODI için yeni dosya tipi tanımlama

Bir içeriğe dönüş yapmak, özelliklerini belirlemek için IGeodiContent kullanılır.  


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

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[] { "filecontent:.myfileextension" }
            }
        }

        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 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)

        }



        public override string GetIconName(string ContentTypeKey)
        {
			//GUI/Icons klasöründe olan bir yol dönülmelidir.
			return "Content/file.myfileextension";
        }
    }

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

Viewer örneği
 class MyViewer : WebContentViewerBase 
    {


        public override string[] ContentTypeKeys
        {
            get
            {
                return new string[] { "filecontent:.myfileextension" };
            }
        }

        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 string MyViewerApiMethod(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();

				return "...";
        }


    }