1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package io.earcam.utilitarian.site.search.offline;
20
21 import static java.nio.charset.StandardCharsets.UTF_8;
22
23 import java.net.URI;
24 import java.nio.file.Path;
25 import java.nio.file.Paths;
26 import java.util.HashMap;
27 import java.util.Map;
28
29 import io.earcam.unexceptional.Exceptional;
30 import io.earcam.utilitarian.site.search.offline.ConfigurationModel.Crawling;
31 import io.earcam.utilitarian.site.search.offline.ConfigurationModel.Indexing;
32 import io.earcam.utilitarian.site.search.offline.jsonb.JsonBind;
33
34 public class Search {
35
36 public static void main(String[] args)
37 {
38 System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "trace");
39 if(args.length < 2) {
40 throw new IllegalArgumentException("Expected first arg to be json-output-dir, then at least a further argument of the form 'baseDir@baseUri'");
41 }
42
43 final String jsonDir = args[0];
44 Indexer indexer = null;
45 for(int i = 1; i < args.length; i++) {
46 int index = args[i].indexOf('@');
47 if(index == -1) {
48 throw new IllegalArgumentException("Only arguments expected are 'baseDir@baseUri', recieved '" + args[i] + "' at index " + i);
49 }
50 Path baseDir = Paths.get(args[i].substring(0, index));
51 URI baseUri = Exceptional.uri(args[i].substring(index + 1));
52 Map<String, String> searchReplace = searchReplaceMap(jsonDir, baseDir, baseUri);
53
54 String crawlerJson = Resources.getResource(Resources.DEFAULT_CRAWLER_JSON, UTF_8, searchReplace);
55 Crawling crawler = JsonBind.readJson(crawlerJson, Crawling.class);
56
57 if(indexer == null) {
58 String indexerJson = Resources.getResource(Resources.DEFAULT_INDEXER_JSON, UTF_8, searchReplace);
59 indexer = JsonBind.readJson(indexerJson, Indexing.class).build();
60 }
61 indexer.add(crawler.build().documents());
62 }
63
64 indexer.writeJson();
65 }
66
67
68 private static Map<String, String> searchReplaceMap(String jsonDir, Path baseDir, URI baseUri)
69 {
70 Map<String, String> searchReplace = new HashMap<>();
71 searchReplace.put("${outputCharset}", UTF_8.name());
72 searchReplace.put("${jsonDir}", jsonDir);
73 searchReplace.put("${baseDir}", baseDir.toAbsolutePath().toString());
74 searchReplace.put("${baseUri}", baseUri.toString());
75 return searchReplace;
76 }
77 }