fi.foyt.fni.view.forge.AbstractForgePublicViewBackingBean.java Source code

Java tutorial

Introduction

Here is the source code for fi.foyt.fni.view.forge.AbstractForgePublicViewBackingBean.java

Source

package fi.foyt.fni.view.forge;

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

import javax.inject.Inject;

import org.apache.commons.lang3.StringUtils;

import fi.foyt.fni.materials.MaterialController;
import fi.foyt.fni.persistence.dao.materials.TagWithCount;
import fi.foyt.fni.persistence.model.materials.Document;
import fi.foyt.fni.persistence.model.materials.MaterialTag;
import fi.foyt.fni.persistence.model.materials.MaterialType;
import fi.foyt.fni.utils.licenses.CreativeCommonsLicense;
import fi.foyt.fni.utils.licenses.CreativeCommonsUtils;

public abstract class AbstractForgePublicViewBackingBean {

    protected static final MaterialType[] SUPPORTED_TYPES = { MaterialType.DOCUMENT, MaterialType.IMAGE,
            MaterialType.PDF, MaterialType.FILE, MaterialType.BINARY, MaterialType.VECTOR_IMAGE,
            MaterialType.GOOGLE_DOCUMENT, MaterialType.DROPBOX_FILE };

    protected static final int TAG_COUNT = 30;

    @Inject
    private MaterialController materialController;

    protected PublicMaterialBean toMaterialBean(fi.foyt.fni.persistence.model.materials.Material material) {
        if (material == null) {
            return null;
        }

        String icon = materialController.getMaterialIcon(material.getType());
        String license = material.getLicense();
        CreativeCommonsLicense commonsLicence = CreativeCommonsUtils.parseLicenseUrl(license);
        String creatorName = material.getCreator().getFullName();
        String modifierName = material.getModifier().getFullName();
        List<MaterialTag> materialTags = materialController.listMaterialTags(material);
        List<String> tags = new ArrayList<>(materialTags.size());

        for (MaterialTag materialTag : materialTags) {
            tags.add(materialTag.getTag().getText());
        }

        String viewPath = String.format("/materials/%s", material.getPath());
        String editPath = materialController.getForgeMaterialViewerUrl(material);
        String downloadLink = String.format("/materials/%s?download=true", material.getPath());
        String path = material.getPath();
        String parentPath = material.getParentFolder() != null
                ? materialController.getForgeMaterialViewerUrl(material.getParentFolder())
                : "/forge/";

        String description = material.getDescription();
        if (StringUtils.isBlank(description) && (material instanceof Document)) {
            description = StringUtils.abbreviate(((Document) material).getContentPlain(), 250);
        }

        Boolean viewable;
        switch (material.getType()) {
        case DOCUMENT:
        case IMAGE:
        case PDF:
        case VECTOR_IMAGE:
            viewable = true;
            break;
        default:
            viewable = false;
            break;
        }

        Boolean printable = materialController.isPrintableAsPdfType(material.getType());

        return new PublicMaterialBean(material.getId(), material.getTitle(), description, icon, license,
                commonsLicence != null ? commonsLicence.getIconUrl(true) : null, material.getCreator().getId(),
                creatorName, material.getCreated(), material.getModifier().getId(), modifierName,
                material.getModified(), tags, viewPath, editPath, downloadLink, parentPath, path, viewable,
                printable);
    }

    protected List<PublicMaterialBean> toMaterialBeans(
            List<fi.foyt.fni.persistence.model.materials.Material> materials) {
        List<PublicMaterialBean> result = new ArrayList<>(materials.size());

        for (fi.foyt.fni.persistence.model.materials.Material material : materials) {
            result.add(toMaterialBean(material));
        }

        return result;
    }

    protected List<PublicTagBean> toTagBeans(List<TagWithCount> tagsWithCounts) {
        List<PublicTagBean> result = new ArrayList<>(tagsWithCounts.size());

        for (TagWithCount tagWithCount : tagsWithCounts) {
            result.add(new PublicTagBean(tagWithCount.getCount(), tagWithCount.getTag().getText()));
        }

        return result;
    }

}