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