xenadmin/XenModel/Actions/VIF/CreateVIFAction.cs
Konstantina Chremmou 4ce9878b45 Refactored the VIFDialog to fix various problems: (#2398)
* Refactored the VIFDialog to fix various problems:
- Launch the dialog in using blocks.
- Event GotFocus is not meant to be handled directly in the code.
- Populate the dialog in the OnLoad override instead of the constructor
  as this causes problems at design time.
- Popping up an error message for duplicate MAC on combobox item
  selection or textbox text change is not optimal UX. Perform this
  check once when closing the form. Additionally the parent form of the
  pop up should be the dialog, not the main window.
- The validation messages are not obvious to the user because they are
  hidden in the tooltip of a disabled button. Show them inline instead.
- There is no need to create commands for VIF creation/change; use
  the relevant actions instead.

Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>

* Corrections as per code review plus some more code tidy and refactoring.

- Added option to suppress Create/DeleteVIFActions
- Use property RebootRequired to indicate hot-plugging is unavailable
  (assigning various objects of different types to the Result of the action
  during its run may cause confusion).

Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
2019-04-25 08:23:09 +01:00

79 lines
2.9 KiB
C#

/* 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 XenAPI;
namespace XenAdmin.Actions
{
public class CreateVIFAction : AsyncAction
{
private VIF _vifDescriptor;
public CreateVIFAction(VM vm, VIF vifDescriptor, bool suppressHistory = false)
: base(vm.Connection, string.Format(Messages.ACTION_VIF_CREATING_TITLE, vm.Name()), suppressHistory)
{
_vifDescriptor = vifDescriptor;
VM = vm;
foreach (var method in XmlRpcMethods)
ApiMethodsToRoleCheck.Add(method);
}
/// <summary>
/// A List of XML RPC methods used by this class
/// </summary>
public static readonly string[] XmlRpcMethods = {"Async_VIF.create", "VIF.plug"};
public bool RebootRequired { get; private set; }
protected override void Run()
{
Description = Messages.ACTION_VIF_CREATING;
RelatedTask = VIF.async_create(Session, _vifDescriptor);
PollToCompletion();
if (VM.power_state == vm_power_state.Running)
{
string newVifRef = Result; //the result from async_create
if (VIF.get_allowed_operations(Session, newVifRef).Contains(vif_operations.plug))
VIF.plug(Session, newVifRef); // try hot-plugging
else
RebootRequired = true;
}
Description = Messages.ACTION_VIF_CREATED;
}
}
}