123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- namespace etoy
- {
- /// <summary>
- /// KeyValue表特殊,单独处理一套
- /// </summary>
- class JsonKeyValueGenerater : IGenerater
- {
- private JsonWriter _writer;
- private Dictionary<string, RuleCenterField> _fieldmap;
- /// <summary>
- /// KeyValue 字段数量
- /// </summary>
- private const int KV_FIELDS_COUNT = 4;
- private string[] _kv_keys =
- {
- RuleCenterJsonStructureDefine.KVTable_Key,
- RuleCenterJsonStructureDefine.KVTable_Value,
- RuleCenterJsonStructureDefine.KVTable_Type,
- RuleCenterJsonStructureDefine.KVTable_Description
- };
- private string[] _kv_values = new string[KV_FIELDS_COUNT];
- private int GetKeyValueMaxLength(string key, string msg)
- {
- var msglen = RuleCenterUtil.GetJsonStringLength(msg);
- return Math.Max(_fieldmap[key].len, msglen);
- }
- /// <summary>
- /// 初始化KeyValue表字段
- /// </summary>
- private void InitKeyValueFieldsMap()
- {
- for (int i = 0, len = _kv_keys.Length; i < len; i++)
- {
- var key = _kv_keys[i];
- _fieldmap.Add(key, new RuleCenterField { name = key, type = RuleCenterTypeDefine.Varchar });
- }
- }
- private void KeyValueRowsJsonGenerater(KeyValueRow row)
- {
- if (!row.IsServerField)
- return;
- _kv_values[0] = row.Key;
- _kv_values[1] = row.Value.ToInlayString();
- _kv_values[2] = RuleCenterUtil.ToRuleCenterType(row.Type, false);
- _kv_values[3] = row.Description.ToInlayString();
- _writer.Bracket();
- {
- _writer.EnumeratorToJson(_kv_keys, _kv_keys.Length, (index, _) =>
- {
- var key = _kv_keys[index];
- var value = _kv_values[index];
- _fieldmap[key].len = GetKeyValueMaxLength(key, value);
- _writer.AppendKey(key).Append(value);
- });
- }
- _writer.EndBracket();
- }
- private void KeyValueTalbeRowsGenerate(KeyValueTable table)
- {
- _writer.AppendKey(RuleCenterJsonStructureDefine.Table_Rows).NewLine().ArrayBracket().Indent();
- {
- var rows = table.Rows;
- InitKeyValueFieldsMap();
- _writer.EnumeratorToJson(rows, rows.Length, (_, row) =>
- {
- _writer.NewLine();
- KeyValueRowsJsonGenerater(row);
- });
- }
- _writer.Dedent().NewLine().EndArrayBracket();
- }
- private void TableGenerate(KeyValueTable table)
- {
- _fieldmap.Clear();
- _writer.Bracket().Indent().NewLine();
- {
- _writer.AppendKey(RuleCenterJsonStructureDefine.Table_Name).Append(table.Name);
- _writer.Dot().NewLine();
- KeyValueTalbeRowsGenerate(table);
- _writer.Dot().NewLine();
- _writer.OnFields(_fieldmap);
- }
- _writer.Dedent().NewLine().EndBracket();
- }
- public void Generate(Context context)
- {
- _fieldmap = new Dictionary<string, RuleCenterField>();
- var kvtables = context.Blackboard.KeyValueTables;
- _writer.EnumeratorToJson(kvtables, kvtables.Count, (_, table) =>
- {
- _writer.NewLine();
- TableGenerate(table);
- });
- }
- public JsonKeyValueGenerater(JsonWriter writer)
- {
- this._writer = writer;
- }
- }
- }
|