package org.exoplatform.portal.mop.page; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.exoplatform.commons.utils.Safe; import org.exoplatform.portal.mop.Described; import org.exoplatform.portal.mop.ProtectedContainer; import org.exoplatform.portal.mop.ProtectedResource; import org.exoplatform.portal.pom.config.Utils; import org.exoplatform.portal.pom.data.MappedAttributes; import org.gatein.mop.api.Attributes; import org.gatein.mop.api.workspace.Page; /** * An immutable page state class, modifying an existing state should use the {@link Builder} builder class to rebuild a new * immutable state object. * * @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a> */ public class PageState implements Serializable { private static final long serialVersionUID = 7874166775312871923L; /** . */ final String editPermission; /** . */ final boolean showMaxWindow; /** . */ final String factoryId; /** . */ final String displayName; /** . */ final String description; /** . */ final List<String> accessPermissions; final List<String> moveAppsPermissions; final List<String> moveContainersPermissions; public PageState(Page page) { Attributes attrs = page.getAttributes(); Described described = page.adapt(Described.class); // List<String> accessPermissions = Collections.emptyList(); String editPermission = null; if (page.isAdapted(ProtectedResource.class)) { ProtectedResource pr = page.adapt(ProtectedResource.class); accessPermissions = pr.getAccessPermissions(); editPermission = pr.getEditPermission(); } // this.factoryId = attrs.getValue(MappedAttributes.FACTORY_ID); this.displayName = described.getName(); this.description = described.getDescription(); this.accessPermissions = Utils.safeImmutableList(accessPermissions); this.editPermission = editPermission; this.showMaxWindow = attrs.getValue(MappedAttributes.SHOW_MAX_WINDOW, false); if (page.isAdapted(ProtectedContainer.class)) { ProtectedContainer pc = page.adapt(ProtectedContainer.class); this.moveAppsPermissions = pc.getMoveAppsPermissions(); this.moveContainersPermissions = pc.getMoveContainersPermissions(); } else { /* legacy mode */ this.moveAppsPermissions = ProtectedContainer.DEFAULT_MOVE_APPLICATIONS_PERMISSIONS; this.moveContainersPermissions = ProtectedContainer.DEFAULT_MOVE_CONTAINERS_PERMISSIONS; } } public PageState(String displayName, String description, boolean showMaxWindow, String factoryId, List<String> accessPermissions, String editPermission, List<String> moveAppsPermissions, List<String> moveContainersPermissions) { this.editPermission = editPermission; this.showMaxWindow = showMaxWindow; this.factoryId = factoryId; this.displayName = displayName; this.description = description; this.accessPermissions = accessPermissions; this.moveAppsPermissions = moveAppsPermissions; this.moveContainersPermissions = moveContainersPermissions; } public String getEditPermission() { return editPermission; } public boolean getShowMaxWindow() { return showMaxWindow; } public String getFactoryId() { return factoryId; } public String getDisplayName() { return displayName; } public String getDescription() { return description; } public List<String> getAccessPermissions() { return accessPermissions; } /** * @return the moveAppsPermissions */ public List<String> getMoveAppsPermissions() { return moveAppsPermissions; } /** * @return the moveContainersPermissions */ public List<String> getMoveContainersPermissions() { return moveContainersPermissions; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof PageState)) { return false; } PageState that = (PageState) o; return Safe.equals(editPermission, that.editPermission) && showMaxWindow == that.showMaxWindow && Safe.equals(factoryId, that.factoryId) && Safe.equals(displayName, that.displayName) && Safe.equals(description, that.description) && Safe.equals(accessPermissions, that.accessPermissions); } @Override public int hashCode() { int result = editPermission != null ? editPermission.hashCode() : 0; result = 31 * result + (showMaxWindow ? 1 : 0); result = 31 * result + (factoryId != null ? factoryId.hashCode() : 0); result = 31 * result + (displayName != null ? displayName.hashCode() : 0); result = 31 * result + (description != null ? description.hashCode() : 0); result = 31 * result + (accessPermissions != null ? accessPermissions.hashCode() : 0); return result; } public Builder builder() { return new Builder(editPermission, showMaxWindow, factoryId, displayName, description, accessPermissions, moveAppsPermissions, moveContainersPermissions); } public static class Builder { /** . */ private String editPermission; /** . */ private boolean showMaxWindow; /** . */ private String factoryId; /** . */ private String displayName; /** . */ private String description; /** . */ private List<String> accessPermissions; private List<String> moveAppsPermissions; private List<String> moveContainersPermissions; private Builder(String editPermission, boolean showMaxWindow, String factoryId, String displayName, String description, List<String> accessPermissions, List<String> moveAppsPermissions, List<String> moveContainersPermissions) { this.editPermission = editPermission; this.showMaxWindow = showMaxWindow; this.factoryId = factoryId; this.displayName = displayName; this.description = description; this.accessPermissions = accessPermissions; this.moveAppsPermissions = moveAppsPermissions; this.moveContainersPermissions = moveContainersPermissions; } public Builder editPermission(String editPermission) { this.editPermission = editPermission; return this; } public Builder accessPermissions(List<String> accessPermissions) { this.accessPermissions = accessPermissions; return this; } public Builder accessPermissions(String... accessPermissions) { this.accessPermissions = new ArrayList<String>(Arrays.asList(accessPermissions)); return this; } public Builder moveAppsPermissions(List<String> moveAppsPermissions) { this.moveAppsPermissions = moveAppsPermissions; return this; } public Builder moveAppsPermissions(String... moveAppsPermissions) { this.moveAppsPermissions = new ArrayList<String>(Arrays.asList(moveAppsPermissions)); return this; } public Builder moveContainersPermissions(List<String> moveContainersPermissions) { this.moveContainersPermissions = moveContainersPermissions; return this; } public Builder moveContainersPermissions(String... moveContainersPermissions) { this.moveContainersPermissions = new ArrayList<String>(Arrays.asList(moveContainersPermissions)); return this; } public Builder showMaxWindow(boolean showMaxWindow) { this.showMaxWindow = showMaxWindow; return this; } public Builder displayName(String displayName) { this.displayName = displayName; return this; } public Builder description(String description) { this.description = description; return this; } public Builder factoryId(String factoryId) { this.factoryId = factoryId; return this; } public PageState build() { return new PageState(displayName, description, showMaxWindow, factoryId, accessPermissions, editPermission, moveAppsPermissions, moveContainersPermissions); } } }