All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.xaloon.wicket.plugin.blog.panel.AbstractBlogPluginPanel Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.xaloon.wicket.plugin.blog.panel;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

import org.apache.wicket.Page;
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.mapper.parameter.PageParameters;
import org.xaloon.core.api.date.DateService;
import org.xaloon.core.api.image.AlbumFacade;
import org.xaloon.core.api.keyvalue.KeyValueDao;
import org.xaloon.core.api.plugin.comment.CommentDao;
import org.xaloon.core.api.storage.FileDescriptor;
import org.xaloon.wicket.component.classifier.panel.ClassifierConstants;
import org.xaloon.wicket.component.navigation.BookmarkablePagingNavigator;
import org.xaloon.wicket.component.tag.TagCloudPanel;
import org.xaloon.wicket.plugin.AbstractPluginPanel;
import org.xaloon.wicket.plugin.blog.BlogEntryParameters;
import org.xaloon.wicket.plugin.blog.BlogFacade;
import org.xaloon.wicket.plugin.blog.BlogPageConstants;
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.JpaBlogEntryImageComposition;
import org.xaloon.wicket.plugin.blog.model.JpaBlogEntryTag;
import org.xaloon.wicket.plugin.blog.page.BlogEntryListByBloggerPage;
import org.xaloon.wicket.plugin.blog.page.BlogEntryListByCategoryPage;
import org.xaloon.wicket.plugin.blog.page.BlogEntryListByTagPage;
import org.xaloon.wicket.plugin.blog.page.BlogEntryListPage;
import org.xaloon.wicket.plugin.blog.page.CreateBlogEntryPage;

/**
 * Generated link of blog entry: "http[s]://host/[username]/[year/month]/blog-entry-path"
 * 
 * @author vytautas r.
 */
public abstract class AbstractBlogPluginPanel extends AbstractPluginPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	protected static final String KEY_VALUE_BLOG_TAG = "BLOG_ENTRY_TAG";

	private final static List AVAILABLE_PARAMETERS = new ArrayList();

	static {
		AVAILABLE_PARAMETERS.add(BlogPageConstants.BLOG_USERNAME);
		AVAILABLE_PARAMETERS.add(BlogPageConstants.BLOG_YEAR);
		AVAILABLE_PARAMETERS.add(BlogPageConstants.BLOG_MONTH);
		AVAILABLE_PARAMETERS.add(BlogPageConstants.BLOG_DAY);
		AVAILABLE_PARAMETERS.add(BlogPageConstants.BLOG_PATH);
		AVAILABLE_PARAMETERS.add(ClassifierConstants.PARENT_ITEM);
		AVAILABLE_PARAMETERS.add(TagCloudPanel.QUERY_BY_TAG);
		AVAILABLE_PARAMETERS.add(BookmarkablePagingNavigator.PAGE_QUERY_ID);
	}
	
	@Inject
	protected BlogFacade blogFacade;

	@Inject
	protected CommentDao commentDao;
	
	@Inject
	@Named("blogEntryKeyValueDao")
	protected KeyValueDao keyValueDao;

	@Inject
	protected DateService dateService;
	
	@Inject
	protected AlbumFacade albumFacade;
	
	/**
	 * Construct.
	 * 
	 * @param id
	 */
	public AbstractBlogPluginPanel(String id) {
		super(id);
	}

	/**
	 * Construct.
	 * 
	 * @param id
	 * @param pageParameters
	 */
	public AbstractBlogPluginPanel(String id, PageParameters pageParameters) {
		super(id, pageParameters);
	}

	protected Class getCreateBlogEntryPageClass() {
		return CreateBlogEntryPage.class;
	}

	protected Class getBlogCategoryPageClass() {
		return BlogEntryListByCategoryPage.class;
	}

	protected Class getBlogBloggerPageClass() {
		return BlogEntryListByBloggerPage.class;
	}

	protected Class getBlogEntryListPageClass() {
		return BlogEntryListPage.class;
	}

	protected Class getBlogEntryListByTagPageClass() {
		return BlogEntryListByTagPage.class;
	}

	protected BlogFacade getBlogFacade() {
		return blogFacade;
	}

	/**
	 * Blog parameter management
	 * 
	 * @return parsed parameters
	 */
	protected BlogEntryParameters parseBlogEntryParameters() {
		PageParameters requestParameters = getPageRequestParameters();

		BlogEntryParameters result = new BlogEntryParameters();
		if (!requestParameters.get(BlogPageConstants.BLOG_USERNAME).isEmpty()) {
			result.setUsername(requestParameters.get(BlogPageConstants.BLOG_USERNAME).toString());
		}
		if (!requestParameters.get(BlogPageConstants.BLOG_YEAR).isEmpty()) {
			result.setYear(requestParameters.get(BlogPageConstants.BLOG_YEAR).toInt());
		}
		if (!requestParameters.get(BlogPageConstants.BLOG_MONTH).isEmpty()) {
			result.setMonth(requestParameters.get(BlogPageConstants.BLOG_MONTH).toInt());
		}
		if (!requestParameters.get(BlogPageConstants.BLOG_DAY).isEmpty()) {
			result.setDay(requestParameters.get(BlogPageConstants.BLOG_DAY).toInt());
		}
		if (!requestParameters.get(BlogPageConstants.BLOG_PATH).isEmpty()) {
			result.setPath(requestParameters.get(BlogPageConstants.BLOG_PATH).toString());
		}
		if (result.isEmpty()) {
			return null;
		}
		return result;
	}
	
	@Override
	protected PageParameters cleanupPageRequestParameters(PageParameters pageRequestParameters) {
		PageParameters result = new PageParameters();
		
		for (String key : AVAILABLE_PARAMETERS) {
			if (!pageRequestParameters.get(key).isEmpty()) {
				result.add(key, pageRequestParameters.get(key));
			}
		}
		return pageRequestParameters.overwriteWith(result);
	}

	protected BookmarkablePageLink createBlogCategoryLink(final BlogEntry blogEntry) {
		PageParameters categoryPageParameters = new PageParameters();
		BookmarkablePageLink categoryLink = new BookmarkablePageLink("link-category", getBlogCategoryPageClass(), categoryPageParameters);
		if (blogEntry.getCategory() != null) {
			categoryPageParameters.set(ClassifierConstants.PARENT_ITEM, blogEntry.getCategory().getCode());
			categoryLink.add(new Label("label-category", new Model(blogEntry.getCategory().getName())));
		} else {
			categoryLink.setVisible(false);
		}
		return categoryLink;
	}

	protected BookmarkablePageLink createBlogAuthorLink(final BlogEntry blogEntry) {
		PageParameters authorPageParameters = new PageParameters();
		BookmarkablePageLink authorLink = new BookmarkablePageLink("link-author", getBlogBloggerPageClass(), authorPageParameters);
		if (blogEntry.getOwner() != null) {
			authorPageParameters.set(BlogPageConstants.BLOG_USERNAME, blogEntry.getOwner().getUsername());
			authorLink.add(new Label("author", new Model(blogEntry.getOwner().getDisplayName())));
		} else {
			authorLink.setVisible(false);
		}
		return authorLink;
	}
	
	protected FileDescriptor getBlogEntryThumbnail(BlogEntry blogEntry) {
		if (blogEntry.getThumbnail() != null) {
			return blogEntry.getThumbnail();
		}
		List albumImages = blogEntry.getImages();
		if (!albumImages.isEmpty()) {
			return albumImages.get(0).getImage().getThumbnail();
		}
		return null;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy