package sk.stuba.fiit.perconik.activity.serializers.git;
import java.util.List;
import java.util.Set;
import org.eclipse.jgit.revwalk.FooterLine;
import org.eclipse.jgit.revwalk.RevCommit;
import sk.stuba.fiit.perconik.activity.serializers.AbstractConfigurableMultiSerializer;
import sk.stuba.fiit.perconik.data.content.Content;
import sk.stuba.fiit.perconik.data.content.StructuredContent;
import static com.google.common.collect.Lists.newArrayListWithExpectedSize;
import static sk.stuba.fiit.perconik.activity.serializers.Serializations.newStructuredContent;
import static sk.stuba.fiit.perconik.data.content.StructuredContents.key;
public final class CommitSerializer extends AbstractConfigurableMultiSerializer<RevCommit> {
public CommitSerializer(final Option ... options) {
super(options);
}
public CommitSerializer(final Iterable<Option> options) {
super(options);
}
static void putCommit(final StructuredContent content, final RevCommit commit, final Set<Option> options) {
content.put(key("timestamp"), commit.getCommitTime());
content.put(key("name"), commit.getName());
IdentitySerializer serializer = new IdentitySerializer(options);
content.put(key("author"), serializer.serialize(commit.getAuthorIdent()));
content.put(key("committer"), serializer.serialize(commit.getCommitterIdent()));
content.put(key("message", "short"), commit.getShortMessage());
content.put(key("message", "full"), commit.getFullMessage());
content.put(key("encoding"), commit.getEncoding().toString());
List<Content> lines = newArrayListWithExpectedSize(8);
for (FooterLine line: commit.getFooterLines()) {
StructuredContent lineContent = newStructuredContent();
lineContent.put(key("key"), line.getKey());
lineContent.put(key("value"), line.getValue());
lineContent.put(key("email"), line.getEmailAddress());
lines.add(lineContent);
}
content.put(key("footer"), lines);
}
@Override
protected void put(final StructuredContent content, final RevCommit commit) {
putCommit(content, commit, this.options);
}
}