using FastReport.Data.JsonConnection;
using FastReport.Forms;
using FastReport.Utils;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
namespace FastReport.Data.ConnectionEditors
{
///
///
///
public partial class JsonDataSourceConnectionEditor : ConnectionEditorBase
{
#region Internal Properties
internal string JsonSchema
{
get
{
return tbJsonSchema.Text;
}
set
{
tbJsonSchema.Text = value;
}
}
private string lastJson;
internal bool IsJsonChanged
{
get
{
return lastJson != tbJson.Text;
}
set
{
if (value)
{
lastJson = tbJson.Text;
}
else
{
lastJson = null;
}
}
}
#endregion Internal Properties
#region Public Constructors
///
/// Initialize a new instance
///
public JsonDataSourceConnectionEditor()
{
InitializeComponent();
Localize();
}
#endregion Public Constructors
#region Protected Methods
///
///
///
///
protected override string GetConnectionString()
{
JsonDataSourceConnectionStringBuilder builder = new JsonDataSourceConnectionStringBuilder();
builder.Json = tbJson.Text;
builder.JsonSchema = tbJsonSchema.Text;
//foreach (DataGridViewRow row in dgvHeaders.Rows)
//{
// if (row.Cells[0].Value != null && row.Cells[1].Value != null)
// {
// var headerName = row.Cells[0].Value.ToString();
// var headerData = row.Cells[1].Value.ToString();
// builder.Headers.Add(headerName, headerData);
// }
//}
Dictionary headers = new Dictionary();
for (int i = 0; i < dgvHeaders.Rows.Count; i++)
{
DataGridViewRow row = dgvHeaders.Rows[i];
if (row?.Cells[0].Value != null && row?.Cells[1].Value != null)
{
var headerName = row.Cells[0].Value.ToString();
var headerData = row.Cells[1].Value.ToString();
headers.Add(headerName, headerData);
}
}
builder.Headers = headers;
if (cbEnconding.SelectedItem is MyEncodingInfo)
{
builder.Encoding = (cbEnconding.SelectedItem as MyEncodingInfo).Name;
}
else
{
builder.Encoding = Encoding.UTF8.WebName;
}
builder.SimpleStructure = cbSimpleStructure.Checked;
return builder.ToString();
}
///
///
///
///
protected override void SetConnectionString(string value)
{
JsonDataSourceConnectionStringBuilder builder = new JsonDataSourceConnectionStringBuilder(value);
tbJson.Text = builder.Json;
tbJsonSchema.Text = builder.JsonSchema;
string encoding = builder.Encoding;
foreach (KeyValuePair header in builder.Headers)
{
dgvHeaders.Rows.Add(header.Key, header.Value);
}
int i = 0;
foreach (object item in cbEnconding.Items)
{
if (item is MyEncodingInfo)
if ((item as MyEncodingInfo).Name == encoding)
{
cbEnconding.SelectedIndex = i;
break;
}
i++;
}
if (i >= cbEnconding.Items.Count)
{
cbEnconding.SelectedIndex = 0;
}
lastJson = tbJson.Text;
cbSimpleStructure.Checked = builder.SimpleStructure;
}
#endregion Protected Methods
#region Private Methods
private void BtnJson_Click(object sender, EventArgs e)
{
JsonEditorForm form = new JsonEditorForm();
form.JsonText = tbJson.Text;
if (form.ShowDialog() == DialogResult.OK)
{
tbJson.Text = form.JsonText;
}
}
private void BtnJsonSchema_Click(object sender, EventArgs e)
{
JsonEditorForm form = new JsonEditorForm();
form.JsonText = tbJsonSchema.Text;
if (form.ShowDialog() == DialogResult.OK)
{
tbJsonSchema.Text = form.JsonText;
}
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (cbEnconding.SelectedIndex > 0 && !(cbEnconding.SelectedItem is MyEncodingInfo))
{
cbEnconding.SelectedIndex = 0;
}
}
private void Localize()
{
gbConnection.Text = Res.Get("ConnectionEditors,Json,Settings");
cbEnconding.Items.Clear();
cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF8));
cbEnconding.SelectedIndex = 0;
cbEnconding.Items.Add(new MyEncodingInfo(Encoding.ASCII));
cbEnconding.Items.Add(new MyEncodingInfo(Encoding.Unicode));
cbEnconding.Items.Add(new MyEncodingInfo(Encoding.BigEndianUnicode));
cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF7));
cbEnconding.Items.Add(new MyEncodingInfo(Encoding.UTF32));
cbEnconding.Items.Add("—————");
foreach (MyEncodingInfo info in MyEncodingInfo.GetEncodings())
{
cbEnconding.Items.Add(info);
}
lbEncoding.Text = Res.Get("ConnectionEditors,Json,Encoding");
lbJson.Text = Res.Get("ConnectionEditors,Json,Input");
lbJsonSchema.Text = Res.Get("ConnectionEditors,Json,Schema");
lbHeaders.Text = Res.Get("ConnectionEditors,Json,RequestHeaders");
dgvHeaders.Columns[0].HeaderText = Res.Get("ConnectionEditors,Json,HeaderKey");
dgvHeaders.Columns[1].HeaderText = Res.Get("ConnectionEditors,Json,HeaderVal");
cbSimpleStructure.Text = Res.Get("ConnectionEditors,Json,SimpleStructure");
}
#endregion Private Methods
}
}