internal static BotConfiguration Build(
            string configFile,
            string restApiServerUrl,
            string webSocketServerUrl)
        {
            string  fileContent = System.IO.File.ReadAllText(configFile);
            JObject config      = JObject.Parse(fileContent);

            if (config == null)
            {
                return(null);
            }

            string repository = Field.GetString(config, "repository");

            string branchPrefix = Field.GetString(config, "branchPrefix");

            string trunkBranch = Field.GetString(config, "trunkBranch");

            string plasticBotUserToken = Field.GetString(config, "plasticBotUserToken");

            StatusProperty statusAttrConfig = StatusProperty.BuildFromConfig(config["plasticStatusAttributeGroup"]);

            IssueTracker issueTrackerConfig = IssueTracker.BuildFromConfig(config["issuesGroup"]);

            Notifier emailConfig = Notifier.BuildFromConfig(config["notifierEmailGroup"]);

            return(new BotConfiguration(
                       restApiServerUrl,
                       webSocketServerUrl,
                       repository,
                       trunkBranch,
                       branchPrefix,
                       plasticBotUserToken,
                       statusAttrConfig,
                       issueTrackerConfig,
                       emailConfig));
        }