Package org.jboss.shrinkwrap.portal.impl

Source Code of org.jboss.shrinkwrap.portal.impl.PortletArchiveImpl

package org.jboss.shrinkwrap.portal.impl;

import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ArchivePath;
import org.jboss.shrinkwrap.api.ArchivePaths;
import org.jboss.shrinkwrap.api.Node;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.descriptor.api.Descriptors;
import org.jboss.shrinkwrap.descriptor.api.portletapp20.PortletDescriptor;
import org.jboss.shrinkwrap.portal.api.PortletArchive;
import org.jboss.shrinkwrap.portal.api.PortletMode;
import org.jboss.shrinkwrap.portal.impl.container.PortletContainerBase;

import javax.portlet.Portlet;

/**
* @author <a href="http://community.jboss.org/people/kenfinni">Ken Finnigan</a>
*/
public class PortletArchiveImpl extends PortletContainerBase<PortletArchive> implements PortletArchive {

    /**
     * Path to the web inside of the Archive.
     */
    private static final ArchivePath PATH_WEB = ArchivePaths.root();

    /**
     * Path to the WEB-INF inside of the Archive.
     */
    private static final ArchivePath PATH_WEB_INF = ArchivePaths.create("WEB-INF");

    /**
     * Path to the resources inside of the Archive.
     */
    private static final ArchivePath PATH_RESOURCE = ArchivePaths.create(PATH_WEB_INF, "classes");

    /**
     * Path to the libraries inside of the Archive.
     */
    private static final ArchivePath PATH_LIBRARY = ArchivePaths.create(PATH_WEB_INF, "lib");

    /**
     * Path to the classes inside of the Archive.
     */
    private static final ArchivePath PATH_CLASSES = ArchivePaths.create(PATH_WEB_INF, "classes");

    /**
     * Path to the manifests inside of the Archive.
     */
    private static final ArchivePath PATH_MANIFEST = ArchivePaths.create("META-INF");

    /**
     * Path to web archive service providers.
     */
    private static final ArchivePath PATH_SERVICE_PROVIDERS = ArchivePaths.create(PATH_CLASSES, "META-INF/services");

    private static final ArchivePath PATH_PORTLET_DESCRIPTOR = ArchivePaths.create(PATH_WEB_INF, "portlet.xml");

    private static final String GENERIC_FACES_PORTLET_CLASS = "javax.portlet.faces.GenericFacesPortlet";
    private static final String DEFAULT_VIEW_ID_PARAM_NAME = "javax.portlet.faces.defaultViewId.view";
    private static final String DEFAULT_EDIT_ID_PARAM_NAME = "javax.portlet.faces.defaultViewId.edit";
    private static final String DEFAULT_HELP_ID_PARAM_NAME = "javax.portlet.faces.defaultViewId.help";

    /**
     * Create a new PortletArchive with any type storage engine as backing.
     *
     * @param delegate
     *            The storage backing.
     */
    public PortletArchiveImpl(final Archive<?> delegate) {
        super(PortletArchive.class, delegate);
    }

    /**
     * {@inheritDoc}
     *
     * @see org.jboss.shrinkwrap.impl.base.container.ContainerBase#getManifestPath()
     */
    @Override
    protected ArchivePath getManifestPath() {
        return PATH_MANIFEST;
    }

    /**
     * {@inheritDoc}
     *
     * @see org.jboss.shrinkwrap.impl.base.container.ContainerBase#getClassesPath()
     */
    @Override
    protected ArchivePath getClassesPath() {
        return PATH_CLASSES;
    }

    /**
     * {@inheritDoc}
     *
     * @see org.jboss.shrinkwrap.impl.base.container.ContainerBase#getResourcePath()
     */
    @Override
    protected ArchivePath getResourcePath() {
        return PATH_RESOURCE;
    }

    /**
     * {@inheritDoc}
     *
     * @see org.jboss.shrinkwrap.impl.base.container.ContainerBase#getLibraryPath()
     */
    @Override
    protected ArchivePath getLibraryPath() {
        return PATH_LIBRARY;
    }

    /**
     * {@inheritDoc}
     *
     * @see org.jboss.shrinkwrap.impl.base.container.WebContainerBase#getWebPath()
     */
    @Override
    protected ArchivePath getWebPath() {
        return PATH_WEB;
    }

    /**
     * {@inheritDoc}
     *
     * @see org.jboss.shrinkwrap.impl.base.container.WebContainerBase#getWebInfPath()
     */
    @Override
    protected ArchivePath getWebInfPath() {
        return PATH_WEB_INF;
    }

    /**
     * {@inheritDoc}
     *
     * @see org.jboss.shrinkwrap.impl.base.container.WebContainerBase#getWebInfPath()
     */
    @Override
    protected ArchivePath getServiceProvidersPath() {
        return PATH_SERVICE_PROVIDERS;
    }

    @Override
    public PortletArchive createSimplePortlet(Class<? extends Portlet> portletClass) {
        String name = portletClass.getSimpleName();

        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                    .portletName(name)
                    .portletClass(portletClass.getName())
                    .createSupports()
                        .mimeType("text/html")
                        .portletMode(PortletMode.VIEW.toString())
                        .portletMode(PortletMode.EDIT.toString())
                        .portletMode(PortletMode.HELP.toString())
                        .up()
                    .getOrCreatePortletInfo()
                        .title(name)
                        .up()
                    .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    @Override
    public PortletArchive createSimplePortlet(Class<? extends Portlet> portletClass, String name, String title) {
        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                    .portletName(name)
                    .portletClass(portletClass.getName())
                    .createSupports()
                        .mimeType("text/html")
                        .portletMode(PortletMode.VIEW.toString())
                        .portletMode(PortletMode.EDIT.toString())
                        .portletMode(PortletMode.HELP.toString())
                        .up()
                    .getOrCreatePortletInfo()
                        .title(title)
                        .up()
                    .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    @Override
    public PortletArchive createSimplePortlet(Class<? extends Portlet> portletClass, String name, String title, String mimeType, PortletMode... modes) {
        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                    .portletName(name)
                    .portletClass(portletClass.getName())
                    .createSupports()
                        .mimeType(mimeType)
                        .portletMode(PortletMode.valuesAsString(modes))
                        .up()
                    .getOrCreatePortletInfo()
                        .title(title)
                        .up()
                    .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    @Override
    public PortletArchive createFacesPortlet(String name) {
        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                    .portletName(name)
                    .portletClass(GENERIC_FACES_PORTLET_CLASS)
                    .createInitParam()
                        .name(DEFAULT_VIEW_ID_PARAM_NAME)
                        .value("/index.xhtml")
                        .up()
                    .createSupports()
                        .mimeType("text/html")
                        .portletMode(PortletMode.VIEW.toString())
                        .up()
                    .getOrCreatePortletInfo()
                        .title(name)
                        .up()
                    .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    @Override
    public PortletArchive createFacesPortlet(String name, String title) {
        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                .portletName(name)
                .portletClass(GENERIC_FACES_PORTLET_CLASS)
                .createInitParam()
                .name(DEFAULT_VIEW_ID_PARAM_NAME)
                .value("/index.xhtml")
                .up()
                .createSupports()
                .mimeType("text/html")
                .portletMode(PortletMode.VIEW.toString())
                .up()
                .getOrCreatePortletInfo()
                .title(title)
                .up()
                .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    @Override
    public PortletArchive createFacesPortlet(String name, String title, String viewModeViewId) {
        viewModeViewId = checkForLeadingSlash(viewModeViewId);

        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                    .portletName(name)
                    .portletClass(GENERIC_FACES_PORTLET_CLASS)
                    .createInitParam()
                        .name(DEFAULT_VIEW_ID_PARAM_NAME)
                        .value(viewModeViewId)
                        .up()
                    .createSupports()
                        .mimeType("text/html")
                        .portletMode(PortletMode.VIEW.toString())
                        .up()
                    .getOrCreatePortletInfo()
                        .title(title)
                        .up()
                    .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    @Override
    public PortletArchive createFacesPortlet(String name, String title, String viewModeViewId, String editModeViewId) {
        viewModeViewId = checkForLeadingSlash(viewModeViewId);
        editModeViewId = checkForLeadingSlash(editModeViewId);

        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                    .portletName(name)
                    .portletClass(GENERIC_FACES_PORTLET_CLASS)
                    .createInitParam()
                        .name(DEFAULT_VIEW_ID_PARAM_NAME)
                        .value(viewModeViewId)
                        .up()
                    .createInitParam()
                        .name(DEFAULT_EDIT_ID_PARAM_NAME)
                        .value(editModeViewId)
                        .up()
                    .createSupports()
                        .mimeType("text/html")
                        .portletMode(PortletMode.VIEW.toString())
                        .portletMode(PortletMode.EDIT.toString())
                        .up()
                    .getOrCreatePortletInfo()
                        .title(title)
                        .up()
                    .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    @Override
    public PortletArchive createFacesPortlet(String name, String title, String viewModeViewId, String editModeViewId, String helpModeViewId) {
        viewModeViewId = checkForLeadingSlash(viewModeViewId);
        editModeViewId = checkForLeadingSlash(editModeViewId);
        helpModeViewId = checkForLeadingSlash(helpModeViewId);

        PortletDescriptor desc = getOrCreatePortletDescriptor()
                .createPortlet()
                    .portletName(name)
                    .portletClass(GENERIC_FACES_PORTLET_CLASS)
                    .createInitParam()
                        .name(DEFAULT_VIEW_ID_PARAM_NAME)
                        .value(viewModeViewId)
                        .up()
                    .createInitParam()
                        .name(DEFAULT_EDIT_ID_PARAM_NAME)
                        .value(editModeViewId)
                        .up()
                    .createInitParam()
                        .name(DEFAULT_HELP_ID_PARAM_NAME)
                        .value(helpModeViewId)
                        .up()
                    .createSupports()
                        .mimeType("text/html")
                        .portletMode(PortletMode.VIEW.toString())
                        .portletMode(PortletMode.EDIT.toString())
                        .portletMode(PortletMode.HELP.toString())
                        .up()
                    .getOrCreatePortletInfo()
                        .title(title)
                        .up()
                    .up();

        this.setPortletXML(new StringAsset(desc.exportAsString()));
        return covarientReturn();
    }

    private String checkForLeadingSlash(String viewId) {
        return viewId.indexOf("/") != 0 ? "/" + viewId : viewId;
    }

    private PortletDescriptor getOrCreatePortletDescriptor() {
        PortletDescriptor descriptor;

        Node portletXmlNode = this.get(PATH_PORTLET_DESCRIPTOR);
        if (null != portletXmlNode) {
            descriptor = Descriptors.importAs(PortletDescriptor.class).fromStream(portletXmlNode.getAsset().openStream());
            this.delete(PATH_PORTLET_DESCRIPTOR);
        } else {
            descriptor = Descriptors.create(PortletDescriptor.class)
                                .addDefaultNamespaces()
                                .version("2.0");
        }
        return descriptor;
    }

}
TOP

Related Classes of org.jboss.shrinkwrap.portal.impl.PortletArchiveImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.