fi.foyt.fni.view.gamelibrary.GameLibraryPublicationBackingBean.java Source code

Java tutorial

Introduction

Here is the source code for fi.foyt.fni.view.gamelibrary.GameLibraryPublicationBackingBean.java

Source

package fi.foyt.fni.view.gamelibrary;

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

import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.ocpsoft.rewrite.annotation.Join;
import org.ocpsoft.rewrite.annotation.Matches;
import org.ocpsoft.rewrite.annotation.Parameter;
import org.ocpsoft.rewrite.annotation.RequestAction;

import fi.foyt.fni.forum.ForumController;
import fi.foyt.fni.gamelibrary.GameLibraryTagController;
import fi.foyt.fni.gamelibrary.PublicationController;
import fi.foyt.fni.gamelibrary.SessionShoppingCartController;
import fi.foyt.fni.jsf.NavigationController;
import fi.foyt.fni.persistence.model.gamelibrary.BookPublication;
import fi.foyt.fni.persistence.model.gamelibrary.Publication;
import fi.foyt.fni.persistence.model.gamelibrary.PublicationAuthor;
import fi.foyt.fni.persistence.model.gamelibrary.PublicationImage;
import fi.foyt.fni.persistence.model.gamelibrary.PublicationTag;
import fi.foyt.fni.persistence.model.users.Role;
import fi.foyt.fni.persistence.model.users.User;
import fi.foyt.fni.security.UnauthorizedException;
import fi.foyt.fni.session.SessionController;
import fi.foyt.fni.system.SystemSettingsController;
import fi.foyt.fni.utils.licenses.CreativeCommonsLicense;
import fi.foyt.fni.utils.licenses.CreativeCommonsUtils;

@RequestScoped
@Named
@Stateful
@Join(path = "/gamelibrary/{urlName}", to = "/gamelibrary/publication.jsf")
public class GameLibraryPublicationBackingBean {

    @Parameter
    @Matches("[a-zA-Z0-9_.-]{1,}")
    private String urlName;

    @Inject
    private SessionController sessionController;

    @Inject
    private PublicationController publicationController;

    @Inject
    private NavigationController navigationController;

    @Inject
    private SystemSettingsController systemSettingsController;

    @Inject
    private GameLibraryTagController gameLibraryTagController;

    @Inject
    private ForumController forumController;

    @Inject
    private SessionShoppingCartController sessionShoppingCartController;

    @RequestAction
    public String init() {
        publication = publicationController.findBookPublicationByUrlName(getUrlName());
        if (publication == null) {
            return navigationController.notFound();
        }

        if (!publication.getPublished()) {
            if (!sessionController.isLoggedIn()) {
                throw new UnauthorizedException();
            }

            if (!publication.getCreator().getId().equals(sessionController.getLoggedUserId())) {
                if (!sessionController.hasLoggedUserRole(Role.GAME_LIBRARY_MANAGER)) {
                    return navigationController.accessDenied();
                }
            }
        }

        if (StringUtils.isNotBlank(publication.getDescriptionPlain())) {
            metaDescription = StringEscapeUtils.escapeHtml4(publication.getDescriptionPlain());
        } else {
            metaDescription = "";
        }

        metaTitle = publication.getName();
        metaUrl = String.format("%s/gamelibrary/%s", systemSettingsController.getSiteUrl(true, true),
                publication.getUrlName());
        metaImage = String.format("%s/gamelibrary/publicationImages/%d",
                systemSettingsController.getSiteUrl(true, true), publication.getDefaultImage().getId());
        metaLocale = publication.getLanguage() != null ? publication.getLanguage().getLocale().toString() : "";

        String description = publication.getDescription();
        List<PublicationImage> images = publicationController.listPublicationImagesByPublication(publication);
        List<PublicationTag> publicationTags = gameLibraryTagController.listPublicationTags(publication);
        List<PublicationAuthor> publicationAuthors = publicationController.listPublicationAuthors(publication);
        tags = new ArrayList<>();
        authors = new ArrayList<>();

        for (PublicationTag publicationTag : publicationTags) {
            tags.add(publicationTag.getTag().getText());
        }

        for (PublicationAuthor publicationAuthor : publicationAuthors) {
            authors.add(publicationAuthor.getAuthor());
        }

        this.hasImage = !images.isEmpty();
        this.description = StringUtils.isBlank(description) ? "" : description.replace("\n", "<br/>");
        this.creativeCommonsLicence = CreativeCommonsUtils.parseLicenseUrl(publication.getLicense());
        this.commentCount = publication.getForumTopic() != null
                ? forumController.countPostsByTopic(publication.getForumTopic())
                : null;

        if (publication instanceof BookPublication) {
            downloadable = ((BookPublication) publication).getDownloadableFile() != null;
            purchasable = ((BookPublication) publication).getPrintableFile() != null;
            pageNumbers = ((BookPublication) publication).getNumberOfPages();
        }

        return null;
    }

    public Publication getPublication() {
        return publication;
    }

    public String getUrlName() {
        return urlName;
    }

    public void setUrlName(String urlName) {
        this.urlName = urlName;
    }

    public String getMetaDescription() {
        return metaDescription;
    }

    public String getMetaImage() {
        return metaImage;
    }

    public String getMetaLocale() {
        return metaLocale;
    }

    public String getMetaTitle() {
        return metaTitle;
    }

    public String getMetaUrl() {
        return metaUrl;
    }

    public boolean hasImages() {
        return hasImage;
    }

    public List<String> getTags() {
        return tags;
    }

    public boolean getHasAuthors() {
        return getPublicationAuthors().size() > 0;
    }

    public boolean getHasSingleAuthor() {
        return getPublicationAuthors().size() == 1;
    }

    public List<User> getAuthors() {
        return getPublicationAuthors();
    }

    private List<User> getPublicationAuthors() {
        return authors;
    }

    public Long getPublicationCommentCount() {
        return commentCount;
    }

    public Integer getPublicationNumberOfPages() {
        return pageNumbers;
    }

    public boolean getPublicationDownloadable() {
        return downloadable;
    }

    public boolean getPublicationPurchasable() {
        return purchasable;
    }

    public CreativeCommonsLicense getCreativeCommonsLicense() {
        return creativeCommonsLicence;
    }

    public String getDescription() {
        return description;
    }

    public String addPublicationToShoppingCart() {
        sessionShoppingCartController.addPublication(publication);
        return null;
    }

    private BookPublication publication;
    private String metaDescription;
    private String metaTitle;
    private String metaUrl;
    private String metaImage;
    private String metaLocale;
    private List<User> authors;
    private Boolean hasImage;
    private List<String> tags;
    private Long commentCount;
    private Integer pageNumbers;
    private Boolean purchasable;
    private Boolean downloadable;
    private String description;
    private CreativeCommonsLicense creativeCommonsLicence;
}