Defining a new file type for GEODI

IGeodiContent is used to return properties and determine properties.


With an implementation that derives from ContentReaderBase, the desired extension can be read.

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

If a WebContentViewerBase implementation is performed for the added reader, GEODI will open the file with the prepared interface.

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


    }