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.Generator;
import org.atomnuke.atom.model.Id;
import org.atomnuke.atom.model.Icon;
import org.atomnuke.atom.model.Link;
import org.atomnuke.atom.model.Logo;
import org.atomnuke.atom.model.Rights;
import org.atomnuke.atom.model.Source;
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 SourceBuilder extends AtomConstructBuilderImpl<SourceBuilder, Source, SourceImpl> {
private final List<Author> authors;
private final List<Category> categories;
private final List<Link> links;
public SourceBuilder() {
super(SourceBuilder.class, new SourceImpl());
authors = new LinkedList<Author>();
categories = new LinkedList<Category>();
links = new LinkedList<Link>();
setLists();
}
public SourceBuilder(Source copyConstruct) {
super(SourceBuilder.class, new SourceImpl(), copyConstruct);
authors = copyAuthors(copyConstruct.authors());
categories = copyCategories(copyConstruct.categories());
links = copyLinks(copyConstruct.links());
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().setCategories(categories);
construct().setLinks(links);
}
public SourceBuilder addAuthor(Author author) {
authors.add(author);
return this;
}
public SourceBuilder addCategory(Category category) {
categories.add(category);
return this;
}
public SourceBuilder addLink(Link link) {
links.add(link);
return this;
}
public final SourceBuilder setGenerator(Generator generator) {
construct().setGenerator(generator);
return this;
}
public final SourceBuilder setIcon(Icon icon) {
construct().setIcon(icon);
return this;
}
public final SourceBuilder setId(Id id) {
construct().setId(id);
return this;
}
public final SourceBuilder setLogo(Logo logo) {
construct().setLogo(logo);
return this;
}
public final SourceBuilder setRights(Rights rights) {
construct().setRights(rights);
return this;
}
public final SourceBuilder setSubtitle(Subtitle subtitle) {
construct().setSubtitle(subtitle);
return this;
}
public final SourceBuilder setTitle(Title title) {
construct().setTitle(title);
return this;
}
public final SourceBuilder setUpdated(Updated updated) {
construct().setUpdated(updated);
return this;
}
}