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