/// <summary>
        /// SetNextBoot - sets the next boot device
        /// </summary>
        /// <returns></returns>
        public Contracts.BootResponse SetNextBoot(int bladeId, Contracts.BladeBootType bootType, bool uefi, bool persistent, int bootInstance = 0)
        {
            BootResponse response = new BootResponse();
            Tracer.WriteUserLog("Invoked SetNextBoot({0})", bladeId);
            Tracer.WriteInfo("Received SetNextBoot({0})", bladeId);

            response.bladeNumber = bladeId;
            response.completionCode = Contracts.CompletionCode.Unknown;
            response.statusDescription = String.Empty;

            Contracts.ChassisResponse varResponse = ValidateRequest("SetNextBoot", bladeId);
            if (varResponse.completionCode != Contracts.CompletionCode.Success)
            {
                response.completionCode = varResponse.completionCode;
                response.statusDescription = varResponse.statusDescription;
                return response;
            }

            // SetNextBoot should not be set to unknown. The unknown value is used only by getnextboot API
            if (bootType == Contracts.BladeBootType.Unknown)
            {
                response.completionCode = Contracts.CompletionCode.ParameterOutOfRange;
                response.statusDescription = Contracts.CompletionCode.ParameterOutOfRange.ToString() + " Cannot be set to Unknown.";
                return response;
            }

            // Issue IPMI Command after checking
            if (Enum.IsDefined(typeof(Ipmi.BootType), ChassisManagerUtil.GetIpmiBootType(bootType)))
            {
                Ipmi.NextBoot nextBoot = WcsBladeFacade.SetNextBoot((byte)bladeId, ChassisManagerUtil.GetIpmiBootType(bootType), uefi, persistent, (byte)bootInstance);

                if (nextBoot.CompletionCode == (byte)Contracts.CompletionCode.Success)
                {
                    response.completionCode = Contracts.CompletionCode.Success;
                    response.nextBoot = bootType;
                }
                else
                {
                    Tracer.WriteError("SetNextBoot failed with Completion Code {0:X}", nextBoot.CompletionCode);
                }

                response.completionCode =
                            ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)nextBoot.CompletionCode);
            }
            else
            {
                response.completionCode = Contracts.CompletionCode.Failure;
                Tracer.WriteError("Boot Type {0} not defined in Boot Order Type", bootType);
            }

            response.statusDescription = response.completionCode.ToString();
            return response;
        }
        /// <summary>
        /// GetNextBoot - gets the next boot device
        /// </summary>
        /// <returns></returns>
        public Contracts.BootResponse GetNextBoot(int bladeId)
        {
            BootResponse response = new BootResponse();
            Tracer.WriteUserLog("Invoked GetNextBoot({0})", bladeId);
            Tracer.WriteInfo("Received GetNextBoot({0})", bladeId);

            response.bladeNumber = bladeId;
            response.completionCode = Contracts.CompletionCode.Unknown;
            response.statusDescription = String.Empty;

            Contracts.ChassisResponse varResponse = ValidateRequest("GetNextBoot", bladeId);
            if (varResponse.completionCode != Contracts.CompletionCode.Success)
            {
                response.completionCode = varResponse.completionCode;
                response.statusDescription = varResponse.statusDescription;
                return response;
            }

            // Issue IPMI command
            Ipmi.NextBoot nextBoot = WcsBladeFacade.GetNextBoot((byte)bladeId);

            if (nextBoot.CompletionCode != (byte)Contracts.CompletionCode.Success)
            {
                response.completionCode = Contracts.CompletionCode.Failure;
                Tracer.WriteError("GetNextBoot failed with completion code: {0:X}", nextBoot.CompletionCode);
            }
            else
            {
                response.completionCode = Contracts.CompletionCode.Success;
                response.nextBoot = ChassisManagerUtil.GetContractsBootType(nextBoot.BootDevice);
            }

            response.completionCode =
                            ChassisManagerUtil.GetContractsCompletionCodeMapping((byte)nextBoot.CompletionCode);
            response.statusDescription = response.completionCode.ToString();
            return response;
        }