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 } }