Exemple #1
0
        private static IntermediateField AssignFieldValue(IntermediateField field, object data)
        {
            field.Value = new IntermediateFieldValue
            {
                Context       = valueContext,
                Data          = data,
                PreviousValue = field.Value
            };

            return(field);
        }
Exemple #2
0
        internal static IntermediateSymbol Deserialize(ISymbolDefinitionCreator creator, Uri baseUri, JsonObject jsonObject)
        {
            var definitionName        = jsonObject.GetValueOrDefault <string>("type");
            var idJson                = jsonObject.GetValueOrDefault <JsonObject>("id");
            var sourceLineNumbersJson = jsonObject.GetValueOrDefault <JsonObject>("ln");
            var fieldsJson            = jsonObject.GetValueOrDefault <JsonArray>("fields");
            var tagsJson              = jsonObject.GetValueOrDefault <JsonArray>("tags");

            var id = (idJson == null) ? null : Identifier.Deserialize(idJson);
            var sourceLineNumbers = (sourceLineNumbersJson == null) ? null : SourceLineNumber.Deserialize(sourceLineNumbersJson);

            // TODO: this isn't sufficient.
            if (!creator.TryGetSymbolDefinitionByName(definitionName, out var definition))
            {
                throw new WixException(ErrorMessages.UnknownSymbolType(definitionName));
            }

            var symbol = definition.CreateSymbol(sourceLineNumbers, id);

            for (var i = 0; i < fieldsJson.Count && i < symbol.Fields.Length; ++i)
            {
                if (fieldsJson[i] is JsonObject fieldJson)
                {
                    symbol.Fields[i] = IntermediateField.Deserialize(symbol.Definition.FieldDefinitions[i], baseUri, fieldJson);
                }
            }

            if (tagsJson == null || tagsJson.Count == 0)
            {
            }
            else if (tagsJson.Count == 1)
            {
                symbol.tags = (string)tagsJson[0];
            }
            else
            {
                var tags = new string[tagsJson.Count];

                for (var i = 0; i < tagsJson.Count; ++i)
                {
                    tags[i] = (string)tagsJson[i];
                }

                symbol.tags = tags;
            }

            return(symbol);
        }
Exemple #3
0
        public static IntermediateField Set(this IntermediateField field, IntermediateFieldPathValue value)
        {
            object data;

            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }
            else if (value == null) // null is always allowed.
            {
                data = null;
            }
            else
            {
                switch (field.Type)
                {
                case IntermediateFieldType.Bool:
                    throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'bool' field type.", nameof(value));

                case IntermediateFieldType.LargeNumber:
                    throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'large number' field type.", nameof(value));

                case IntermediateFieldType.Number:
                    throw new ArgumentException($"Cannot convert path '{value.Path}' to a 'number' field type.", nameof(value));

                case IntermediateFieldType.Path:
                    data = value;
                    break;

                case IntermediateFieldType.String:
                    data = value.Path;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
                }
                ;
            }

            return(AssignFieldValue(field, data));
        }
Exemple #4
0
        public static IntermediateFieldPathValue AsPath(this IntermediateField field)
        {
            if (field == null || field.Value == null || field.Value.Data == null)
            {
                return(null);
            }

            switch (field.Definition.Type)
            {
            case IntermediateFieldType.String:
                return(new IntermediateFieldPathValue {
                    Path = field.Value.AsString()
                });

            case IntermediateFieldType.Path:
                return(field.Value.AsPath());

            default:
                throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to string");
            }
        }
Exemple #5
0
        public static int?AsNullableNumber(this IntermediateField field)
        {
            if (field == null || field.Value == null || field.Value.Data == null)
            {
                return(null);
            }

            switch (field.Definition.Type)
            {
            case IntermediateFieldType.Bool:
                return(field.Value.AsBool() ? 1 : 0);

            case IntermediateFieldType.Number:
                return(field.Value.AsNumber());

            case IntermediateFieldType.String:
                return(Convert.ToInt32(field.Value.AsString()));

            default:
                throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to number");
            }
        }
Exemple #6
0
        public static bool?AsNullableBool(this IntermediateField field)
        {
            if (field == null || field.Value == null || field.Value.Data == null)
            {
                return(null);
            }

            switch (field.Definition.Type)
            {
            case IntermediateFieldType.Bool:
                return(field.Value.AsBool());

            case IntermediateFieldType.Number:
                return(field.Value.AsNumber() != 0);

            case IntermediateFieldType.String:
                return(!String.IsNullOrEmpty(field.Value.AsString()));

            default:
                throw new InvalidCastException($"Cannot convert field {field.Name} with type {field.Type} to boolean");
            }
        }
Exemple #7
0
        internal static IntermediateTuple Deserialize(ITupleDefinitionCreator creator, Uri baseUri, JsonObject jsonObject)
        {
            var definitionName        = jsonObject.GetValueOrDefault <string>("type");
            var idJson                = jsonObject.GetValueOrDefault <JsonObject>("id");
            var sourceLineNumbersJson = jsonObject.GetValueOrDefault <JsonObject>("ln");
            var fieldsJson            = jsonObject.GetValueOrDefault <JsonArray>("fields");

            var id = (idJson == null) ? null : Identifier.Deserialize(idJson);
            var sourceLineNumbers = (sourceLineNumbersJson == null) ? null : SourceLineNumber.Deserialize(sourceLineNumbersJson);

            creator.TryGetTupleDefinitionByName(definitionName, out var definition); // TODO: this isn't sufficient.
            var tuple = definition.CreateTuple(sourceLineNumbers, id);

            for (var i = 0; i < fieldsJson.Count; ++i)
            {
                if (tuple.Fields.Length > i && fieldsJson[i] is JsonObject fieldJson)
                {
                    tuple.Fields[i] = IntermediateField.Deserialize(tuple.Definition.FieldDefinitions[i], baseUri, fieldJson);
                }
            }

            return(tuple);
        }
Exemple #8
0
        public static IntermediateField Set(this IntermediateField field, int value)
        {
            object data;

            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }

            switch (field.Type)
            {
            case IntermediateFieldType.Bool:
                data = (value != 0);
                break;

            case IntermediateFieldType.LargeNumber:
                data = (long)value;
                break;

            case IntermediateFieldType.Number:
                data = value;
                break;

            case IntermediateFieldType.Path:
                throw new ArgumentException($"Cannot convert number '{value}' to a 'Path' field type.", nameof(value));

            case IntermediateFieldType.String:
                data = value.ToString();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
            }
            ;

            return(AssignFieldValue(field, data));
        }
Exemple #9
0
 private static IntermediateField EnsureField(IntermediateField field, IntermediateFieldDefinition definition)
 {
     return(field ?? new IntermediateField(definition));
 }
Exemple #10
0
 public static IntermediateField Set(this IntermediateField field, IntermediateFieldDefinition definition, string value)
 {
     return(EnsureField(field, definition).Set(value));
 }
Exemple #11
0
        public static IntermediateField Set(this IntermediateField field, string value)
        {
            object data;

            if (field == null)
            {
                throw new ArgumentNullException(nameof(field));
            }
            else if (value == null) // Null is always allowed.
            {
                data = null;
            }
            else
            {
                switch (field.Type)
                {
                case IntermediateFieldType.Bool:
                    if (value.Equals("yes", StringComparison.OrdinalIgnoreCase) || value.Equals("true", StringComparison.OrdinalIgnoreCase))
                    {
                        data = true;
                    }
                    else if (value.Equals("no", StringComparison.OrdinalIgnoreCase) || value.Equals("false", StringComparison.OrdinalIgnoreCase))
                    {
                        data = false;
                    }
                    else
                    {
                        throw new ArgumentException($"Cannot convert string '{value}' to a 'bool' field type.", nameof(value));
                    }
                    break;

                case IntermediateFieldType.LargeNumber:
                    if (Int64.TryParse(value, out var largeNumber))
                    {
                        data = largeNumber;
                    }
                    else
                    {
                        throw new ArgumentException($"Cannot convert string '{value}' to a 'large number' field type.", nameof(value));
                    }
                    break;

                case IntermediateFieldType.Number:
                    if (Int32.TryParse(value, out var number))
                    {
                        data = number;
                    }
                    else
                    {
                        throw new ArgumentException($"Cannot convert string '{value}' to a 'number' field type.", nameof(value));
                    }
                    break;

                case IntermediateFieldType.Path:
                    data = new IntermediateFieldPathValue {
                        Path = value
                    };
                    break;

                case IntermediateFieldType.String:
                    data = value;
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(value), $"Unknown intermediate field type: {value.GetType()}");
                }
                ;
            }

            return(AssignFieldValue(field, data));
        }
 public static void Overwrite(this IntermediateField field, string value) => field.Value.Data = value;
 public static object AsObject(this IntermediateField field)
 {
     return(field?.Value.Data);
 }
 public static bool IsNull(this IntermediateField field) => field?.Value?.Data == null;