Пример #1
0
 internal EntityDefinition(
     XElement element,
     EntityDefinition baseEntity = null,
     ExtendedKeyedCollection <string, PropertyDefinition> properties = null,
     ExtendedKeyedCollection <string, Variable> variables            = null) : this(element, element.AttributeValueOrThrow(AttributeNames.Name), baseEntity, properties, variables)
 {
 }
Пример #2
0
        private static void ScanDeclarations(IEnumerable <XElement> elements, out ExtendedKeyedCollection <string, PropertyDefinition> properties, out ExtendedKeyedCollection <string, Variable> variables)
        {
            properties = null;
            variables  = null;

            foreach (XElement element in elements)
            {
                switch (element.Kind())
                {
                case ElementKind.Variable:
                {
                    variables = variables ?? new ExtendedKeyedCollection <string, Variable>(DefaultComparer.StringComparer);

                    string variableName = element.AttributeValueOrThrow(AttributeNames.Name);

                    if (variables.Contains(variableName))
                    {
                        Throw(ErrorMessages.ItemAlreadyDefined(ElementNames.Variable, variableName), element);
                    }

                    var variable = new Variable(
                        variableName,
                        element.AttributeValueOrThrow(AttributeNames.Value));

                    variables.Add(variable);
                    break;
                }

                case ElementKind.Property:
                {
                    properties = properties ?? new ExtendedKeyedCollection <string, PropertyDefinition>();

                    string propertyName = element.AttributeValueOrThrow(AttributeNames.Name);

                    if (properties.Contains(propertyName))
                    {
                        Throw(ErrorMessages.ItemAlreadyDefined(ElementNames.Property, propertyName), element);
                    }

                    var property = new PropertyDefinition(
                        propertyName,
                        element.AttributeValueOrDefault(AttributeNames.DefaultValue),
                        element.AttributeValueAsBooleanOrDefault(AttributeNames.IsCollection),
                        element.AttributeValueAsBooleanOrDefault(AttributeNames.IsRequired),
                        element);

                    properties.Add(property);
                    break;
                }

                default:
                {
                    ThrowOnUnknownElement(element);
                    break;
                }
                }
            }
        }
Пример #3
0
        protected override void AddRecord(Record record)
        {
            if (Records == null)
            {
                Records = new ExtendedKeyedCollection <string, Record>();
            }
            else if (Records.Contains(record.Id))
            {
                Throw(ErrorMessages.ItemAlreadyDefined(PropertyDefinition.IdName, record.Id));
            }

            Records.Add(record);
        }
Пример #4
0
        public EntityElement(XElement element, DocumentSettings settings, EntityDefinition baseEntity = null)
        {
            Settings = settings;

            Scan(element.Elements());

            ExtendedKeyedCollection <string, PropertyDefinition> properties = null;
            ExtendedKeyedCollection <string, Variable>           variables  = null;

            if (_declarationsElement != null)
            {
                ScanDeclarations(_declarationsElement.Elements(), out properties, out variables);
            }

            Entity = new EntityDefinition(element, baseEntity, properties, variables);
        }
Пример #5
0
        private EntityDefinition(
            XElement element,
            string name,
            EntityDefinition baseEntity = null,
            ExtendedKeyedCollection <string, PropertyDefinition> properties = null,
            ExtendedKeyedCollection <string, Variable> variables            = null)
        {
            Name = name;

            if (baseEntity == null && !IsGlobalEntity)
            {
                baseEntity = Global;
            }

            BaseEntity = baseEntity;

            if (properties != null)
            {
                if (!IsGlobalEntity && baseEntity != null)
                {
                    foreach (PropertyDefinition property in properties)
                    {
                        if (FindProperty(property.Name, baseEntity) != null)
                        {
                            ThrowHelper.ThrowInvalidOperation(ErrorMessages.PropertyAlreadyDefined(property.Name, name), element);
                        }
                    }
                }

                Properties = new PropertyDefinitionCollection(properties);
            }
            else
            {
                Properties = Empty.PropertyDefinitionCollection;
            }

            if (variables != null)
            {
                Variables = new VariableCollection(variables);
            }
            else
            {
                Variables = Empty.VariableCollection;
            }
        }
Пример #6
0
        internal EntityDefinition(
            string name,
            EntityDefinition baseEntity = null,
            ExtendedKeyedCollection <string, PropertyDefinition> properties = null,
            ExtendedKeyedCollection <string, Variable> variables            = null)
        {
            Name = name;

            BaseEntity = baseEntity;

            Properties = (properties != null)
                ? new PropertyDefinitionCollection(properties)
                : Empty.PropertyDefinitionCollection;

            Variables = (variables != null)
                ? new VariableCollection(variables)
                : Empty.VariableCollection;
        }
Пример #7
0
        public EntityReader(XElement element, DocumentReaderSettings settings, EntityDefinition baseEntity = null)
        {
            Settings = settings;

            Scan(element.Elements());

            ExtendedKeyedCollection <string, PropertyDefinition> properties = null;
            ExtendedKeyedCollection <string, Variable>           variables  = null;

            if (_declarationsElement != null)
            {
                ScanDeclarations(_declarationsElement.Elements(), out properties, out variables);
            }

            Entity = new EntityDefinition(
                element.AttributeValueOrThrow(AttributeNames.Name),
                baseEntity,
                properties,
                variables,
                element);
        }
Пример #8
0
 internal PropertyDefinitionCollection(ExtendedKeyedCollection <string, PropertyDefinition> collection)
     : base(collection)
 {
 }
Пример #9
0
 internal ReadOnlyKeyedCollection(ExtendedKeyedCollection <TKey, TValue> collection)
     : base(collection)
 {
     _keyedCollection = (ExtendedKeyedCollection <TKey, TValue>)Items;
 }
Пример #10
0
 internal VariableCollection(ExtendedKeyedCollection <string, Variable> collection)
     : base(collection)
 {
 }
Пример #11
0
        private static void ScanDeclarations(IEnumerable <XElement> elements, out ExtendedKeyedCollection <string, PropertyDefinition> properties, out ExtendedKeyedCollection <string, Variable> variables)
        {
            properties = null;
            variables  = null;

            foreach (XElement element in elements)
            {
                switch (element.Kind())
                {
                case ElementKind.Variable:
                {
                    variables = variables ?? new ExtendedKeyedCollection <string, Variable>(DefaultComparer.StringComparer);

                    string variableName = element.AttributeValueOrThrow(AttributeNames.Name);

                    if (variables.Contains(variableName))
                    {
                        Throw(ErrorMessages.ItemAlreadyDefined(ElementNames.Variable, variableName), element);
                    }

                    var variable = new Variable(
                        variableName,
                        element.AttributeValueOrThrow(AttributeNames.Value));

                    variables.Add(variable);
                    break;
                }

                case ElementKind.Property:
                {
                    properties = properties ?? new ExtendedKeyedCollection <string, PropertyDefinition>();

                    string name         = null;
                    bool   isCollection = false;
                    bool   isRequired   = false;
                    string defaultValue = null;
                    string description  = null;

                    foreach (XAttribute attribute in element.Attributes())
                    {
                        switch (attribute.LocalName())
                        {
                        case AttributeNames.Name:
                        {
                            name = attribute.Value;
                            break;
                        }

                        case AttributeNames.IsCollection:
                        {
                            isCollection = bool.Parse(attribute.Value);
                            break;
                        }

                        case AttributeNames.IsRequired:
                        {
                            isRequired = bool.Parse(attribute.Value);
                            break;
                        }

                        case AttributeNames.DefaultValue:
                        {
                            defaultValue = attribute.Value;
                            break;
                        }

                        case AttributeNames.Description:
                        {
                            description = attribute.Value;
                            break;
                        }

                        default:
                        {
                            Throw(ErrorMessages.UnknownAttribute(attribute), element);
                            break;
                        }
                        }
                    }

                    if (properties.Contains(name))
                    {
                        Throw(ErrorMessages.ItemAlreadyDefined(ElementNames.Property, name), element);
                    }

                    if (isCollection &&
                        defaultValue != null)
                    {
                        Throw(ErrorMessages.CollectionPropertyCannotDefineDefaultValue(), element);
                    }

                    var property = new PropertyDefinition(
                        name,
                        isCollection,
                        isRequired,
                        defaultValue,
                        description,
                        element);

                    properties.Add(property);
                    break;
                }

                default:
                {
                    ThrowOnUnknownElement(element);
                    break;
                }
                }
            }
        }