/*
* JBoss, Home of Professional Open Source.
* Copyright 2012, Red Hat, Inc., and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.gatein.api.page;
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.PortalImpl;
import org.gatein.api.PortalRequest;
import org.gatein.api.Util;
import org.gatein.api.composition.BareContainerImpl;
import org.gatein.api.composition.ContainerItem;
import org.gatein.api.internal.Parameters;
import org.gatein.api.security.Permission;
import org.gatein.api.site.SiteId;
import java.io.Serializable;
import java.util.List;
/**
* @author <a href="mailto:nscavell@redhat.com">Nick Scavelli</a>
*/
public class PageImpl extends BareContainerImpl implements Page, Serializable {
private PageKey key;
private PageState state;
private boolean create;
private String title;
private transient PortalImpl portal;
public PageImpl(PageContext pageContext) {
super(null);
this.key = pageContext.getKey();
this.state = pageContext.getState();
}
public PageImpl(PortalImpl portal, PageContext pageContext) {
super(null);
this.portal = portal;
this.key = pageContext.getKey();
this.state = pageContext.getState();
}
/**
* @see org.gatein.api.composition.BareContainerImpl#getChildren()
*/
@Override
public List<ContainerItem> getChildren() {
if (!isChildrenSet()) {
setChildren(getPortal().getPageRootContainer(getPageContext()));
}
return super.getChildren();
}
public PortalImpl getPortal() {
if (null == portal) {
portal = (PortalImpl) PortalRequest.getInstance().getPortal();
}
return portal;
}
/**
* @see org.gatein.api.page.Page#getId()
*/
@Override
public PageId getId() {
return Util.from(key);
}
/**
* @see org.gatein.api.page.Page#getSiteId()
*/
@Override
public SiteId getSiteId() {
return Util.from(key.getSite());
}
/**
* @see org.gatein.api.page.Page#getName()
*/
@Override
public String getName() {
return key.getName();
}
/**
* @see org.gatein.api.common.Describable#getDescription()
*/
@Override
public String getDescription() {
return state.getDescription();
}
/**
* @see org.gatein.api.common.Describable#setDescription(java.lang.String)
*/
@Override
public void setDescription(String description) {
setState(builder().description(description));
}
/**
* @see org.gatein.api.common.Displayable#setDisplayName(java.lang.String)
*/
@Override
public void setDisplayName(String displayName) {
setState(builder().displayName(displayName));
}
/**
* @see org.gatein.api.common.Displayable#getDisplayName()
*/
@Override
public String getDisplayName() {
return state.getDisplayName();
}
/**
* @see org.gatein.api.composition.BareContainerImpl#getAccessPermission()
*/
@Override
public Permission getAccessPermission() {
return Util.from(state.getAccessPermissions());
}
/**
* @see org.gatein.api.composition.BareContainerImpl#setAccessPermission(org.gatein.api.security.Permission)
*/
@Override
public void setAccessPermission(Permission permission) {
Parameters.requireNonNull(permission, "permission", "To allow access to everyone use Permission.everyone()");
setState(builder().accessPermissions(Util.from(permission)));
}
/**
* @see org.gatein.api.page.Page#getEditPermission()
*/
@Override
public Permission getEditPermission() {
return Util.from(state.getEditPermission());
}
/**
* @see org.gatein.api.page.Page#setEditPermission(org.gatein.api.security.Permission)
*/
@Override
public void setEditPermission(Permission permission) {
Parameters.requireNonNull(permission, "permission", "To allow edit for everyone use Permission.everyone()");
// Only one edit permission (membership) is allowed at this time.
String[] permissions = Util.from(permission);
if (permissions.length != 1)
throw new IllegalArgumentException("Invalid permission. Only one membership is allowed for an edit permission");
setState(builder().editPermission(permissions[0]));
}
/**
* @see org.gatein.api.composition.BareContainerImpl#getMoveAppsPermission()
*/
@Override
public Permission getMoveAppsPermission() {
return Util.from(state.getMoveAppsPermissions());
}
/**
* @see org.gatein.api.composition.BareContainerImpl#setMoveAppsPermission(org.gatein.api.security.Permission)
*/
@Override
public void setMoveAppsPermission(Permission permission) {
Parameters.requireNonNull(permission, "permission", "To allow to move appliactions for everyone use Permission.everyone()");
setState(builder().moveAppsPermissions(Util.from(permission)));
}
/**
* @see org.gatein.api.composition.BareContainerImpl#getMoveContainersPermission()
*/
@Override
public Permission getMoveContainersPermission() {
return Util.from(state.getMoveContainersPermissions());
}
/**
* @see org.gatein.api.composition.BareContainerImpl#setMoveContainersPermission(org.gatein.api.security.Permission)
*/
@Override
public void setMoveContainersPermission(Permission permission) {
Parameters.requireNonNull(permission, "permission", "To allow to move containers for everyone use Permission.everyone()");
setState(builder().moveContainersPermissions(Util.from(permission)));
}
public boolean isCreate() {
return create;
}
public void setCreate(boolean create) {
this.create = create;
}
@Override
public int compareTo(Page page) {
return getName().compareTo(page.getName());
}
public PageContext getPageContext() {
return new PageContext(key, state);
}
private PageState.Builder builder() {
return state.builder();
}
private void setState(PageState.Builder builder) {
this.state = builder.build();
}
/**
* @see org.gatein.api.page.Page#getTitle()
*/
@Override
public String getTitle() {
return title;
}
/**
* @see org.gatein.api.page.Page#setTitle(java.lang.String)
*/
@Override
public void setTitle(String title) {
this.title = title;
}
}