예제 #1
0
        // returns true for successfull parsing
        private static bool ParseConfigFile()
        {
            using (StreamReader reader = new StreamReader(_inputName))
            {
                try
                {
                    Dictionary <string, object> config = (Dictionary <string, object>)fastJSON.JSON.Instance.Parse(reader.ReadToEnd());

                    if (!config.ContainsKey("builditems"))
                    {
                        Console.WriteLine("Invalid Config file: missing key builditems");
                        return(false);
                    }

                    if (config.ContainsKey("assemblies"))
                    {
                        foreach (string assembly in (List <string>)config["assemblies"])
                        {
                            _contentManager.AddAssembly(assembly);
                        }
                    }

                    Dictionary <string, object> globalParameters = new Dictionary <string, object>(config);
                    globalParameters.Remove("builditems");
                    globalParameters.Remove("assemblies");

                    int count = 1;
                    foreach (Dictionary <string, object> item in ((List <object>)config["builditems"]).Cast <Dictionary <string, object> >())
                    {
                        BuildItem buildItem = new BuildItem();
                        if (!item.ContainsKey("source"))
                        {
                            Console.WriteLine("Build Item {0} is missing the source parameter.", count);
                            return(false);
                        }
                        buildItem.SourceFile = (string)item["source"];
                        if (!Path.IsPathRooted(buildItem.SourceFile))
                        {
                            buildItem.SourceFile = Path.Combine(_baseDirectory, buildItem.SourceFile);
                        }

                        if (item.ContainsKey("destination"))
                        {
                            buildItem.DestinationFile = (string)item["destination"];
                        }
                        if (item.ContainsKey("importer"))
                        {
                            List <object> list = (List <object>)item["importer"];
                            if (list.Count == 1)
                            {
                                if (list[0] is string)
                                {
                                    buildItem.Importer = (string)list[0];
                                }
                                else
                                {
                                    buildItem.ImporterParameters = (Dictionary <string, object>)list[0];
                                }
                            }
                            else if (list[0] is string)
                            {
                                buildItem.Importer           = (string)list[0];
                                buildItem.ImporterParameters = (Dictionary <string, object>)list[1];
                            }
                            else
                            {
                                buildItem.Importer           = (string)list[1];
                                buildItem.ImporterParameters = (Dictionary <string, object>)list[0];
                            }
                        }
                        if (item.ContainsKey("processor"))
                        {
                            List <object> list = (List <object>)item["processor"];
                            if (list.Count == 1)
                            {
                                if (list[0] is string)
                                {
                                    buildItem.Processor = (string)list[0];
                                }
                                else
                                {
                                    buildItem.ProcessorParameters = (Dictionary <string, object>)list[0];
                                }
                            }
                            else if (list[0] is string)
                            {
                                buildItem.Processor           = (string)list[0];
                                buildItem.ProcessorParameters = (Dictionary <string, object>)list[1];
                            }
                            else
                            {
                                buildItem.Processor           = (string)list[1];
                                buildItem.ProcessorParameters = (Dictionary <string, object>)list[0];
                            }
                        }
                        if (item.ContainsKey("exporter"))
                        {
                            List <object> list = (List <object>)item["exporter"];
                            if (list.Count == 1)
                            {
                                if (list[0] is string)
                                {
                                    buildItem.Writer = (string)list[0];
                                }
                                else
                                {
                                    buildItem.WriterParameters = (Dictionary <string, object>)list[0];
                                }
                            }
                            else if (list[0] is string)
                            {
                                buildItem.Writer           = (string)list[0];
                                buildItem.WriterParameters = (Dictionary <string, object>)list[1];
                            }
                            else
                            {
                                buildItem.Writer           = (string)list[1];
                                buildItem.WriterParameters = (Dictionary <string, object>)list[0];
                            }
                        }

                        Dictionary <string, object> parameters = new Dictionary <string, object>(item);
                        parameters.Remove("importer");
                        parameters.Remove("processor");
                        parameters.Remove("exporter");
                        parameters.Remove("source");
                        parameters.Remove("destination");

                        (new[] { globalParameters, parameters }).SelectMany(x => x).ToList().ForEach(x => buildItem.GeneralParameters[x.Key] = x.Value);

                        _buildItems.Add(buildItem);
                        count++;
                    }
                }
                catch (FileLoadException)
                {
                    Console.WriteLine("Invalid config file.");
                    return(false);
                }
            }

            return(true);
        }