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.Contributor;
import org.atomnuke.atom.model.Entry;
import org.atomnuke.atom.model.Feed;
import org.atomnuke.atom.model.Generator;
import org.atomnuke.atom.model.Icon;
import org.atomnuke.atom.model.Id;
import org.atomnuke.atom.model.Link;
import org.atomnuke.atom.model.Logo;
import org.atomnuke.atom.model.Rights;
import org.atomnuke.atom.model.Subtitle;
import org.atomnuke.atom.model.Title;
import org.atomnuke.atom.model.Updated;
import static org.atomnuke.util.CollectionUtil.*;
/**
*
* @author zinic
*/
public class FeedBuilder extends AtomConstructBuilderImpl<FeedBuilder, Feed, FeedImpl> {
private List<Author> authors;
private List<Contributor> contributors;
private List<Category> categories;
private List<Link> links;
private List<Entry> entries;
public FeedBuilder() {
super(FeedBuilder.class, new FeedImpl());
authors = new LinkedList<Author>();
contributors = new LinkedList<Contributor>();
categories = new LinkedList<Category>();
links = new LinkedList<Link>();
entries = new LinkedList<Entry>();
setLists();
}
public FeedBuilder(Feed copyConstruct) {
super(FeedBuilder.class, new FeedImpl(), copyConstruct);
authors = copyAuthors(copyConstruct.authors());
contributors = copyContributors(copyConstruct.contributors());
categories = copyCategories(copyConstruct.categories());
links = copyLinks(copyConstruct.links());
entries = copyEntries(copyConstruct.entries());
if (copyConstruct != null) {
if (copyConstruct.generator() != null) {
setGenerator(new GeneratorBuilder(copyConstruct.generator()).build());
}
if (copyConstruct.icon() != null) {
setIcon(new IconBuilder(copyConstruct.icon()).build());
}
if (copyConstruct.id() != null) {
setId(new IdBuilder(copyConstruct.id()).build());
}
if (copyConstruct.logo() != null) {
setLogo(new LogoBuilder(copyConstruct.logo()).build());
}
if (copyConstruct.rights() != null) {
setRights(new RightsBuilder(copyConstruct.rights()).build());
}
if (copyConstruct.subtitle() != null) {
setSubtitle(new SubtitleBuilder(copyConstruct.subtitle()).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);
construct().setEntries(entries);
}
public final FeedBuilder addAuthor(Author author) {
authors.add(author);
return this;
}
public final FeedBuilder addContributor(Contributor contributor) {
contributors.add(contributor);
return this;
}
public final FeedBuilder addCategory(Category category) {
categories.add(category);
return this;
}
public final FeedBuilder addLink(Link link) {
links.add(link);
return this;
}
public final FeedBuilder addEntry(Entry entry) {
entries.add(entry);
return this;
}
public final FeedBuilder setGenerator(Generator generator) {
construct().setGenerator(generator);
return this;
}
public final FeedBuilder setIcon(Icon icon) {
construct().setIcon(icon);
return this;
}
public final FeedBuilder setId(Id id) {
construct().setId(id);
return this;
}
public final FeedBuilder setLogo(Logo logo) {
construct().setLogo(logo);
return this;
}
public final FeedBuilder setRights(Rights rights) {
construct().setRights(rights);
return this;
}
public final FeedBuilder setSubtitle(Subtitle subtitle) {
construct().setSubtitle(subtitle);
return this;
}
public final FeedBuilder setTitle(Title title) {
construct().setTitle(title);
return this;
}
public final FeedBuilder setUpdated(Updated updated) {
construct().setUpdated(updated);
return this;
}
}