using System.Collections.Generic; using System.Linq; using System.Text; using AyaNova.Biz; using Newtonsoft.Json.Linq; namespace AyaNova.DataList { /// /// DataList object base class /// internal abstract class AyaDataList : IAyaDataList { public AyaDataList() { } public string SQLFrom { get; set; } public List FieldDefinitions { get; set; } public AuthorizationRoles AllowedRoles { get; set; } public AyaType DefaultListObjectType { get; set; } public string DefaultListView { get; set; } //return array of field keys in list view public List GetFieldListFromListView(JArray listViewArray) { // [{key:"COLUMN UNIQUE KEY ID",sort:"-" or "+",filter:{any:true/false,items:[{FILTER OBJECT SEE BELOW}]} }, {key:"second column unique key"},{...etc...}] List ret = new List(); for (int i = 0; i < listViewArray.Count; i++) { var cm = listViewArray[i]; ret.Add(cm["fld"].Value()); } return ret; } public Newtonsoft.Json.Linq.JArray GenerateListColumnsJSONFromListView(JArray listViewArray) { var ListViewFieldKeys = GetFieldListFromListView(listViewArray); //Generate JSON fragment to return with column definitions StringBuilder sb = new StringBuilder(); sb.Append("["); foreach (string s in ListViewFieldKeys) { AyaDataListFieldDefinition o = FieldDefinitions.FirstOrDefault(x => x.FieldKey == s); #if (DEBUG) //Developers little helper if (o == null) { throw new System.ArgumentNullException($"DEV ERROR in AyaDataList::GenerateListColumnsJSONFromListView - field {s} specified in ListView was NOT found in ObjectFields list"); } #endif if (o != null) {//Here is where we can vet the field name, if it doesn't exist. For production we'll just ignore those ones sb.Append(","); sb.Append("{"); //Build required part of column definition sb.Append($"\"cm\":\"{o.LtKey}\",\"dt\":{(int)o.UiFieldDataType}"); //Has a AyObjectType? (linkable / openable) if (o.AyaObjectType != 0) sb.Append($",\"ay\":{(int)o.AyaObjectType}"); //Row ID column? if(o.IsRowId){ sb.Append($",\"rid\":1"); } //Has a Enumtype? if (!string.IsNullOrEmpty(o.EnumType)) sb.Append($",\"et\":\"{AyaNova.Util.StringUtil.TrimTypeName(o.EnumType)}\""); sb.Append("}"); } } sb.Append("]"); return JArray.Parse(sb.ToString()); } // //make sure the template parses and all the fields specified are really existant // //this is more for dev errors or api users becuase the client shouldn't generate bad templates // public bool ValidateTemplate(string template) // { // try // { // //parse the template // var jtemplate = JObject.Parse(template); // var fullFields = ((JArray)jtemplate["full"]).ToObject(); // var miniFields = ((JArray)jtemplate["mini"]).ToObject(); // foreach (string s in fullFields) // { // AyaDataListFieldDefinition o = FieldDefinitions.FirstOrDefault(x => x.FieldKey == s); // if (o == null) // { // return false; // } // } // foreach (string s in miniFields) // { // AyaDataListFieldDefinition o = FieldDefinitions.FirstOrDefault(x => x.FieldKey == s); // if (o == null) // { // return false; // } // } // } // catch // { // return false; // } // return true; // } }//eoc }//eons