package org.jabref.logic.layout.format;
import org.jabref.logic.layout.LayoutFormatter;
import org.jabref.model.entry.Author;
import org.jabref.model.entry.AuthorList;
import org.jabref.model.entry.FieldName;
/**
* Create DocBook authors formatter.
*/
public class CreateDocBookAuthors implements LayoutFormatter {
private static final XMLChars XML_CHARS = new XMLChars();
@Override
public String format(String fieldText) {
StringBuilder sb = new StringBuilder(100);
AuthorList al = AuthorList.parse(fieldText);
addBody(sb, al, FieldName.AUTHOR);
return sb.toString();
}
public void addBody(StringBuilder sb, AuthorList al, String tagName) {
for (int i = 0; i < al.getNumberOfAuthors(); i++) {
sb.append('<').append(tagName).append('>');
Author a = al.getAuthor(i);
a.getFirst().filter(first -> !first.isEmpty()).ifPresent(first -> sb.append("<firstname>")
.append(CreateDocBookAuthors.XML_CHARS.format(first)).append("</firstname>"));
a.getVon().filter(von -> !von.isEmpty()).ifPresent(von -> sb.append("<othername>")
.append(CreateDocBookAuthors.XML_CHARS.format(von)).append("</othername>"));
a.getLast().filter(last -> !last.isEmpty()).ifPresent(last -> {
sb.append("<surname>").append(CreateDocBookAuthors.XML_CHARS.format(last));
a.getJr().filter(jr -> !jr.isEmpty())
.ifPresent(jr -> sb.append(' ').append(CreateDocBookAuthors.XML_CHARS.format(jr)));
sb.append("</surname>");
});
if (i < (al.getNumberOfAuthors() - 1)) {
sb.append("</").append(tagName).append(">\n ");
} else {
sb.append("</").append(tagName).append('>');
}
}
}
}