1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.linecorp.centraldogma.server.internal.storage.repository.git;
18
19 import static java.util.Objects.requireNonNull;
20
21 import java.io.IOException;
22 import java.io.StringWriter;
23
24 import com.fasterxml.jackson.core.JsonGenerator;
25 import com.fasterxml.jackson.databind.JsonNode;
26
27 import com.linecorp.centraldogma.common.Author;
28 import com.linecorp.centraldogma.common.Commit;
29 import com.linecorp.centraldogma.common.Markup;
30 import com.linecorp.centraldogma.common.Revision;
31 import com.linecorp.centraldogma.internal.Jackson;
32 import com.linecorp.centraldogma.server.storage.StorageException;
33
34 final class CommitUtil {
35
36 private static final String FIELD_NAME_SUMMARY = "summary";
37 private static final String FIELD_NAME_DETAIL = "detail";
38 private static final String FIELD_NAME_MARKUP = "markup";
39 private static final String FIELD_NAME_REVISION = "revision";
40
41 static String toJsonString(String summary, String detail, Markup markup, Revision nextRevision) {
42 try {
43 final StringWriter stringWriter = new StringWriter();
44 final JsonGenerator jsonGenerator = Jackson.createPrettyGenerator(stringWriter);
45 jsonGenerator.writeStartObject();
46 jsonGenerator.writeStringField(FIELD_NAME_SUMMARY, summary);
47 jsonGenerator.writeStringField(FIELD_NAME_DETAIL, detail);
48 jsonGenerator.writeStringField(FIELD_NAME_MARKUP, markup.nameLowercased());
49 jsonGenerator.writeStringField(FIELD_NAME_REVISION, nextRevision.text());
50 jsonGenerator.writeEndObject();
51 jsonGenerator.close();
52 return stringWriter.toString();
53 } catch (IOException e) {
54 throw new StorageException("failed to generate a JSON string", e);
55 }
56 }
57
58 static Revision extractRevision(String jsonString) {
59 try {
60 final JsonNode jsonNode = Jackson.readTree(jsonString);
61 return new Revision(Jackson.textValue(jsonNode.get(FIELD_NAME_REVISION), ""));
62 } catch (Exception e) {
63 throw new StorageException("failed to extract revision from " + jsonString, e);
64 }
65 }
66
67 static Commit newCommit(Author author, long when, String jsonString) {
68 requireNonNull(author, "author");
69 when = when / 1000L * 1000L;
70 try {
71 final JsonNode jsonNode = Jackson.readTree(jsonString);
72
73 final String summary = Jackson.textValue(jsonNode.get(FIELD_NAME_SUMMARY), "");
74 final String detail = Jackson.textValue(jsonNode.get(FIELD_NAME_DETAIL), "");
75
76 final Markup markup;
77 switch (Jackson.textValue(jsonNode.get(FIELD_NAME_MARKUP), "")) {
78 case "plaintext":
79 markup = Markup.PLAINTEXT;
80 break;
81 case "markdown":
82 markup = Markup.MARKDOWN;
83 break;
84 default:
85 markup = Markup.UNKNOWN;
86 }
87
88 final Revision revision = new Revision(Jackson.textValue(jsonNode.get(FIELD_NAME_REVISION), ""));
89
90 return new Commit(revision, author, when, summary, detail, markup);
91 } catch (Exception e) {
92 throw new StorageException("failed to create a Commit", e);
93 }
94 }
95
96 private CommitUtil() {}
97 }