コード例 #1
0
        /// <summary>
        /// Parses this command into a processor given the arguments for this switch. Consumes the previous processors and returns how many it consumes.
        /// </summary>
        public override int Parse(List <Processor> previous, out Processor processor)
        {
            if (this.Arguments.Length != 1)
            {
                throw new ArgumentException("Exactly one argument is expected.");
            }
            if (previous.Count < 1)
            {
                throw new ArgumentException("Expected at least one processors before this one.");
            }

            var file = new FileInfo(this.Arguments[0]);

            if (!(previous[previous.Count - 1] is Processors.MultimodalDb.IProcessorMultimodalDbSource))
            {
                throw new Exception("Expected a multimodal db source.");
            }

            var source = (previous[previous.Count - 1] as Processors.MultimodalDb.IProcessorMultimodalDbSource);
            Func <Itinero.Transit.Data.MultimodalDb> getMultimodalDb = () =>
            {
                var multimodalDb = source.GetMultimodalDb();
                using (var stream = File.Open(file.FullName, FileMode.OpenOrCreate, FileAccess.ReadWrite))
                {
                    multimodalDb.Serialize(stream);
                }
                return(multimodalDb);
            };

            processor = new Processors.MultimodalDb.ProcessorMultimodalDbSource(getMultimodalDb);

            return(1);
        }
コード例 #2
0
ファイル: SwitchAddStopLinks.cs プロジェクト: mshakurov/idp
        /// <summary>
        /// Parses this command into a processor given the arguments for this switch. Consumes the previous processors and returns how many it consumes.
        /// </summary>
        public override int Parse(List <Processor> previous, out Processor processor)
        {
            var profileName = string.Empty; // no default profile.
            var distance    = 100;          // default distance 100m.

            for (var i = 0; i < this.Arguments.Length; i++)
            {
                string key, value;
                if (SwitchParsers.SplitKeyValue(this.Arguments[i], out key, out value))
                {
                    switch (key.ToLower())
                    {
                    case "profile":
                        profileName = value;
                        break;

                    case "distance":
                        if (!int.TryParse(value, out distance))
                        {
                            throw new SwitchParserException("--add-links",
                                                            "Invalid parameter value for command --add-links: distance not a number.");
                        }
                        break;

                    default:
                        throw new SwitchParserException("--add-links",
                                                        string.Format("Invalid parameter for command --add-links: {0} not recognized.", key));
                    }
                }
            }

            Profile profile;

            if (!Profile.TryGet(profileName, out profile))
            {
                throw new SwitchParserException("--add-links",
                                                string.Format("Invalid parameter value for command --add-links: profile {0} not found.", profileName));
            }

            if (!(previous[previous.Count - 1] is Processors.MultimodalDb.IProcessorMultimodalDbSource))
            {
                throw new Exception("Expected a multimodal db stream source.");
            }

            var source = (previous[previous.Count - 1] as Processors.MultimodalDb.IProcessorMultimodalDbSource).GetMultimodalDb;
            Func <Itinero.Transit.Data.MultimodalDb> getMultimodalDb = () =>
            {
                var db = source();

                db.AddStopLinksDb(profile, maxDistance: distance);

                return(db);
            };

            processor = new Processors.MultimodalDb.ProcessorMultimodalDbSource(getMultimodalDb);

            return(1);
        }
コード例 #3
0
        /// <summary>
        /// Parses this command into a processor given the arguments for this switch. Consumes the previous processors and returns how many it consumes.
        /// </summary>
        public override int Parse(List <Processor> previous, out Processor processor)
        {
            if (previous == null || previous.Count == 0)
            {
                throw new ArgumentOutOfRangeException("processors");
            }

            // ok combine the transit db and the router db into one multimodal db.
            Func <Itinero.Transit.Data.TransitDb> getTransitDb;
            Func <Itinero.RouterDb> getRouterDb;

            if (previous[previous.Count - 2] is IProcessorTransitDbSource &&
                previous[previous.Count - 1] is IProcessorRouterDbSource)
            {
                getTransitDb = (previous[previous.Count - 2] as IProcessorTransitDbSource).GetTransitDb;
                getRouterDb  = (previous[previous.Count - 1] as IProcessorRouterDbSource).GetRouterDb;
            }
            else if (previous[previous.Count - 1] is IProcessorTransitDbSource &&
                     previous[previous.Count - 2] is IProcessorRouterDbSource)
            {
                getTransitDb = (previous[previous.Count - 1] as IProcessorTransitDbSource).GetTransitDb;
                getRouterDb  = (previous[previous.Count - 2] as IProcessorRouterDbSource).GetRouterDb;
            }
            else
            {
                throw new Exception("Creating a multimodal requires a transit db an a router db source.");
            }
            previous.RemoveAt(previous.Count - 1);
            previous.RemoveAt(previous.Count - 2);

            processor = new Processors.MultimodalDb.ProcessorMultimodalDbSource(() =>
            {
                var transitDb = getTransitDb();
                var routerDb  = getRouterDb();

                return(new Itinero.Transit.Data.MultimodalDb(routerDb, transitDb));
            });

            return(2);
        }