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) { }
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; } } } }
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); }
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); }
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; } }
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; }
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); }
internal PropertyDefinitionCollection(ExtendedKeyedCollection <string, PropertyDefinition> collection) : base(collection) { }
internal ReadOnlyKeyedCollection(ExtendedKeyedCollection <TKey, TValue> collection) : base(collection) { _keyedCollection = (ExtendedKeyedCollection <TKey, TValue>)Items; }
internal VariableCollection(ExtendedKeyedCollection <string, Variable> collection) : base(collection) { }
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; } } } }