Esempio n. 1
0
        public override bool Read()
        {
            switch (this.currentState)
            {
            case ActivityTemplateFactoryBuilderReaderStates.InitialState:
                bool hasMoreNodes = this.underlyingReader.Read();
                if (this.underlyingReader.NodeType == XamlNodeType.StartObject && IsActivityTemplateFactoryType(this.underlyingReader.Type))
                {
                    Type underlyingType = this.underlyingReader.Type.UnderlyingType;
                    Type targetType     = underlyingType.IsGenericType ? underlyingType.GetGenericArguments()[0] : null;

                    this.currentState = ActivityTemplateFactoryBuilderReaderStates.ReadingFromBufferState;
                    this.queuedNodes  = new XamlNodeQueue(this.schemaContext);
                    this.queuedNodes.Writer.WriteStartObject(this.ActivityTemplateFactoryBuilderType, (IXamlLineInfo)this.underlyingReader);

                    string className;

                    while (this.underlyingReader.Read())
                    {
                        if (this.underlyingReader.NodeType == XamlNodeType.StartMember && this.underlyingReader.Member == XamlLanguage.Class)
                        {
                            this.underlyingReader.Read();
                            className = (string)this.underlyingReader.Value;
                            this.underlyingReader.Read();
                            this.queuedNodes.Writer.WriteStartMember(this.ActivityTemplateFactoryBuilderNameMember, (IXamlLineInfo)this.underlyingReader);
                            this.queuedNodes.Writer.WriteValue(className, (IXamlLineInfo)this.underlyingReader);
                            this.queuedNodes.Writer.WriteEndMember((IXamlLineInfo)this.underlyingReader);
                            if (targetType != null)
                            {
                                this.queuedNodes.Writer.WriteStartMember(this.ActivityTemplateFactoryBuilderTargetTypeMember, (IXamlLineInfo)this.underlyingReader);
                                object targetTypeString = targetType;
                                this.queuedNodes.Writer.WriteValue(targetTypeString);
                                this.queuedNodes.Writer.WriteEndMember();
                            }
                        }
                        else if (this.underlyingReader.NodeType == XamlNodeType.StartMember && this.IsActivityTemplateFactoryImplementationMember(this.underlyingReader.Member))
                        {
                            this.queuedNodes.Writer.WriteStartMember(this.ActivityTemplateFactoryBuilderImplementationMember, (IXamlLineInfo)this.underlyingReader);
                            return(true);
                        }
                    }
                }

                return(hasMoreNodes);

            case ActivityTemplateFactoryBuilderReaderStates.ReadingFromBufferState:
                if (this.queuedNodes.Reader.Read())
                {
                    return(true);
                }
                else
                {
                    this.currentState = ActivityTemplateFactoryBuilderReaderStates.BypassState;
                    this.queuedNodes  = null;
                    return(this.underlyingReader.Read());
                }

            default:
                SharedFx.Assert(this.currentState == ActivityTemplateFactoryBuilderReaderStates.BypassState, "This is the only remaining ActivityTemplateFactoryBuilderReaderStates.");
                return(this.underlyingReader.Read());
            }
        }
        public override bool Read()
        {
            switch (this.currentState)
            {
                case ActivityTemplateFactoryBuilderReaderStates.InitialState:
                    bool hasMoreNodes = this.underlyingReader.Read();
                    if (this.underlyingReader.NodeType == XamlNodeType.StartObject && IsActivityTemplateFactoryType(this.underlyingReader.Type))
                    {
                        Type underlyingType = this.underlyingReader.Type.UnderlyingType;
                        Type targetType = underlyingType.IsGenericType ? underlyingType.GetGenericArguments()[0] : null;

                        this.currentState = ActivityTemplateFactoryBuilderReaderStates.ReadingFromBufferState;
                        this.queuedNodes = new XamlNodeQueue(this.schemaContext);
                        this.queuedNodes.Writer.WriteStartObject(this.ActivityTemplateFactoryBuilderType, (IXamlLineInfo)this.underlyingReader);

                        string className;

                        while (this.underlyingReader.Read())
                        {
                            if (this.underlyingReader.NodeType == XamlNodeType.StartMember && this.underlyingReader.Member == XamlLanguage.Class)
                            {
                                this.underlyingReader.Read();
                                className = (string)this.underlyingReader.Value;
                                this.underlyingReader.Read();
                                this.queuedNodes.Writer.WriteStartMember(this.ActivityTemplateFactoryBuilderNameMember, (IXamlLineInfo)this.underlyingReader);
                                this.queuedNodes.Writer.WriteValue(className, (IXamlLineInfo)this.underlyingReader);
                                this.queuedNodes.Writer.WriteEndMember((IXamlLineInfo)this.underlyingReader);
                                if (targetType != null)
                                {
                                    this.queuedNodes.Writer.WriteStartMember(this.ActivityTemplateFactoryBuilderTargetTypeMember, (IXamlLineInfo)this.underlyingReader);
                                    object targetTypeString = targetType;
                                    this.queuedNodes.Writer.WriteValue(targetTypeString);
                                    this.queuedNodes.Writer.WriteEndMember();
                                }
                            }
                            else if (this.underlyingReader.NodeType == XamlNodeType.StartMember && this.IsActivityTemplateFactoryImplementationMember(this.underlyingReader.Member))
                            {
                                this.queuedNodes.Writer.WriteStartMember(this.ActivityTemplateFactoryBuilderImplementationMember, (IXamlLineInfo)this.underlyingReader);
                                return true;
                            }
                        }
                    }

                    return hasMoreNodes;

                case ActivityTemplateFactoryBuilderReaderStates.ReadingFromBufferState:
                    if (this.queuedNodes.Reader.Read())
                    {
                        return true;
                    }
                    else
                    {
                        this.currentState = ActivityTemplateFactoryBuilderReaderStates.BypassState;
                        this.queuedNodes = null;
                        return this.underlyingReader.Read();
                    }

                default:
                    SharedFx.Assert(this.currentState == ActivityTemplateFactoryBuilderReaderStates.BypassState, "This is the only remaining ActivityTemplateFactoryBuilderReaderStates.");
                    return this.underlyingReader.Read();
            }
        }