Example #1
0
 private ParameterMetadata GetParameter(string parameterSetName, string objectModelParameterName, TypeMetadata parameterTypeMetadata, CmdletParameterMetadata parameterCmdletization, bool isValueFromPipeline, bool isValueFromPipelineByPropertyName)
 {
     string pSName;
     if ((parameterCmdletization != null) && !string.IsNullOrEmpty(parameterCmdletization.PSName))
     {
         pSName = parameterCmdletization.PSName;
     }
     else
     {
         pSName = objectModelParameterName;
     }
     ParameterMetadata metadata = new ParameterMetadata(pSName) {
         ParameterType = this.GetDotNetType(parameterTypeMetadata)
     };
     if (parameterTypeMetadata.ETSType != null)
     {
         metadata.Attributes.Add(new PSTypeNameAttribute(parameterTypeMetadata.ETSType));
     }
     if (parameterCmdletization != null)
     {
         if (parameterCmdletization.Aliases != null)
         {
             foreach (string str2 in parameterCmdletization.Aliases)
             {
                 if (!string.IsNullOrEmpty(str2))
                 {
                     metadata.Aliases.Add(str2);
                 }
             }
         }
         if (parameterCmdletization.AllowEmptyCollection != null)
         {
             metadata.Attributes.Add(new AllowEmptyCollectionAttribute());
         }
         if (parameterCmdletization.AllowEmptyString != null)
         {
             metadata.Attributes.Add(new AllowEmptyStringAttribute());
         }
         if (parameterCmdletization.AllowNull != null)
         {
             metadata.Attributes.Add(new AllowNullAttribute());
         }
         if (parameterCmdletization.ValidateCount != null)
         {
             int minLength = (int) LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateCount.Min, typeof(int), CultureInfo.InvariantCulture);
             int maxLength = (int) LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateCount.Max, typeof(int), CultureInfo.InvariantCulture);
             metadata.Attributes.Add(new ValidateCountAttribute(minLength, maxLength));
         }
         if (parameterCmdletization.ValidateLength != null)
         {
             int num3 = (int) LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateLength.Min, typeof(int), CultureInfo.InvariantCulture);
             int num4 = (int) LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateLength.Max, typeof(int), CultureInfo.InvariantCulture);
             metadata.Attributes.Add(new ValidateLengthAttribute(num3, num4));
         }
         if (parameterCmdletization.ValidateNotNull != null)
         {
             metadata.Attributes.Add(new ValidateNotNullAttribute());
         }
         if (parameterCmdletization.ValidateNotNullOrEmpty != null)
         {
             metadata.Attributes.Add(new ValidateNotNullOrEmptyAttribute());
         }
         if (parameterCmdletization.ValidateRange != null)
         {
             Type type2;
             Type parameterType = metadata.ParameterType;
             if (parameterType == null)
             {
                 type2 = typeof(string);
             }
             else
             {
                 type2 = parameterType.HasElementType ? parameterType.GetElementType() : parameterType;
             }
             object minRange = LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateRange.Min, type2, CultureInfo.InvariantCulture);
             object maxRange = LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateRange.Max, type2, CultureInfo.InvariantCulture);
             metadata.Attributes.Add(new ValidateRangeAttribute(minRange, maxRange));
         }
         if (parameterCmdletization.ValidateSet != null)
         {
             List<string> list = new List<string>();
             foreach (string str3 in parameterCmdletization.ValidateSet)
             {
                 list.Add(str3);
             }
             metadata.Attributes.Add(new ValidateSetAttribute(list.ToArray()));
         }
     }
     int position = -2147483648;
     ParameterSetMetadata.ParameterFlags flags = 0;
     if (parameterCmdletization != null)
     {
         if (!string.IsNullOrEmpty(parameterCmdletization.Position))
         {
             position = (int) LanguagePrimitives.ConvertTo(parameterCmdletization.Position, typeof(int), CultureInfo.InvariantCulture);
         }
         if (parameterCmdletization.IsMandatorySpecified && parameterCmdletization.IsMandatory)
         {
             flags |= ParameterSetMetadata.ParameterFlags.Mandatory;
         }
     }
     if (isValueFromPipeline)
     {
         flags |= ParameterSetMetadata.ParameterFlags.ValueFromPipeline;
     }
     if (isValueFromPipelineByPropertyName)
     {
         flags |= ParameterSetMetadata.ParameterFlags.ValueFromPipelineByPropertyName;
     }
     metadata.ParameterSets.Add(parameterSetName, new ParameterSetMetadata(position, flags, null));
     return metadata;
 }
Example #2
0
 private ParameterMetadata GetParameter(IEnumerable<string> queryParameterSets, string objectModelParameterName, TypeMetadata parameterType, CmdletParameterMetadataForGetCmdletParameter parameterCmdletization)
 {
     ParameterMetadata metadata = this.GetParameter("__AllParameterSets", objectModelParameterName, parameterType, parameterCmdletization, ((parameterCmdletization != null) && parameterCmdletization.ValueFromPipelineSpecified) && parameterCmdletization.ValueFromPipeline, ((parameterCmdletization != null) && parameterCmdletization.ValueFromPipelineByPropertyNameSpecified) && parameterCmdletization.ValueFromPipelineByPropertyName);
     ParameterSetMetadata metadata2 = metadata.ParameterSets["__AllParameterSets"];
     metadata.ParameterSets.Clear();
     if (((parameterCmdletization != null) && (parameterCmdletization.CmdletParameterSets != null)) && (parameterCmdletization.CmdletParameterSets.Length > 0))
     {
         queryParameterSets = parameterCmdletization.CmdletParameterSets;
     }
     foreach (string str in queryParameterSets)
     {
         if (!str.Equals("InputObject (cdxml)", StringComparison.OrdinalIgnoreCase))
         {
             metadata.ParameterSets.Add(str, metadata2);
         }
     }
     return metadata;
 }
Example #3
0
 private ParameterMetadata GetParameter(string parameterSetName, string objectModelParameterName, TypeMetadata parameterType, CmdletParameterMetadataForStaticMethodParameter parameterCmdletization)
 {
     return this.GetParameter(parameterSetName, objectModelParameterName, parameterType, parameterCmdletization, ((parameterCmdletization != null) && parameterCmdletization.ValueFromPipelineSpecified) && parameterCmdletization.ValueFromPipeline, ((parameterCmdletization != null) && parameterCmdletization.ValueFromPipelineByPropertyNameSpecified) && parameterCmdletization.ValueFromPipelineByPropertyName);
 }
Example #4
0
 private TypeMetadata Read2_TypeMetadata(bool isNullable, bool checkType)
 {
     XmlQualifiedName type = checkType ? base.GetXsiType() : null;
     bool flag = false;
     if (isNullable)
     {
         flag = base.ReadNull();
     }
     if ((checkType && (type != null)) && ((type.Name != this.id8_TypeMetadata) || (type.Namespace != this.id2_Item)))
     {
         throw base.CreateUnknownTypeException(type);
     }
     if (flag)
     {
         return null;
     }
     TypeMetadata o = new TypeMetadata();
     bool[] flagArray = new bool[2];
     while (base.Reader.MoveToNextAttribute())
     {
         if ((!flagArray[0] && (base.Reader.LocalName == this.id91_PSType)) && (base.Reader.NamespaceURI == this.id4_Item))
         {
             o.PSType = base.Reader.Value;
             flagArray[0] = true;
         }
         else
         {
             if ((!flagArray[1] && (base.Reader.LocalName == this.id92_ETSType)) && (base.Reader.NamespaceURI == this.id4_Item))
             {
                 o.ETSType = base.Reader.Value;
                 flagArray[1] = true;
                 continue;
             }
             if (!base.IsXmlnsAttribute(base.Reader.Name))
             {
                 base.UnknownNode(o, ":PSType, :ETSType");
             }
         }
     }
     base.Reader.MoveToElement();
     if (base.Reader.IsEmptyElement)
     {
         base.Reader.Skip();
         return o;
     }
     base.Reader.ReadStartElement();
     base.Reader.MoveToContent();
     int whileIterations = 0;
     int readerCount = base.ReaderCount;
     while ((base.Reader.NodeType != XmlNodeType.EndElement) && (base.Reader.NodeType != XmlNodeType.None))
     {
         if (base.Reader.NodeType == XmlNodeType.Element)
         {
             base.UnknownNode(o, "");
         }
         else
         {
             base.UnknownNode(o, "");
         }
         base.Reader.MoveToContent();
         base.CheckReaderCount(ref whileIterations, ref readerCount);
     }
     base.ReadEndElement();
     return o;
 }
Example #5
0
 private Type GetDotNetType(TypeMetadata typeMetadata)
 {
     string pSType;
     List<EnumMetadataEnum> list = (from e in this.cmdletizationMetadata.Enums ?? Enumerable.Empty<EnumMetadataEnum>()
         where Regex.IsMatch(typeMetadata.PSType, string.Format(CultureInfo.InvariantCulture, @"\b{0}\b", new object[] { Regex.Escape(e.EnumName) }), RegexOptions.CultureInvariant)
         select e).ToList<EnumMetadataEnum>();
     EnumMetadataEnum enumMetadata = (list.Count == 1) ? list[0] : null;
     if (enumMetadata != null)
     {
         pSType = typeMetadata.PSType.Replace(enumMetadata.EnumName, EnumWriter.GetEnumFullName(enumMetadata));
     }
     else
     {
         pSType = typeMetadata.PSType;
     }
     return (Type) LanguagePrimitives.ConvertTo(pSType, typeof(Type), CultureInfo.InvariantCulture);
 }
Example #6
0
 private void Write2_TypeMetadata(string n, string ns, TypeMetadata o, bool isNullable, bool needType)
 {
     if (o == null)
     {
         if (isNullable)
         {
             base.WriteNullTagLiteral(n, ns);
         }
     }
     else
     {
         if (!needType && !(o.GetType() == typeof(TypeMetadata)))
         {
             throw base.CreateUnknownTypeException(o);
         }
         base.WriteStartElement(n, ns, o, false, null);
         if (needType)
         {
             base.WriteXsiType("TypeMetadata", "http://schemas.microsoft.com/cmdlets-over-objects/2009/11");
         }
         base.WriteAttribute("PSType", "", o.PSType);
         base.WriteAttribute("ETSType", "", o.ETSType);
         base.WriteEndElement(o);
     }
 }
Example #7
0
        private ParameterMetadata GetParameter(
            IEnumerable<string> queryParameterSets,
            string objectModelParameterName,
            TypeMetadata parameterType,
            CmdletParameterMetadataForGetCmdletParameter parameterCmdletization)
        {
            ParameterMetadata result = GetParameter(
                ParameterAttribute.AllParameterSets,
                objectModelParameterName,
                parameterType,
                parameterCmdletization,
                parameterCmdletization != null && parameterCmdletization.ValueFromPipelineSpecified && parameterCmdletization.ValueFromPipeline,
                parameterCmdletization != null && parameterCmdletization.ValueFromPipelineByPropertyNameSpecified && parameterCmdletization.ValueFromPipelineByPropertyName);

            ParameterSetMetadata parameterSetMetadata = result.ParameterSets[ParameterAttribute.AllParameterSets];
            result.ParameterSets.Clear();
            if (parameterCmdletization != null && parameterCmdletization.CmdletParameterSets != null && parameterCmdletization.CmdletParameterSets.Length > 0)
            {
                queryParameterSets = parameterCmdletization.CmdletParameterSets;
            }
            foreach (string parameterSetName in queryParameterSets)
            {
                if (parameterSetName.Equals(ScriptWriter.InputObjectQueryParameterSetName, StringComparison.OrdinalIgnoreCase))
                {
                    continue;
                }

                result.ParameterSets.Add(parameterSetName, parameterSetMetadata);
            }

            return result;
        }
Example #8
0
 private ParameterMetadata GetParameter(
     string parameterSetName,
     string objectModelParameterName,
     TypeMetadata parameterType,
     CmdletParameterMetadataForInstanceMethodParameter parameterCmdletization)
 {
     return GetParameter(
         parameterSetName,
         objectModelParameterName,
         parameterType,
         parameterCmdletization,
         false, /* isValueFromPipeline */
         parameterCmdletization != null && parameterCmdletization.ValueFromPipelineByPropertyNameSpecified && parameterCmdletization.ValueFromPipelineByPropertyName);
 }
Example #9
0
        private ParameterMetadata GetParameter(
            string parameterSetName,
            string objectModelParameterName,
            TypeMetadata parameterTypeMetadata,
            CmdletParameterMetadata parameterCmdletization,
            bool isValueFromPipeline,
            bool isValueFromPipelineByPropertyName)
        {
            string parameterName;
            if ((parameterCmdletization != null) && (!string.IsNullOrEmpty(parameterCmdletization.PSName)))
            {
                parameterName = parameterCmdletization.PSName;
            }
            else
            {
                parameterName = objectModelParameterName;
            }

            ParameterMetadata parameterMetadata = new ParameterMetadata(parameterName);
            parameterMetadata.ParameterType = GetDotNetType(parameterTypeMetadata);
            if (typeof(PSCredential).Equals(parameterMetadata.ParameterType))
            {
                parameterMetadata.Attributes.Add(new CredentialAttribute());
            }

            if (parameterTypeMetadata.ETSType != null)
            {
                parameterMetadata.Attributes.Add(new PSTypeNameAttribute(parameterTypeMetadata.ETSType));
            }

            if (parameterCmdletization != null)
            {
                if (parameterCmdletization.Aliases != null)
                {
                    foreach (string alias in parameterCmdletization.Aliases)
                    {
                        if (!string.IsNullOrEmpty(alias))
                        {
                            parameterMetadata.Aliases.Add(alias);
                        }
                    }
                }

                if (parameterCmdletization.AllowEmptyCollection != null)
                {
                    parameterMetadata.Attributes.Add(new AllowEmptyCollectionAttribute());
                }

                if (parameterCmdletization.AllowEmptyString != null)
                {
                    parameterMetadata.Attributes.Add(new AllowEmptyStringAttribute());
                }

                if (parameterCmdletization.AllowNull != null)
                {
                    parameterMetadata.Attributes.Add(new AllowNullAttribute());
                }

                if (parameterCmdletization.ValidateCount != null)
                {
                    int min = (int)LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateCount.Min, typeof(int), CultureInfo.InvariantCulture);
                    int max = (int)LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateCount.Max, typeof(int), CultureInfo.InvariantCulture);
                    parameterMetadata.Attributes.Add(new ValidateCountAttribute(min, max));
                }

                if (parameterCmdletization.ValidateLength != null)
                {
                    int min = (int)LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateLength.Min, typeof(int), CultureInfo.InvariantCulture);
                    int max = (int)LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateLength.Max, typeof(int), CultureInfo.InvariantCulture);
                    parameterMetadata.Attributes.Add(new ValidateLengthAttribute(min, max));
                }

                if (parameterCmdletization.Obsolete != null)
                {
                    string obsoleteMessage = parameterCmdletization.Obsolete.Message;
                    parameterMetadata.Attributes.Add(obsoleteMessage != null ? new ObsoleteAttribute(obsoleteMessage) : new ObsoleteAttribute());
                }

                if (parameterCmdletization.ValidateNotNull != null)
                {
                    parameterMetadata.Attributes.Add(new ValidateNotNullAttribute());
                }

                if (parameterCmdletization.ValidateNotNullOrEmpty != null)
                {
                    parameterMetadata.Attributes.Add(new ValidateNotNullOrEmptyAttribute());
                }

                if (parameterCmdletization.ValidateRange != null)
                {
                    Type parameterType = parameterMetadata.ParameterType;
                    Type elementType;
                    if (parameterType == null)
                    {
                        elementType = typeof(string);
                    }
                    else
                    {
                        elementType = parameterType.HasElementType ? parameterType.GetElementType() : parameterType;
                    }
                    object min = LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateRange.Min, elementType, CultureInfo.InvariantCulture);
                    object max = LanguagePrimitives.ConvertTo(parameterCmdletization.ValidateRange.Max, elementType, CultureInfo.InvariantCulture);
                    parameterMetadata.Attributes.Add(new ValidateRangeAttribute(min, max));
                }

                if (parameterCmdletization.ValidateSet != null)
                {
                    List<string> allowedValues = new List<string>();
                    foreach (string allowedValue in parameterCmdletization.ValidateSet)
                    {
                        allowedValues.Add(allowedValue);
                    }
                    parameterMetadata.Attributes.Add(new ValidateSetAttribute(allowedValues.ToArray()));
                }
            }

            int position = int.MinValue;
            ParameterSetMetadata.ParameterFlags parameterFlags = 0;
            if (parameterCmdletization != null)
            {
                if (!string.IsNullOrEmpty(parameterCmdletization.Position))
                {
                    position = (int)LanguagePrimitives.ConvertTo(parameterCmdletization.Position, typeof(int), CultureInfo.InvariantCulture);
                }

                if (parameterCmdletization.IsMandatorySpecified && parameterCmdletization.IsMandatory)
                {
                    parameterFlags |= ParameterSetMetadata.ParameterFlags.Mandatory;
                }
            }
            if (isValueFromPipeline)
            {
                parameterFlags |= ParameterSetMetadata.ParameterFlags.ValueFromPipeline;
            }
            if (isValueFromPipelineByPropertyName)
            {
                parameterFlags |= ParameterSetMetadata.ParameterFlags.ValueFromPipelineByPropertyName;
            }
            parameterMetadata.ParameterSets.Add(parameterSetName, new ParameterSetMetadata(position, parameterFlags, null));

            return parameterMetadata;
        }
Example #10
0
        private Type GetDotNetType(TypeMetadata typeMetadata)
        {
            Dbg.Assert(typeMetadata != null, "Caller should verify typeMetadata != null");

            string psTypeText;
            List<EnumMetadataEnum> matchingEnums = (_cmdletizationMetadata.Enums ?? Enumerable.Empty<EnumMetadataEnum>())
                .Where(e => Regex.IsMatch(
                    typeMetadata.PSType,
                    string.Format(CultureInfo.InvariantCulture, @"\b{0}\b", Regex.Escape(e.EnumName)),
                    RegexOptions.CultureInvariant))
                .ToList();
            EnumMetadataEnum matchingEnum = matchingEnums.Count == 1 ? matchingEnums[0] : null;
            if (matchingEnum != null)
            {
                psTypeText = typeMetadata.PSType.Replace(matchingEnum.EnumName, EnumWriter.GetEnumFullName(matchingEnum));
            }
            else
            {
                psTypeText = typeMetadata.PSType;
            }

            Type dotNetType = (Type)LanguagePrimitives.ConvertTo(psTypeText, typeof(Type), CultureInfo.InvariantCulture);
            return dotNetType;
        }