package cms.controller;
import cms.model.model.NewsEntity;
import cms.model.model.PageEntity;
import cms.model.model.TemplateEntity;
import cms.model.model.dto.NewsDTO;
import cms.model.model.dto.PageDTO;
import cms.model.model.dto.TemplateDTO;
import cms.model.service.NewsService;
import cms.model.service.PageService;
import cms.model.service.TemplateService;
import cms.util.GuiceUtil;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.controller.validator.Errors;
public class IndexController extends Controller {
private PageService pageService = GuiceUtil.getService(PageService.class);
private TemplateService templateService = GuiceUtil.getService(TemplateService.class);
private NewsService newsService = GuiceUtil.getService(NewsService.class);
public IndexController() {
}
public IndexController(ServletContext servletContext, HttpServletRequest request,
HttpServletResponse response, String basePath, Errors errors) {
this.servletContext = servletContext;
this.request = request;
this.response = response;
this.basePath = basePath;
this.errors = errors;
}
@Override
public Navigation run() throws Exception {
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
if (basePath.equals("/")) {
basePath = "index";
}
if (basePath.endsWith(".html")) {
basePath = basePath.substring(0, basePath.length() - 5);
}
PageEntity pageEntity = pageService.getPageByUrl(basePath);
PageDTO page = new PageDTO(pageEntity);
if (pageEntity == null || !page.getVisible()) {
NotFoundController notFoundController = new NotFoundController(
servletContext, request, response, basePath, errors);
notFoundController.run();
return null;
}
String template = page.getTemplateContent();
template = template.replace("{title}", page.getTitle());
template = template.replace("{content}", page.getContent());
if (template.contains("{tags}")) {
StringBuilder tags = new StringBuilder();
for (String tag : page.getTags()) {
tags.append(tag).append(" ");
}
template = template.replace("{tags}", tags);
}
if (template.contains("{pages}")) {
String pages = getPages();
template = template.replace("{pages}", pages);
}
if (template.contains("{news}")) {
String news = getNews("homepage");
template = template.replace("{news}", news);
}
if (template.contains("{newsAll}")) {
String newsAll = getNews("all");
template = template.replace("{newsAll}", newsAll);
}
String[] tagsArray = page.getTags();
StringBuilder tags = new StringBuilder();
for (String tag : tagsArray) {
tags.append(tag).append(" ");
}
template = template.replace("{tags}", tags);
out.println(template);
return null;
}
public String getPages() {
TemplateEntity pagesTemplateEntity = templateService.getTemplateByName("pages");
TemplateEntity pageItemTemplateEntity = templateService.getTemplateByName("pageItem");
if (pagesTemplateEntity == null || pageItemTemplateEntity == null) {
return "";
}
TemplateDTO pagesTemplateDTO = new TemplateDTO(pagesTemplateEntity);
String pagesTemplate = pagesTemplateDTO.getContent();
TemplateDTO pageItemTemplateDTO = new TemplateDTO(pageItemTemplateEntity);
String pageItemTemplate = pageItemTemplateDTO.getContent();
List<PageEntity> pagesList = pageService.getVisiblePages();
StringBuilder pages = new StringBuilder();
for (PageEntity pageEntity : pagesList) {
PageDTO pageDTO = new PageDTO(pageEntity);
String pageItem = pageItemTemplate;
pageItem = pageItem.replace("{url}", pageDTO.getUrl());
pageItem = pageItem.replace("{title}", pageDTO.getTitle());
pages.append(pageItem);
}
pagesTemplate = pagesTemplate.replace("{pageItem}", pages.toString());
return pagesTemplate;
}
public String getNews(String where) {
TemplateEntity newsTemplateEntity = templateService.getTemplateByName("news");
TemplateEntity newsItemTemplateEntity = templateService.getTemplateByName("newsItem");
if (newsTemplateEntity == null || newsItemTemplateEntity == null) {
return "";
}
TemplateDTO newsTemplateDTO = new TemplateDTO(newsTemplateEntity);
String newsTemplate = newsTemplateDTO.getContent();
TemplateDTO newsItemTemplateDTO = new TemplateDTO(newsItemTemplateEntity);
String newsItemTemplate = newsItemTemplateDTO.getContent();
List<NewsEntity> newsList = null;
if (where.equalsIgnoreCase("all")) {
newsList = newsService.getAllVisibleNews();
} else {
newsList = newsService.getHomepageNews();
}
StringBuilder news = new StringBuilder();
for (NewsEntity newsEntity : newsList) {
NewsDTO newsDTO = new NewsDTO(newsEntity);
String newsItem = newsItemTemplate;
newsItem = newsItem.replace("{title}", newsDTO.getTitle());
newsItem = newsItem.replace("{text}", newsDTO.getText());
newsItem = newsItem.replace("{created}", newsDTO.getCreated());
news.append(newsItem);
}
newsTemplate = newsTemplate.replace("{newsItem}", news.toString());
return newsTemplate;
}
}