package de.flower.rmt.ui.page.blog;
import de.flower.rmt.model.db.entity.BArticle;
import de.flower.rmt.service.IBlogManager;
import de.flower.rmt.ui.model.BArticleModel;
import de.flower.rmt.ui.page.Pages;
import de.flower.rmt.ui.page.base.AbstractCommonBasePage;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* displays a blog article and related comments.
*
* @author flowerrrr
*/
public class ArticlePage extends AbstractCommonBasePage {
public final static String PARAM_ARTICLEID = "post";
private final static Logger log = LoggerFactory.getLogger(ArticlePage.class);
@SpringBean
private IBlogManager blogManager;
/**
* Deep link support
*
* @param params
*/
public ArticlePage(PageParameters params) {
BArticle article;
try {
Long id = params.get(PARAM_ARTICLEID).toLong();
article = blogManager.loadArticleById(id);
} catch (Exception e) {
log.warn("ArticlePage accessed with invalid parameter: " + e.toString());
throw new AbortWithHttpErrorCodeException(404, "Invalid page parameter: " + e.getMessage());
}
// as associations are often needed use a fully initialized event object model.
init(new BArticleModel(article));
}
public static PageParameters getPageParams(Long articleId) {
checkNotNull(articleId);
return new PageParameters().set(PARAM_ARTICLEID, articleId);
}
private void init(IModel<BArticle> model) {
setDefaultModel(model);
setHeadingModel(new PropertyModel<String>(model, "heading"), null);
addMainPanel(new ArticlePanel(model));
addSecondaryPanel(new BlogSecondaryPanel());
add(new BlogPage.BlogMarkAllReadBehavior());
}
@Override
public String getActiveTopBarItem() {
return Pages.BLOG.name();
}
}