Package org.gatein.api.composition

Source Code of org.gatein.api.composition.PageBuilderImpl

package org.gatein.api.composition;

import org.exoplatform.portal.mop.SiteKey;
import org.exoplatform.portal.mop.page.PageContext;
import org.exoplatform.portal.mop.page.PageKey;
import org.exoplatform.portal.mop.page.PageState;
import org.gatein.api.Util;
import org.gatein.api.page.Page;
import org.gatein.api.page.PageImpl;
import org.gatein.api.security.Permission;
import org.gatein.common.logging.Logger;
import org.gatein.common.logging.LoggerFactory;

import java.util.Arrays;

/**
* Main point of contact between the consumer of the API and the builders. Provides methods to set all the possible
* parameters that a persisted page might have, as well as ways to get access to the building blocks of a page, ie,
* containers.
*
* @author <a href="mailto:jpkroehling+javadoc@redhat.com">Juraci Paixão Kröhling</a>
*/
public class PageBuilderImpl extends LayoutBuilderImpl<PageBuilder> implements PageBuilder {
    private static final Logger log = LoggerFactory.getLogger(PageBuilderImpl.class);

    // Page-related properties
    private String name;
    private String description;

    // SiteKey-related properties
    private String siteType;
    private String siteName;

    // PageState-related properties
    private String displayName;
    private boolean showMaxWindow;
    private Permission accessPermission = Container.DEFAULT_ACCESS_PERMISSION;
    private Permission editPermission = Page.DEFAULT_EDIT_PERMISSION;
    private Permission moveAppsPermission = Container.DEFAULT_MOVE_APPS_PERMISSION;
    private Permission moveContainersPermission = Container.DEFAULT_MOVE_CONTAINERS_PERMISSION;

    public PageBuilderImpl() {
        if (log.isTraceEnabled()) {
            log.trace("Created a new page builder: " + this);
        }
    }

    /**
     * @see LayoutBuilderImpl#newColumnsBuilder()
     */
    @Override
    public ContainerBuilder<PageBuilder> newColumnsBuilder() {
        return super.newColumnsBuilder();
    }

    @Override
    public PageBuilder name(String name) {
        this.name = name;
        return this;
    }

    @Override
    public PageBuilder description(String description) {
        this.description = description;
        return this;
    }

    @Override
    public PageBuilder siteName(String siteName) {
        this.siteName = siteName;
        return this;
    }

    @Override
    public PageBuilder displayName(String displayName) {
        this.displayName = displayName;
        return this;
    }

    @Override
    public PageBuilder showMaxWindow(boolean showMaxWindow) {
        this.showMaxWindow = showMaxWindow;
        return this;
    }

    @Override
    public PageBuilder accessPermission(Permission accessPermission) {
        this.accessPermission = accessPermission;
        return this;
    }

    @Override
    public PageBuilder editPermission(Permission editPermission) {
        this.editPermission = editPermission;
        return this;
    }

    @Override
    public PageBuilder moveAppsPermission(Permission moveAppsPermission) {
        this.moveAppsPermission = moveAppsPermission;
        return this;
    }

    @Override
    public PageBuilder moveContainersPermission(Permission moveContainersPermission) {
        this.moveContainersPermission = moveContainersPermission;
        return this;
    }

    @Override
    public PageBuilder siteType(String siteType) {

        if (!"portal".equalsIgnoreCase(siteType) && !"site".equalsIgnoreCase(siteType) && !"user".equalsIgnoreCase(siteType)) {
            throw new IllegalArgumentException("siteType must be one of the following: portal, site or user");
        }

        this.siteType = siteType;
        return this;
    }

    /**
     * Builds a new page based on the information provided via this builder.
     * @return the Page that best represents the information stored on this builder
     * @throws java.lang.IllegalStateException if mandatory information is not provided
     */
    @Override
    public Page build() {

        if (null == siteName || null == siteType) {
            throw new IllegalStateException("API usage error: either the SiteKey should be set or both site name and site type should be set.");
        }
        if (null == name) {
            throw new IllegalStateException("API usage error: either the PageKey should be set or both SiteKey and page name should be set.");
        }
        SiteKey siteKey = new SiteKey(siteType, siteName);

        PageKey pageKey = new PageKey(siteKey, name);

        PageState pageState = new PageState(displayName,
                description,
                showMaxWindow,
                null,
                Arrays.asList(Util.from(accessPermission)),
                Util.from(editPermission)[0], // this is the same as the createPage, but is it right?
                Arrays.asList(Util.from(moveAppsPermission)),
                Arrays.asList(Util.from(moveContainersPermission)));
        PageContext pageContext = new PageContext(pageKey, pageState);
        Page page = new PageImpl(pageContext);
        page.setChildren(this.children);

        if (log.isTraceEnabled()) {
            log.trace("Page finished: " + this);
        }

        return page;
    }

    @Override
    public String toString() {
        return "PageBuilderImpl{" +
                super.toString() +
                ", hashCode=" + hashCode() +
                '}';
    }

}
TOP

Related Classes of org.gatein.api.composition.PageBuilderImpl

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.