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