Пример #1
0
        private void ProcessNodeObject(JToken jt, object nodeObject, string fullName)
        {
            foreach (var prop in nodeObject.GetType().GetProperties())
            {
                var attributes = prop.GetCustomAttributes(false);
                if (attributes.FirstOrDefault(i => i is ArmParameterAttribute) is ArmParameterAttribute armParamAttribute)
                {
                    var jsonName      = prop.GetJsonPropertyName();
                    var parameterName = string.IsNullOrEmpty(armParamAttribute.Name)
                        ? $"{fullName}_{jsonName}"
                        : armParamAttribute.Name;
                    var type = armParamAttribute.Type;

                    var armParam = new ArmParameter
                    {
                        Name       = parameterName,
                        Properties = new ArmParameterProperties
                        {
                            DefaultValue = prop.GetValue(nodeObject).GetDefaultPropertyValue(type, armParamAttribute.RemoveBrackets),
                            Type         = type
                        }
                    };

                    ReplacePropertyWithParameter(jt, armParam, parameterName, jsonName);
                }
                else if (attributes.Any(i => i is JsonPropertyAttribute))
                {
                    var nextNode = prop.GetValue(nodeObject);

                    var jsonName = prop.GetJsonPropertyName();

                    ProcessNodeElement(jt[jsonName], nextNode, $"{fullName}_{jsonName}");
                }
            }
        }
Пример #2
0
        private void ReplacePropertyWithParameter(JToken jt, ArmParameter armParam, string parameterName, string jsonName)
        {
            switch (jt[jsonName])
            {
            case JValue jvalue:
                jvalue.Value = $"[parameters('{parameterName}')]";
                break;

            case JProperty jprop:
                jprop.Value = $"[parameters('{parameterName}')]";
                break;

            case JArray jarray:
                var arrayParent = jarray.Parent;
                arrayParent.Replace(new JProperty(jsonName, $"[parameters('{parameterName}')]"));
                break;

            case JObject jo:
                var objectParent = jo.Parent;
                objectParent.Replace(new JProperty(jsonName, $"[parameters('{parameterName}')]"));
                break;

            case null:
                ((JObject)jt).Add(new JProperty(jsonName, $"[parameters('{parameterName}')]"));
                break;
            }

            if (_parameters.All(i => i.Name != armParam.Name))
            {
                _parameters.Add(armParam);
            }
        }
Пример #3
0
 public object VisitParameterDeclaration(ArmParameter parameter)
 {
     WriteAllowedValues(parameter.AllowedValues);
     WriteParameterType(parameter.Type.CoerceToLiteral());
     WriteVariable(parameter.Name.CoerceToString());
     WriteDefaultValue(parameter.DefaultValue);
     return(null);
 }
Пример #4
0
        VisitAction IArmVisitor <VisitAction> .VisitParameterDeclaration(ArmParameter parameter)
        {
            if (ShouldStop(VisitParameterDeclaration(parameter), out VisitAction parentAction))
            {
                return(parentAction);
            }

            if (VisitDictionaryAndCheckStop(parameter, out parentAction))
            {
                return(parentAction);
            }

            return(VisitAction.Continue);
        }
Пример #5
0
        private ArmParameter ReadTypedParameter <T>(string parameterName, JObject parameterObject)
        {
            var parameter = new ArmParameter <T>(new ArmStringLiteral(parameterName));

            if (parameterObject.TryGetValue("defaultValue", out JToken defaultValue))
            {
                parameter.DefaultValue = ReadValue(defaultValue);
            }

            if (parameterObject.TryGetValue("allowedValues", out JToken allowedValues))
            {
                parameter.AllowedValues = ReadArmArray((JArray)allowedValues);
            }

            return(parameter);
        }
Пример #6
0
 public virtual VisitAction VisitParameterDeclaration(ArmParameter parameter) => DefaultVisit(parameter);
Пример #7
0
 public object VisitParameterDeclaration(ArmParameter parameter)
 {
     throw CreateInvalidException(parameter);
 }
Пример #8
0
 public JToken VisitParameterDeclaration(ArmParameter parameter) => VisitObject(parameter);