/// <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)); }
/// <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); } } } }