Exemple #1
0
        /// <summary>
        /// Gets the delimited poarameter if it needs delimitation and is not delimited.
        /// </summary>
        /// <param name="parameterValue">Value needing delimitation.</param>
        /// <param name="openDelimiter">Open delimitation.</param>
        /// <param name="closeDelimiter">Close delimitation.</param>
        /// <returns>The delimited poarameter if it needs delimitation and is not delimited.</returns>
        private static string GetDelimitedParameter(string parameterValue, string openDelimiter, string closeDelimiter)
        {
            string parameterValueTrimmed = parameterValue.Trim();

            if (parameterValueTrimmed.Length == 0)
            {
                return(openDelimiter + parameterValue + closeDelimiter);
            }

            char delimitationChar = ParameterSetViewModel.ParameterNeedsDelimitation(parameterValueTrimmed, openDelimiter.Length == 1 && openDelimiter[0] == '{');

            switch (delimitationChar)
            {
            case '1':
                return(openDelimiter + parameterValue + closeDelimiter);

            case '\'':
                return('\'' + parameterValue + '\'');

            case '\"':
                return('\"' + parameterValue + '\"');

            default:
                return(parameterValueTrimmed);
            }
        }
        /// <summary>
        /// Gets the delimited poarameter if it needs delimitation and is not delimited
        /// </summary>
        /// <param name="parameterValue">value needing delimitation</param>
        /// <param name="openDelimiter">open delimitation</param>
        /// <param name="closeDelimiter">close delimitation</param>
        /// <returns>the delimited poarameter if it needs delimitation and is not delimited</returns>
        private static string GetDelimitedParameter(string parameterValue, string openDelimiter, string closeDelimiter)
        {
            string parameterValueTrimmed = parameterValue.Trim();

            if (parameterValueTrimmed.Length == 0)
            {
                return(openDelimiter + parameterValue + closeDelimiter);
            }

            char delimitationChar = ParameterSetViewModel.ParameterNeedsDelimitation(parameterValueTrimmed, openDelimiter.Length == 1 && openDelimiter[0] == '{');

            switch (delimitationChar)
            {
            case '1':
                return(openDelimiter + parameterValue + closeDelimiter);

            case '\'':
                return('\'' + parameterValue + '\'');

            case '\"':
                return('\"' + parameterValue + '\"');

            default:
                Diagnostics.Assert(delimitationChar == '0', "all other possible return values are in the cases above");
                return(parameterValueTrimmed);
            }
        }
        /// <summary>
        /// Creates script according parameters of this parameterset
        /// </summary>
        /// <returns>Return script of this parameterset parameters</returns>
        public string GetScript()
        {
            if (this.Parameters == null || this.Parameters.Count == 0)
            {
                return(string.Empty);
            }

            StringBuilder builder = new StringBuilder();

            foreach (ParameterViewModel parameter in this.Parameters)
            {
                if (parameter.Value == null)
                {
                    continue;
                }

                if (parameter.Parameter.ParameterType.IsSwitch)
                {
                    if (((bool?)parameter.Value) == true)
                    {
                        builder.AppendFormat("-{0} ", parameter.Name);
                    }

                    continue;
                }

                string parameterValueString = parameter.Value.ToString();

                if (parameterValueString.Length == 0)
                {
                    continue;
                }

                ShowCommandParameterType parameterType = parameter.Parameter.ParameterType;

                if (parameterType.IsEnum || parameterType.IsString || (parameterType.IsArray && parameterType.ElementType.IsString))
                {
                    parameterValueString = ParameterSetViewModel.GetDelimitedParameter(parameterValueString, "\"", "\"");
                }
                else if (parameterType.IsScriptBlock)
                {
                    parameterValueString = ParameterSetViewModel.GetDelimitedParameter(parameterValueString, "{", "}");
                }
                else
                {
                    parameterValueString = ParameterSetViewModel.GetDelimitedParameter(parameterValueString, "(", ")");
                }

                builder.AppendFormat("-{0} {1} ", parameter.Name, parameterValueString);
            }

            return(builder.ToString().Trim());
        }
        /// <summary>
        /// Compares source and target by being the default parameter set and then by name.
        /// </summary>
        /// <param name="source">Source paremeterset.</param>
        /// <param name="target">Target parameterset.</param>
        /// <returns>0 if they are the same, -1 if source is smaller, 1 if source is larger.</returns>
        private int Compare(ParameterSetViewModel source, ParameterSetViewModel target)
        {
            if (this.defaultParameterSetName != null)
            {
                if (source.Name.Equals(this.defaultParameterSetName) && target.Name.Equals(this.defaultParameterSetName))
                {
                    return(0);
                }

                if (source.Name.Equals(this.defaultParameterSetName, StringComparison.Ordinal))
                {
                    return(-1);
                }

                if (target.Name.Equals(this.defaultParameterSetName, StringComparison.Ordinal))
                {
                    return(1);
                }
            }

            return(string.CompareOrdinal(source.Name, target.Name));
        }
Exemple #5
0
        /// <summary>
        /// When user switch ParameterSet.It will trigger this event.
        /// This event method will renew generate all controls for current ParameterSet.
        /// </summary>
        /// <param name="sender">Event sender.</param>
        /// <param name="e">Event args.</param>
        private void ParameterSetControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            this.firstFocusableElement = null;
            this.MainGrid.Children.Clear();
            this.MainGrid.RowDefinitions.Clear();

            ParameterSetViewModel viewModel = e.NewValue as ParameterSetViewModel;

            if (viewModel == null)
            {
                return;
            }

            this.currentParameterSetViewModel = viewModel;

            for (int rowNumber = 0; rowNumber < viewModel.Parameters.Count; rowNumber++)
            {
                ParameterViewModel parameter = viewModel.Parameters[rowNumber];
                this.MainGrid.RowDefinitions.Add(this.CreateNewRow());

                if (parameter.Parameter.ParameterType.IsSwitch)
                {
                    this.AddControlToMainGrid(ParameterSetControl.CreateCheckBox(parameter, rowNumber));
                }
                else
                {
                    this.CreateAndAddLabel(parameter, rowNumber);
                    Control control = null;
                    if (parameter.Parameter.HasParameterSet)
                    {
                        // For ValidateSet parameter
                        ArrayList itemsSource = new ArrayList();
                        itemsSource.Add(string.Empty);

                        for (int i = 0; i < parameter.Parameter.ValidParamSetValues.Count; i++)
                        {
                            itemsSource.Add(parameter.Parameter.ValidParamSetValues[i]);
                        }

                        control = ParameterSetControl.CreateComboBoxControl(parameter, rowNumber, itemsSource);
                    }
                    else if (parameter.Parameter.ParameterType.IsEnum)
                    {
                        if (parameter.Parameter.ParameterType.HasFlagAttribute)
                        {
                            ArrayList itemsSource = new ArrayList();
                            itemsSource.Add(string.Empty);
                            itemsSource.AddRange(parameter.Parameter.ParameterType.EnumValues);
                            control = ParameterSetControl.CreateComboBoxControl(parameter, rowNumber, itemsSource);
                        }
                        else
                        {
                            control = ParameterSetControl.CreateMultiSelectComboControl(parameter, rowNumber, parameter.Parameter.ParameterType.EnumValues);
                        }
                    }
                    else if (parameter.Parameter.ParameterType.IsBoolean)
                    {
                        control = ParameterSetControl.CreateComboBoxControl(parameter, rowNumber, new string[] { string.Empty, "$True", "$False" });
                    }
                    else
                    {
                        // For input parameter
                        control = ParameterSetControl.CreateTextBoxControl(parameter, rowNumber);
                    }

                    if (control != null)
                    {
                        this.AddControlToMainGrid(control);
                    }
                }
            }
        }
        /// <summary>
        /// Compares source and target by being the default parameter set and then by name
        /// </summary>
        /// <param name="source">source parameterset</param>
        /// <param name="target">target parameterset</param>
        /// <returns>0 if they are the same, -1 if source is smaller, 1 if source is larger</returns>
        private int Compare(ParameterSetViewModel source, ParameterSetViewModel target)
        {
            if (this.defaultParameterSetName != null)
            {
                if (source.Name.Equals(this.defaultParameterSetName) && target.Name.Equals(this.defaultParameterSetName))
                {
                    return 0;
                }

                if (source.Name.Equals(this.defaultParameterSetName, StringComparison.Ordinal))
                {
                    return -1;
                }

                if (target.Name.Equals(this.defaultParameterSetName, StringComparison.Ordinal))
                {
                    return 1;
                }
            }

            return String.Compare(source.Name, target.Name, StringComparison.Ordinal);
        }
        /// <summary>
        /// When user switch ParameterSet.It will trigger this event.
        /// This event method will renew generate all controls for current ParameterSet.
        /// </summary>
        /// <param name="sender">Event sender</param>
        /// <param name="e">Event args</param>
        private void ParameterSetControl_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
        {
            this.MainGrid.Children.Clear();
            this.MainGrid.RowDefinitions.Clear();

            ParameterSetViewModel viewModel = e.NewValue as ParameterSetViewModel;
            if (viewModel == null)
            {
                return;
            }

            this.currentParameterSetViewModel = viewModel;

            for (int rowNumber = 0; rowNumber < viewModel.Parameters.Count; rowNumber++)
            {
                ParameterViewModel parameter = viewModel.Parameters[rowNumber];
                this.MainGrid.RowDefinitions.Add(this.CreateNewRow());

                if (parameter.Parameter.ParameterType.IsSwitch)
                {
                    this.AddControlToMainGrid(ParameterSetControl.CreateCheckBox(parameter, rowNumber));
                }
                else
                {
                    this.CreateAndAddLabel(parameter, rowNumber);
                    Control control = null;
                    if(parameter.Parameter.HasParameterSet)
                    {
                        // For ValidateSet parameter
                        ArrayList itemsSource = new ArrayList();
                        itemsSource.Add(String.Empty);

                        for (int i = 0; i < parameter.Parameter.ValidParamSetValues.Count; i++)
                        {
                            itemsSource.Add(parameter.Parameter.ValidParamSetValues[i]);
                        }

                        control = ParameterSetControl.CreateComboBoxControl(parameter, rowNumber, itemsSource);
                    }
                    else if (parameter.Parameter.ParameterType.IsEnum)
                    {
                        if (parameter.Parameter.ParameterType.HasFlagAttribute)
                        {
                            ArrayList itemsSource = new ArrayList();
                            itemsSource.Add(String.Empty);
                            itemsSource.AddRange(parameter.Parameter.ParameterType.EnumValues);
                            control = ParameterSetControl.CreateComboBoxControl(parameter, rowNumber, itemsSource);
                        }
                        else
                        {
                            control = ParameterSetControl.CreateMultiSelectComboControl(parameter, rowNumber, parameter.Parameter.ParameterType.EnumValues);
                        }
                    }
                    else if (parameter.Parameter.ParameterType.IsBoolean)
                    {
                        control = ParameterSetControl.CreateComboBoxControl(parameter, rowNumber, new string[] { String.Empty, "$True", "$False" });
                    }
                    else
                    {
                        // For input parameter
                        control = ParameterSetControl.CreateTextBoxControl(parameter, rowNumber);
                    }

                    if (control != null)
                    {
                        this.AddControlToMainGrid(control);
                    }
                }
            }
        }