Пример #1
0
 /// <summary>
 /// </summary>
 /// <param name="fileSource">defaults to an <see cref="FtpTzDbFileSource" /></param>
 /// <param name="database">defaults to an <see cref="InMemoryExtractorDatabase" /></param>
 /// <param name="parser">defaults to an <see cref="TzDbParser" /></param>
 public TzDbExtractor(ITzDbFileSource fileSource = null, IExtractorDatabase database = null,
                      ITzDbParser parser         = null)
 {
     _fileSource        = fileSource ?? new FtpTzDbFileSource();
     _extractorDatabase = database ?? new InMemoryExtractorDatabase();
     _parser            = parser ?? new TzDbParser();
 }
Пример #2
0
        /// <summary>
        ///     Parses the <paramref name="fileInfo" /> and adds parsed types to the
        ///     <paramref name="extractorDatabase" />
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <param name="extractorDatabase"></param>
        public void Parse(IFileInfo fileInfo, IExtractorDatabase extractorDatabase)
        {
            Queue <Token> unProcessedTokens = _tokenizer.Tokenize(fileInfo);

            Token beginFileToken = unProcessedTokens.Dequeue();

            // guard first token received is start of file token
            if (beginFileToken.TokenType != TokenType.BeginFile)
            {
                string msg = String.Format("received unexpected token type:{0} when token type should have been {1}",
                                           beginFileToken.TokenType, TokenType.BeginFile);
                throw new Exception(msg);
            }

            while (unProcessedTokens.Any())
            {
                Token firstToken = unProcessedTokens.Dequeue();

                // handle end of file
                if (firstToken.TokenType == TokenType.EndFile)
                {
                    break;
                }

                // guard first token received is start of line token
                if (firstToken.TokenType != TokenType.BeginLine)
                {
                    string msg = String.Format(
                        "received unexpected token type:{0} when token type should have been {1}", firstToken.TokenType,
                        TokenType.BeginLine);
                    throw new Exception(msg);
                }

                TzDbLink?tzDbLink;
                if (LinkExpression.TryParse(unProcessedTokens, out tzDbLink))
                {
                    extractorDatabase.Links.Add(tzDbLink.Value);
                    continue;
                }

                TzDbZoneDescription tzDbZoneDescription;
                if (ZoneDescriptionExpression.TryParse(unProcessedTokens, out tzDbZoneDescription))
                {
                    extractorDatabase.ZoneDescriptions.Add(tzDbZoneDescription);
                    continue;
                }

                TzDbZoneDefinition tzDbZoneDefinition;
                if (ZoneDefinitionExpression.TryParse(unProcessedTokens, out tzDbZoneDefinition))
                {
                    extractorDatabase.ZoneDefinitions.Add(tzDbZoneDefinition);
                    continue;
                }

                TzDbRule?tzDbRule;
                if (RuleExpression.TryParse(unProcessedTokens, out tzDbRule))
                {
                    extractorDatabase.Rules.Add(tzDbRule.Value);
                    continue;
                }

                string unsupportedTokenMsg = String.Format("received unsupported tokens on line: {0} of file: {1}",
                                                           firstToken.Value, fileInfo.Name);
                throw new Exception(unsupportedTokenMsg);
            }
        }
Пример #3
0
 public ExtractorDatabaseReader(IExtractorDatabase extractorDatabase)
 {
     _extractorDatabase = extractorDatabase;
 }