46 var ret = new ArrayList<Bot>();
47 var specific = configuration.specific();
48
49 var from = EmailAddress.from(specific.get("name").asString(), specific.get("mail").asString());
50 var ignoredUsers = specific.get("ignored").get("users").stream()
51 .map(JSONValue::asString)
52 .collect(Collectors.toSet());
53 var ignoredComments = specific.get("ignored").get("comments").stream()
54 .map(JSONValue::asString)
55 .map(pattern -> Pattern.compile(pattern, Pattern.MULTILINE | Pattern.DOTALL))
56 .collect(Collectors.toSet());
57 var listArchive = URIBuilder.base(specific.get("server").get("archive").asString()).build();
58 var listSmtp = specific.get("server").get("smtp").asString();
59 var interval = specific.get("server").contains("interval") ? Duration.parse(specific.get("server").get("interval").asString()) : Duration.ofSeconds(1);
60
61 var webrevRepo = configuration.repository(specific.get("webrevs").get("repository").asString());
62 var webrevRef = configuration.repositoryRef(specific.get("webrevs").get("repository").asString());
63 var webrevWeb = specific.get("webrevs").get("web").asString();
64
65 var archiveRepo = configuration.repository(specific.get("archive").asString());
66 var issueTracker = URIBuilder.base(specific.get("issues").asString()).build();
67
68 var allListNames = new HashSet<EmailAddress>();
69 var allRepositories = new HashSet<HostedRepository>();
70
71 var readyLabels = specific.get("ready").get("labels").stream()
72 .map(JSONValue::asString)
73 .collect(Collectors.toSet());
74 var readyComments = specific.get("ready").get("comments").stream()
75 .map(JSONValue::asObject)
76 .collect(Collectors.toMap(obj -> obj.get("user").asString(),
77 obj -> Pattern.compile(obj.get("pattern").asString())));
78
79 for (var repoConfig : specific.get("repositories").asArray()) {
80 var repo = repoConfig.get("repository").asString();
81 var censusRepo = configuration.repository(repoConfig.get("census").asString());
82 var censusRef = configuration.repositoryRef(repoConfig.get("census").asString());
83
84 Map<String, String> headers = repoConfig.contains("headers") ?
85 repoConfig.get("headers").fields().stream()
86 .collect(Collectors.toMap(JSONObject.Field::name, field -> field.value().asString())) :
87 Map.of();
88
89 var list = EmailAddress.parse(repoConfig.get("list").asString());
90 var folder = repoConfig.contains("folder") ? repoConfig.get("folder").asString() : configuration.repositoryName(repo);
91 var bot = new MailingListBridgeBot(from, configuration.repository(repo), archiveRepo,
92 censusRepo, censusRef,
93 list, ignoredUsers, ignoredComments, listArchive, listSmtp,
94 webrevRepo, webrevRef, Path.of(folder),
95 URIBuilder.base(webrevWeb).build(), readyLabels, readyComments,
96 issueTracker, headers, interval);
97 ret.add(bot);
98
99 allListNames.add(list);
100 allRepositories.add(configuration.repository(repo));
101 }
102
103 var mailmanServer = MailingListServerFactory.createMailmanServer(listArchive, listSmtp, Duration.ZERO);
104 var allLists = allListNames.stream()
105 .map(name -> mailmanServer.getList(name.toString()))
106 .collect(Collectors.toSet());
107
108 var bot = new MailingListArchiveReaderBot(from, allLists, allRepositories);
109 ret.add(bot);
110
111 return ret;
|
46 var ret = new ArrayList<Bot>();
47 var specific = configuration.specific();
48
49 var from = EmailAddress.from(specific.get("name").asString(), specific.get("mail").asString());
50 var ignoredUsers = specific.get("ignored").get("users").stream()
51 .map(JSONValue::asString)
52 .collect(Collectors.toSet());
53 var ignoredComments = specific.get("ignored").get("comments").stream()
54 .map(JSONValue::asString)
55 .map(pattern -> Pattern.compile(pattern, Pattern.MULTILINE | Pattern.DOTALL))
56 .collect(Collectors.toSet());
57 var listArchive = URIBuilder.base(specific.get("server").get("archive").asString()).build();
58 var listSmtp = specific.get("server").get("smtp").asString();
59 var interval = specific.get("server").contains("interval") ? Duration.parse(specific.get("server").get("interval").asString()) : Duration.ofSeconds(1);
60
61 var webrevRepo = configuration.repository(specific.get("webrevs").get("repository").asString());
62 var webrevRef = configuration.repositoryRef(specific.get("webrevs").get("repository").asString());
63 var webrevWeb = specific.get("webrevs").get("web").asString();
64
65 var archiveRepo = configuration.repository(specific.get("archive").asString());
66 var archiveRef = configuration.repositoryRef(specific.get("archive").asString());
67 var issueTracker = URIBuilder.base(specific.get("issues").asString()).build();
68
69 var allListNames = new HashSet<EmailAddress>();
70 var allRepositories = new HashSet<HostedRepository>();
71
72 var readyLabels = specific.get("ready").get("labels").stream()
73 .map(JSONValue::asString)
74 .collect(Collectors.toSet());
75 var readyComments = specific.get("ready").get("comments").stream()
76 .map(JSONValue::asObject)
77 .collect(Collectors.toMap(obj -> obj.get("user").asString(),
78 obj -> Pattern.compile(obj.get("pattern").asString())));
79
80 for (var repoConfig : specific.get("repositories").asArray()) {
81 var repo = repoConfig.get("repository").asString();
82 var censusRepo = configuration.repository(repoConfig.get("census").asString());
83 var censusRef = configuration.repositoryRef(repoConfig.get("census").asString());
84
85 Map<String, String> headers = repoConfig.contains("headers") ?
86 repoConfig.get("headers").fields().stream()
87 .collect(Collectors.toMap(JSONObject.Field::name, field -> field.value().asString())) :
88 Map.of();
89
90 var list = EmailAddress.parse(repoConfig.get("list").asString());
91 var folder = repoConfig.contains("folder") ? repoConfig.get("folder").asString() : configuration.repositoryName(repo);
92 var bot = new MailingListBridgeBot(from, configuration.repository(repo), archiveRepo, archiveRef,
93 censusRepo, censusRef,
94 list, ignoredUsers, ignoredComments, listArchive, listSmtp,
95 webrevRepo, webrevRef, Path.of(folder),
96 URIBuilder.base(webrevWeb).build(), readyLabels, readyComments,
97 issueTracker, headers, interval);
98 ret.add(bot);
99
100 allListNames.add(list);
101 allRepositories.add(configuration.repository(repo));
102 }
103
104 var mailmanServer = MailingListServerFactory.createMailmanServer(listArchive, listSmtp, Duration.ZERO);
105 var allLists = allListNames.stream()
106 .map(name -> mailmanServer.getList(name.toString()))
107 .collect(Collectors.toSet());
108
109 var bot = new MailingListArchiveReaderBot(from, allLists, allRepositories);
110 ret.add(bot);
111
112 return ret;
|