Files
raven/server/AyaNova/DataList/AyaDataList.cs
2020-02-26 18:46:32 +00:00

136 lines
4.6 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Text;
using AyaNova.Biz;
using Newtonsoft.Json.Linq;
namespace AyaNova.DataList
{
/// <summary>
/// DataList object base class
/// </summary>
internal abstract class AyaDataList : IAyaDataList
{
public AyaDataList()
{
}
public string SQLFrom { get; set; }
public List<AyaDataListFieldDefinition> 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<string> 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<string> ret = new List<string>();
for (int i = 0; i < listViewArray.Count; i++)
{
var cm = listViewArray[i];
ret.Add(cm["fld"].Value<string>());
}
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<string[]>();
// var miniFields = ((JArray)jtemplate["mini"]).ToObject<string[]>();
// 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