org.xaloon.wicket.plugin.blog.panel.BlogEntryPanel Maven / Gradle / Ivy
package org.xaloon.wicket.plugin.blog.panel;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.model.Model;
import org.apache.wicket.request.flow.RedirectToUrlException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xaloon.core.api.counting.CounterFacade;
import org.xaloon.core.api.image.model.ImageComposition;
import org.xaloon.core.api.path.DelimiterEnum;
import org.xaloon.core.api.plugin.comment.Commentable;
import org.xaloon.wicket.application.page.LayoutWebPage;
import org.xaloon.wicket.component.html.MetaTagWebContainer;
import org.xaloon.wicket.component.resource.ImageLink;
import org.xaloon.wicket.component.tag.TagCloudPanel;
import org.xaloon.wicket.plugin.blog.BlogEntryParameters;
import org.xaloon.wicket.plugin.blog.BlogPlugin;
import org.xaloon.wicket.plugin.blog.BlogPluginBean;
import org.xaloon.wicket.plugin.blog.model.BlogEntry;
import org.xaloon.wicket.plugin.blog.model.JpaBlogEntryTag;
import org.xaloon.wicket.plugin.blog.page.BlogEntryListByTagPage;
import org.xaloon.wicket.plugin.comment.panel.CommentContainerPanel;
import org.xaloon.wicket.plugin.image.galleria.panel.GalleriaImagesPanel;
import org.xaloon.wicket.util.UrlUtils;
/**
* Required PagePamaters:
*
* BlogEntryPanel.BLOG_AUTHOR - username of author BlogEntryPanel.BLOG_PATH -
* url of encoded title. this would be BlogEntry.getPath();
*
*
*/
public class BlogEntryPanel extends AbstractBlogPluginPanel {
private static final String SEPARATOR = ",";
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory.getLogger(BlogEntryPanel.class);
@Inject
@Named("counterFacade")
private CounterFacade counterFacade;
/**
* Construct.
*
* @param id
* @param params
*/
public BlogEntryPanel(String id, PageParameters params) {
super(id, params);
}
@SuppressWarnings("unchecked")
@Override
protected void onInitialize(BlogPlugin plugin, BlogPluginBean pluginBean) {
String url = UrlUtils.generateFullvalue(getBlogEntryListPageClass());
if (getPageRequestParameters().isEmpty()) {
LOGGER.warn("Page request parameters were not provided!");
throw new RedirectToUrlException(url);
}
BlogEntryParameters parameters = parseBlogEntryParameters();
if (parameters == null) {
LOGGER.warn("Page request parameters were not correct type: " + getPageRequestParameters());
throw new RedirectToUrlException(url);
}
final BlogEntry blogEntry = getBlogFacade().findEntryByPath(parameters.getUsername(), parameters.getPath());
if (blogEntry == null) {
LOGGER.warn("Blog entry was not found!. Username: " + parameters.getUsername() + "\tPath: " + parameters.getPath());
throw new RedirectToUrlException(url);
}
// Increment view count of blog entry
counterFacade.increment(BlogPlugin.VIEW_COUNT_BLOG_ENTRY, blogEntry.getTrackingCategoryId(), blogEntry.getId());
setDefaultModel(new Model(blogEntry));
// Add blog entry title
add(new Label("title", new Model(blogEntry.getTitle())));
// Comment count
Long commentCount = commentDao.count(blogEntry);
add(new Label("comment-count", new Model(commentCount)));
// Add blog entry create date
add(new Label("createDate", new Model(dateService.formatWithLongDate(blogEntry.getCreateDate()))));
// Add image
String imageLinkPath = (blogEntry.getThumbnail() != null) ? blogEntry.getThumbnail().getPath() : null;
List albumImages = albumFacade.getImagesByAlbum(blogEntry);
final boolean imageVisible = !StringUtils.isEmpty(imageLinkPath) && albumImages.isEmpty();
ImageLink imageLink = new ImageLink("image", imageLinkPath);
imageLink.setVisible(imageVisible);
imageLink.setWidth(getPluginBean().getBlogImageWidth());
imageLink.setHeight(getPluginBean().getBlogImageHeight());
imageLink.setTitle(blogEntry.getTitle());
add(imageLink);
// Add category link
BookmarkablePageLink categoryLink = createBlogCategoryLink(blogEntry);
add(categoryLink);
// Add author name
BookmarkablePageLink authorLink = createBlogAuthorLink(blogEntry);
add(authorLink);
// Add content
add(new Label("content", new Model(blogEntry.getContent())).setEscapeModelStrings(false));
// Add comment plugin
add(new CommentContainerPanel("commenting-plugin", new Model(blogEntry), getPageRequestParameters())
.setCommentPageClass(getBlogFacade().getBlogEntrylink(blogEntry).getKey()));
// Add tag cloud panel
TagCloudPanel tagCloudPanel = new TagCloudPanel("tag-cloud-panel", KEY_VALUE_BLOG_TAG) {
private static final long serialVersionUID = 1L;
@Override
protected List findRandomValues(String key, int maxCount) {
return keyValueDao.findRandomValues(key, maxCount);
}
};
add(tagCloudPanel);
List tags = (List) blogEntry.getTags();
tagCloudPanel.setHighlightTagCloudList(tags);
tagCloudPanel.setPageClass(BlogEntryListByTagPage.class);
GalleriaImagesPanel imagesPanel = new GalleriaImagesPanel("blog-entry-images", albumImages);
imagesPanel.setVisible(!albumImages.isEmpty());
add(imagesPanel);
}
@Override
protected void onBeforeRender() {
super.onBeforeRender();
if (getParent() instanceof LayoutWebPage) {
BlogEntry blogEntry = (BlogEntry) getDefaultModelObject();
getParent().addOrReplace(new Label(LayoutWebPage.PAGE_TITLE, new Model(blogEntry.getTitle())));
getParent().addOrReplace(new MetaTagWebContainer(LayoutWebPage.PAGE_DESCRIPTION, blogEntry.getDescription()));
addOrReplaceKeywords(blogEntry);
if (!blogEntry.getTags().isEmpty()) {
Collection keywords = new ArrayList();
keywords.add(StringUtils.join(blogEntry.getTags(), SEPARATOR));
}
}
}
private void addOrReplaceKeywords(BlogEntry blogEntry) {
Collection