using System;
using System.Collections.Generic;
using System.Windows.Forms;
using FastReport.Export;
using FastReport.Utils;
namespace FastReport.Cloud.StorageClient.S3
{
///
/// Represents form of SkyDrive storage client.
///
public partial class S3ClientForm : CloudStorageClientForm
{
#region Fields
private S3StorageClient client;
private List exports;
private Report report;
#endregion // Fields
#region Properties
public S3StorageClient Client
{
get { return client; }
}
#endregion // Properties
#region Constructors
///
/// Initializes a new instance of the class.
///
/// The report template.
public S3ClientForm(string accessKeyId, string secretAccessKey, string region, string host, Report report) : base(report)
{
client = new S3StorageClient();
client.InitSigner(accessKeyId, secretAccessKey, region);
client.Host = host;
this.report = report;
InitializeComponent();
Localize();
Init();
UIUtils.CheckRTL(this);
UpdateDpiDependencies();
}
#endregion // Constructors
#region Private Methods
private void Init()
{
exports = new List();
List list = new List();
RegisteredObjects.Exports.EnumItems(list);
cbFileType.Items.Add(Res.Get("Preview,SaveNative"));
exports.Add(null);
foreach (ObjectInfo info in list)
{
if (info.Object != null)
{
cbFileType.Items.Add(Res.TryGet(info.Text));
exports.Add(Activator.CreateInstance(info.Object) as ExportBase);
}
}
cbFileType.SelectedIndex = 0;
tbFileName.Text = report.GetReportName;
XmlItem xi = Config.Root.FindItem("S3").FindItem("StorageSettings");
tbServer.Text = xi.GetProp("Server");
tbPort.Text = xi.GetProp("Port");
tbUsername.Text = xi.GetProp("Username");
tbPassword.Text = xi.GetProp("Password");
}
protected override void OnShown(EventArgs e)
{
try
{
cbBucket.Items.AddRange(client.GetListBuckets().ToArray());
if (cbBucket.Items.Count == 0)
{
MessageBox.Show(Res.Get("Cloud,S3,MissingBuckets"), Res.Get("Messages,Error"), MessageBoxButtons.OK, MessageBoxIcon.Error);
Close();
}
cbBucket.SelectedIndex = 0;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Res.Get("Messages,Error"), MessageBoxButtons.OK, MessageBoxIcon.Error);
Close();
}
base.OnShown(e);
}
private bool IsNumeric(string str)
{
if (!String.IsNullOrEmpty(str))
{
try
{
Convert.ToInt32(str);
}
catch
{
return false;
}
}
return true;
}
private CloudProxySettings GetProxySettings()
{
CloudProxySettings proxySettings = null;
if (!String.IsNullOrEmpty(tbServer.Text))
{
int port = 0;
if (!IsNumeric(tbPort.Text))
{
FRMessageBox.Error(Res.Get("Cloud,CloudStorage,PortError"));
}
else
{
port = Convert.ToInt32(tbPort.Text);
}
proxySettings = new CloudProxySettings(ProxyType.Http, tbServer.Text, port, tbUsername.Text, tbPassword.Text);
}
return proxySettings;
}
private bool Done()
{
if (!String.IsNullOrEmpty(tbPort.Text))
{
if (!IsNumeric(tbPort.Text))
{
FRMessageBox.Error(Res.Get("Cloud,CloudStorage,PortError"));
tbPort.Focus();
return false;
}
}
XmlItem xi = Config.Root.FindItem("S3").FindItem("StorageSettings");
xi.SetProp("Server", tbServer.Text);
xi.SetProp("Port", tbPort.Text);
xi.SetProp("Username", tbUsername.Text);
xi.SetProp("Password", tbPassword.Text);
return true;
}
#endregion // Private Methods
#region Public Methods
///
public override void Localize()
{
base.Localize();
MyRes res = new MyRes("Cloud,CloudStorage");
pgFile.Text = res.Get("File");
pgProxy.Text = res.Get("Proxy");
labelFileType.Text = res.Get("FileType");
buttonSettings.Text = res.Get("Settings");
labelServer.Text = res.Get("Server");
labelUsername.Text = res.Get("Username");
labelPassword.Text = res.Get("Password");
this.Text = Res.Get("Cloud,S3");
lbBucket.Text = Res.Get("Cloud,S3,Bucket");
lbFileName.Text = Res.Get("Cloud,S3,FileName");
}
#endregion // Public Methods
#region Events Handlers
private void cbFileType_SelectedIndexChanged(object sender, EventArgs e)
{
buttonSettings.Enabled = cbFileType.SelectedIndex != 0;
}
private void buttonSettings_Click(object sender, EventArgs e)
{
ExportBase export = exports[cbFileType.SelectedIndex];
export.SetReport(report);
export.ShowDialog();
}
private void S3ClientForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogResult == DialogResult.OK)
{
if (!Done())
{
e.Cancel = true;
}
}
}
private void btnOk_Click(object sender, EventArgs e)
{
if (cbFileType.SelectedIndex == 0)
client.FileName = tbFileName.Text + ".fpx";
else
client.FileName = tbFileName.Text + exports[cbFileType.SelectedIndex].GetFileExtension();
client.CurrentBucket = cbBucket.SelectedItem.ToString();
Cursor = Cursors.WaitCursor;
client.ProxySettings = GetProxySettings();
try
{
client.SaveReport(report, exports[cbFileType.SelectedIndex]);
}
catch (CloudStorageException ex)
{
MessageBox.Show(ex.Message, Res.Get("Messages,Error"), MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
DialogResult = DialogResult.OK;
Close();
}
#endregion // Events Handlers
}
}