package sagan.search.support;
import sagan.search.types.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class SearchEntryBuilder {
private String title = "A random title";
private String rawContent = "A random post content";
private String summary = "A random post summary";
private Date publishAt = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000);
private String path = "/some/path";
private List<String> facetPaths = new ArrayList<>();
private boolean current = true;
private String version;
private String projectId;
private String className;
private String packageName;
private SearchEntryBuilder() {
}
public static SearchEntryBuilder entry() {
return new SearchEntryBuilder();
}
public SearchEntryBuilder title(String title) {
this.title = title;
return this;
}
public SearchEntryBuilder rawContent(String rawContent) {
this.rawContent = rawContent;
return this;
}
public SearchEntryBuilder summary(String summary) {
this.summary = summary;
return this;
}
public SearchEntryBuilder publishAt(Date date) {
publishAt = date;
return this;
}
public SearchEntryBuilder publishAt(String dateString) throws ParseException {
publishAt = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(dateString);
return this;
}
public SearchEntryBuilder path(String path) {
this.path = path;
return this;
}
public SearchEntryBuilder facetPath(String facetPath) {
facetPaths.add(facetPath);
return this;
}
public SearchEntryBuilder notCurrent() {
current = false;
return this;
}
public SearchEntryBuilder version(String version) {
this.version = version;
return this;
}
public SearchEntryBuilder projectId(String projectId) {
this.projectId = projectId;
return this;
}
public SearchEntryBuilder className(String className) {
this.className = className;
return this;
}
public SearchEntryBuilder packageName(String packageName) {
this.packageName = packageName;
return this;
}
public BlogPost blog() {
BlogPost blogPost = build(new BlogPost());
blogPost.setPublishAt(this.publishAt);
return blogPost;
}
public ApiDoc api() {
ApiDoc api = build(new ApiDoc());
api.setClassName(this.className);
api.setPackageName(this.packageName);
api.setCurrent(this.current);
api.setVersion(this.version);
api.setProjectId(this.projectId);
return api;
}
public GuideDoc guide() {
GuideDoc guide = build(new GuideDoc());
return guide;
}
public ReferenceDoc reference() {
ReferenceDoc ref = build(new ReferenceDoc());
ref.setCurrent(this.current);
ref.setVersion(this.version);
ref.setProjectId(this.projectId);
return ref;
}
public SitePage sitePage() {
SitePage page = build(new SitePage());
return page;
}
public ProjectPage projectPage() {
ProjectPage page = build(new ProjectPage());
return page;
}
private <R extends SearchEntry> R build(R searchEntry) {
searchEntry.setTitle(title);
searchEntry.setRawContent(rawContent);
searchEntry.setSummary(summary);
searchEntry.setPath(path);
searchEntry.setFacetPaths(facetPaths);
return searchEntry;
}
}