예제 #1
0
        public AttributeState(IState parentState, IResultAttributeBuilder attributeBuilder, IActiveState activeState,
                              Creator <IResultAttributeBuilder> createAttributeBuilder,
                              Creator <IAttributeState, IState, IResultAttributeBuilder> createChildAttributeState)

            : base(parentState, attributeBuilder, activeState, createAttributeBuilder, createChildAttributeState)
        {
            _attributeBuilder = attributeBuilder;
        }
        public void Parse <TReader>(IAttributeParser <TReader> parser, TReader reader) where TReader : IReader
        {
            IResultAttributeBuilder attributeBuilder = _createAttributeBuilder();
            IAttributeState         attributeState   = _createAttributeState(this, attributeBuilder);
            IState previousState = _activeState.ChangeState(attributeState);

            try
            {
                parser.Parse(reader, attributeState);
            }
            finally
            {
                _activeState.ChangeState(previousState);
            }

            // TODO: 'Name' must be set on 'attributeBuilder' !!

            if (!attributeState.Valid)
            {
                attributeBuilder.Invalidate();
            }

            _resultBuilder.AddAttribute(attributeBuilder.Build());
        }