示例#1
0
        private RawStatement BuildRaw()
        {
            RawStatement   _statement          = null;
            MemberInfo     currentMember       = null;
            RawTransaction _currentTransaction = null;

            foreach (var token in Parser.Parse(_fileText))
            {
                if (token.IsElement)
                {
                    var result = GetPropertyInfo(token.Content);
                    if (result != null)
                    {
                        switch (result.Type)
                        {
                        case NodeType.StatementOpen:
                            _statement = new RawStatement();
                            break;

                        case NodeType.StatementClose:
                            return(_statement);

                            break;

                        case NodeType.TransactionOpen:
                            _currentTransaction = new RawTransaction();
                            break;

                        case NodeType.TransactionClose:
                            _statement.Transactions.Add(_currentTransaction);
                            _currentTransaction = null;
                            break;

                        case NodeType.StatementProp:
                            if (_statement == null)
                            {
                                _statement = new RawStatement();
                            }
                            currentMember = result.Member;
                            break;

                        case NodeType.TransactionProp:
                            currentMember = result.Member;
                            break;

                        case NodeType.LedgerBalanceOpen:
                            _ledgerBalance = new RawLedgerBalance();
                            break;

                        case NodeType.LedgerBalanceClose:
                            _statement.LedgerBalance.Amount = _ledgerBalance.Amount;
                            _statement.LedgerBalance.AsOf   = _ledgerBalance.AsOf;
                            break;

                        case NodeType.LedgerBalanceProp:
                            if (_ledgerBalance == null)
                            {
                                _ledgerBalance = new RawLedgerBalance();
                            }
                            currentMember = result.Member;
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        currentMember = null;
                    }
                }
                else
                {
                    if (currentMember != null && currentMember is PropertyInfo)
                    {
                        var property = (PropertyInfo)currentMember;
                        switch (property.DeclaringType.Name)
                        {
                        case "RawStatement":
                            property.SetValue(_statement, ConvertQfxType(token.Content, property.PropertyType));
                            break;

                        case "RawTransaction":
                            property.SetValue(_currentTransaction, ConvertQfxType(token.Content, property.PropertyType));
                            break;

                        case "RawLedgerBalance":
                            property.SetValue(_ledgerBalance, ConvertQfxType(token.Content, property.PropertyType));
                            break;

                        default:
                            break;
                        }
                    }
                }
            }

            return(_statement);
        }
示例#2
0
        private RawStatement BuildRaw()
        {
            RawStatement   _statement          = null;
            MemberInfo     currentMember       = null;
            RawTransaction _currentTransaction = null;

            foreach (var token in Parser.Parse(_fileText))
            {
                if (token.IsElement)
                {
                    var result = GetPropertyInfo(token.Content);
                    if (result != null)
                    {
                        switch (result.Type)
                        {
                        case NodeType.StatementOpen:
                            _statement = new RawStatement();
                            break;

                        case NodeType.StatementClose:
                            return(_statement);

                        case NodeType.TransactionOpen:
                            _currentTransaction = new RawTransaction();
                            break;

                        case NodeType.TransactionClose:
                            _statement.Transactions.Add(_currentTransaction);
                            _currentTransaction = null;
                            break;

                        case NodeType.StatementProp:
                        case NodeType.TransactionProp:
                            currentMember = result.Member;
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        currentMember = null;
                    }
                }
                else
                {
                    if (currentMember != null && currentMember is PropertyInfo)
                    {
                        var property = (PropertyInfo)currentMember;
                        switch (property.DeclaringType.Name)
                        {
                        case "RawStatement":
                            property.SetValue(_statement, token.Content);
                            break;

                        case "RawTransaction":
                            property.SetValue(_currentTransaction, token.Content);
                            break;

                        default:
                            break;
                        }
                    }
                }
            }

            return(_statement);
        }