xenadmin/XenAdmin/SettingsPanels/LogDestinationEditPage.cs

198 lines
6.7 KiB
C#
Raw Normal View History

/* Copyright (c) Citrix Systems, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms,
* with or without modification, are permitted provided
* that the following conditions are met:
*
* * Redistributions of source code must retain the above
* copyright notice, this list of conditions and the
* following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using XenAdmin;
using XenAdmin.Network;
using XenAdmin.Core;
using XenAPI;
using XenAdmin.Dialogs;
using XenAdmin.Actions;
namespace XenAdmin.SettingsPanels
{
public partial class LogDestinationEditPage : UserControl, IEditPage
{
private Host TheHost;
private bool _ValidToSave = true;
private string _OrigLocation = null;
private Regex regex = new Regex(@"^[a-zA-Z0-9]([-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([-a-zA-Z0-9]{0,61}[a-zA-Z0-9])?)*$");
private readonly ToolTip InvalidParamToolTip;
public bool ValidToSave
{
get { return _ValidToSave; }
}
public LogDestinationEditPage()
{
InitializeComponent();
Text = Messages.LOG_DESTINATION;
InvalidParamToolTip = new ToolTip();
InvalidParamToolTip.IsBalloon = true;
InvalidParamToolTip.ToolTipIcon = ToolTipIcon.Warning;
InvalidParamToolTip.ToolTipTitle = Messages.INVALID_PARAMETER;
}
public void SetXenObjects(IXenObject orig, IXenObject clone)
{
TheHost = clone as Host;
Repopulate();
}
public Image Image
{
get { return Properties.Resources.log_destination_16; }
}
private void Repopulate()
{
if (TheHost != null)
{
string location = TheHost.GetSysLogDestination();
if (location == null)
{
LocalRadioButton.Checked = true;
ServerTextBox.Text = "";
}
else
{
RemoteRadioButton.Checked = true;
ServerTextBox.Text = location;
}
_OrigLocation = location;
_ValidToSave = true;
}
ServerLabel.Enabled = RemoteRadioButton.Checked;
ServerTextBox.Enabled = RemoteRadioButton.Checked;
}
public bool HasChanged
{
get
{
// User changed remote location
if (RemoteRadioButton.Checked == true && _OrigLocation != ServerTextBox.Text)
{
return true;
}
// User switched from Server to Local
if (LocalRadioButton.Checked == true && _OrigLocation != null)
{
return true;
}
return false;
}
}
public AsyncAction SaveSettings()
{
if (TheHost != null)
{
if (RemoteRadioButton.Checked)
TheHost.SetSysLogDestination(ServerTextBox.Text);
else if (LocalRadioButton.Checked)
TheHost.SetSysLogDestination(null);
return new DelegatedAsyncAction(
TheHost.Connection,
Messages.ACTION_CHANGE_LOG_DESTINATION,
string.Format(Messages.ACTION_CHANGING_LOG_DESTINATION_FOR, TheHost),
null,
delegate(Session session) { Host.syslog_reconfigure(session, TheHost.opaque_ref); },
true,
"host.syslog_reconfigure"
);
}
else
return null;
}
/** Show local validation balloon tooltips */
public void ShowLocalValidationMessages()
{
if (RemoteRadioButton.Checked && (ServerTextBox.Text.Trim() == "" || !regex.IsMatch(ServerTextBox.Text)) && ServerTextBox.Text != _OrigLocation)
{
// Show invalid host message.
HelpersGUI.ShowBalloonMessage(ServerTextBox, Messages.GENERAL_EDIT_INVALID_HOSTNAME, InvalidParamToolTip);
}
}
/** Unregister listeners, dispose balloon tooltips, etc. */
public void Cleanup()
{
InvalidParamToolTip.Dispose();
}
private void RemoteRadioButton_CheckedChanged(object sender, EventArgs e)
{
ServerLabel.Enabled = RemoteRadioButton.Checked;
ServerTextBox.Enabled = RemoteRadioButton.Checked;
if (RemoteRadioButton.Checked)
{
_ValidToSave = ServerTextBox.Text.Trim() != "" || ServerTextBox.Text == _OrigLocation;
}
else
{
_ValidToSave = true;
}
}
private void ServerTextBox_TextChanged(object sender, EventArgs e)
{
_ValidToSave = ServerTextBox.Text.Trim() != "" && ServerTextBox.Text != _OrigLocation && regex.IsMatch(ServerTextBox.Text) && regex.IsMatch(ServerTextBox.Text);
}
public String SubText
{
get
{
return LocalRadioButton.Checked ? Messages.LOCAL : String.Format(Messages.REMOTE, ServerTextBox.Text);
}
}
}
}