package org.atomnuke.atom.model.builder;
import java.util.LinkedList;
import java.util.List;
import org.atomnuke.atom.model.Author;
import org.atomnuke.atom.model.Category;
import org.atomnuke.atom.model.Content;
import org.atomnuke.atom.model.Contributor;
import org.atomnuke.atom.model.Entry;
import org.atomnuke.atom.model.Id;
import org.atomnuke.atom.model.Link;
import org.atomnuke.atom.model.Published;
import org.atomnuke.atom.model.Rights;
import org.atomnuke.atom.model.Source;
import org.atomnuke.atom.model.Summary;
import org.atomnuke.atom.model.Title;
import org.atomnuke.atom.model.Updated;
import static org.atomnuke.util.CollectionUtil.*;
/**
*
* @author zinic
*/
public class EntryBuilder extends AtomConstructBuilderImpl<EntryBuilder, Entry, EntryImpl> {
private List<Author> authors;
private List<Contributor> contributors;
private List<Category> categories;
private List<Link> links;
public EntryBuilder() {
super(EntryBuilder.class, new EntryImpl());
authors = new LinkedList<Author>();
contributors = new LinkedList<Contributor>();
categories = new LinkedList<Category>();
links = new LinkedList<Link>();
setLists();
}
public EntryBuilder(Entry copyConstruct) {
super(EntryBuilder.class, new EntryImpl(), copyConstruct);
authors = copyAuthors(copyConstruct.authors());
contributors = copyContributors(copyConstruct.contributors());
categories = copyCategories(copyConstruct.categories());
links = copyLinks(copyConstruct.links());
if (copyConstruct.content() != null) {
setContent(new ContentBuilder(copyConstruct.content()).build());
}
if (copyConstruct.id() != null) {
setId(new IdBuilder(copyConstruct.id()).build());
}
if (copyConstruct.published() != null) {
setPublished(new PublishedBuilder(copyConstruct.published()).build());
}
if (copyConstruct.rights() != null) {
setRights(new RightsBuilder(copyConstruct.rights()).build());
}
if (copyConstruct.source() != null) {
setSource(new SourceBuilder(copyConstruct.source()).build());
}
if (copyConstruct.summary() != null) {
setSummary(new SummaryBuilder(copyConstruct.summary()).build());
}
if (copyConstruct.title() != null) {
setTitle(new TitleBuilder(copyConstruct.title()).build());
}
if (copyConstruct.updated() != null) {
setUpdated(new UpdatedBuilder(copyConstruct.updated()).build());
}
setLists();
}
private void setLists() {
construct().setAuthors(authors);
construct().setContributors(contributors);
construct().setCategories(categories);
construct().setLinks(links);
}
public final EntryBuilder addAuthor(Author author) {
authors.add(author);
return this;
}
public final EntryBuilder addContributor(Contributor contributor) {
contributors.add(contributor);
return this;
}
public final EntryBuilder addCategory(Category category) {
categories.add(category);
return this;
}
public final EntryBuilder addLink(Link link) {
links.add(link);
return this;
}
public final EntryBuilder setId(Id id) {
construct().setId(id);
return this;
}
public final EntryBuilder setRights(Rights rights) {
construct().setRights(rights);
return this;
}
public final EntryBuilder setTitle(Title title) {
construct().setTitle(title);
return this;
}
public final EntryBuilder setUpdated(Updated updated) {
construct().setUpdated(updated);
return this;
}
public final EntryBuilder setContent(Content content) {
construct().setContent(content);
return this;
}
public final EntryBuilder setSummary(Summary summary) {
construct().setSummary(summary);
return this;
}
public final EntryBuilder setPublished(Published published) {
construct().setPublished(published);
return this;
}
public final EntryBuilder setSource(Source source) {
construct().setSource(source);
return this;
}
}