All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.file.CmsProject Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library 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 library 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.
 *
 * For further information about Alkacon Software GmbH & Co. KG, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.file;

import org.opencms.main.CmsIllegalArgumentException;
import org.opencms.security.CmsOrganizationalUnit;
import org.opencms.util.A_CmsModeIntEnumeration;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;

import java.io.Serializable;
import java.util.List;

/**
 * Describes an OpenCms project,
 * which contains a set of VFS resources that are being worked on at the same time.

* * @since 6.0.0 */ public class CmsProject implements Cloneable, Comparable, Serializable { /** * Enumeration class for project types.

*/ public static final class CmsProjectType extends A_CmsModeIntEnumeration { /** Project type normal. */ protected static final CmsProjectType MODE_PROJECT_NORMAL = new CmsProjectType(0); /** Project type temporary. */ protected static final CmsProjectType MODE_PROJECT_TEMPORARY = new CmsProjectType(1); /** Project type 'workflow'. */ protected static final CmsProjectType MODE_PROJECT_WORKFLOW = new CmsProjectType(2); /** Serializable version id. */ private static final long serialVersionUID = -8701314451776599534L; /** * Private constructor.

* * @param mode the copy mode integer representation */ private CmsProjectType(int mode) { super(mode); } /** * Returns the copy mode object from the old copy mode integer.

* * @param mode the old copy mode integer * * @return the copy mode object */ public static CmsProjectType valueOf(int mode) { switch (mode) { case 0: return CmsProjectType.MODE_PROJECT_NORMAL; case 1: return CmsProjectType.MODE_PROJECT_TEMPORARY; case 2: return CmsProjectType.MODE_PROJECT_WORKFLOW; default: return CmsProjectType.MODE_PROJECT_NORMAL; } } /** * Returns the default flags which should be set when a new project of this type is created.

* * @return the default flags for the project type */ public int getDefaultFlags() { // if (getMode() == CmsProjectType.MODE_PROJECT_WORKFLOW.getMode()) { // return PROJECT_FLAG_HIDDEN; // } return PROJECT_FLAG_NONE; } } /** The serial version id. */ private static final long serialVersionUID = -4552095577282894706L; /** The name of the online project. */ public static final String ONLINE_PROJECT_NAME = "Online"; /** The id of the online project. */ public static final CmsUUID ONLINE_PROJECT_ID = CmsUUID.getConstantUUID(ONLINE_PROJECT_NAME); /** Indicates that a project is invisible in the workplace. */ public static final int PROJECT_FLAG_HIDDEN = 4; /** Indicates that a normal project. */ public static final int PROJECT_FLAG_NONE = 0; /** Indicates that a project should be hidden from the workplace project selector, but should otherwise behave the same as normal projects. */ public static final int PROJECT_HIDDEN_IN_SELECTOR = 8; /** Indicates a normal project. */ public static final CmsProjectType PROJECT_TYPE_NORMAL = CmsProjectType.MODE_PROJECT_NORMAL; /** The project type for a workflow project. */ public static final CmsProjectType PROJECT_TYPE_WORKFLOW = CmsProjectType.MODE_PROJECT_WORKFLOW; /** Indicates a temporary project that is deleted after it is published. */ public static final CmsProjectType PROJECT_TYPE_TEMPORARY = CmsProjectType.MODE_PROJECT_TEMPORARY; /** The creation date of this project. */ private long m_dateCreated; /** The description of this project. */ private String m_description; /** The state of this project. */ private int m_flags; /** The manager group id of this project. */ private CmsUUID m_groupManagersId; /** The id of the user group of this project. */ private CmsUUID m_groupUsersId; /** The id of this project. */ private CmsUUID m_id; /** The name of this project. */ private String m_name; /** The id of this projects owner. */ private CmsUUID m_ownerId; /** The type of this project. */ private CmsProjectType m_type; /** * Default constructor for gui usage.

*/ public CmsProject() { // empty } /** * Creates a new CmsProject.

* * @param projectId the id to use for this project * @param projectFqn the name for this project * @param description the description for this project * @param ownerId the owner id for this project * @param groupId the group id for this project * @param managerGroupId the manager group id for this project * @param flags the flags for this project * @param dateCreated the creation date of this project * @param type the type of this project */ public CmsProject( CmsUUID projectId, String projectFqn, String description, CmsUUID ownerId, CmsUUID groupId, CmsUUID managerGroupId, int flags, long dateCreated, CmsProjectType type) { m_id = projectId; m_name = projectFqn; m_description = description; m_ownerId = ownerId; m_groupUsersId = groupId; m_groupManagersId = managerGroupId; m_flags = flags; m_type = type; m_dateCreated = dateCreated; } /** * Throws a runtime exception if name is empty.

* * @param name the project name to check */ public static void checkProjectName(String name) { if (CmsStringUtil.isEmptyOrWhitespaceOnly(name)) { throw new CmsIllegalArgumentException(Messages.get().container(Messages.ERR_PROJECTNAME_VALIDATION_0)); } } /** * Checks if the full resource name (including the site root) of a resource matches * any of the project resources of a project.

* * @param projectResources a List of project resources as Strings * @param resource the resource to check * @return true, if the resource is "inside" the project resources */ public static boolean isInsideProject(List projectResources, CmsResource resource) { String resourcename = resource.getRootPath(); return isInsideProject(projectResources, resourcename); } /** * Checks if the full resource name (including the site root) of a resource matches * any of the project resources of a project.

* * @param projectResources a List of project resources as Strings * @param resourcename the resource to check * @return true, if the resource is "inside" the project resources */ public static boolean isInsideProject(List projectResources, String resourcename) { for (int i = (projectResources.size() - 1); i >= 0; i--) { String projectResource = projectResources.get(i); if (CmsResource.isFolder(projectResource)) { if (resourcename.startsWith(projectResource)) { // folder - check only the prefix return true; } } else { if (resourcename.equals(projectResource)) { // file - check the full path return true; } } } return false; } /** * Returns true if the given project id is the online project id.

* * @param projectId the project id to check * @return true if the given project id is the online project id */ public static boolean isOnlineProject(CmsUUID projectId) { return projectId.equals(CmsProject.ONLINE_PROJECT_ID); } /** * @see java.lang.Object#clone() */ @Override public Object clone() { return new CmsProject( m_id, m_name, m_description, m_ownerId, m_groupUsersId, m_groupManagersId, m_flags, m_dateCreated, m_type); } /** * Compares this instance to another given object instance of this class .

* * @param o the other given object instance to compare with * @return integer value for sorting the objects */ public int compareTo(CmsProject o) { if (o == this) { return 0; } // compare the names return m_name.compareTo(o.getName()); } /** * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof CmsProject) { return ((CmsProject)obj).m_id.equals(m_id); } return false; } /** * Returns the creation date of this project.

* * @return the creation date of this project */ public long getDateCreated() { return m_dateCreated; } /** * Returns the description of this project. * * @return the description of this project */ public String getDescription() { return m_description; } /** * Returns the state of this project.

* * @return the state of this project */ public int getFlags() { return m_flags; } /** * Returns the user group id of this project.

* * @return the user group id of this project */ public CmsUUID getGroupId() { return m_groupUsersId; } /** * Returns the manager group id of this project.

* * @return the manager group id of this project */ public CmsUUID getManagerGroupId() { return m_groupManagersId; } /** * Returns the name of this project.

* * @return the name of this project */ public String getName() { return m_name; } /** * Returns the fully qualified name of the associated organizational unit.

* * @return the fully qualified name of the associated organizational unit */ public String getOuFqn() { return CmsOrganizationalUnit.getParentFqn(m_name); } /** * Returns the user id of the project owner.

* * @return the user id of the project owner */ public CmsUUID getOwnerId() { return m_ownerId; } /** * Returns the simple name of this organizational unit. * * @return the simple name of this organizational unit. */ public String getSimpleName() { return CmsOrganizationalUnit.getSimpleName(m_name); } /** * Returns the type of this project.

* * @return the type of this project */ public CmsProjectType getType() { return m_type; } /** * Returns the id of this project.

* * @return the id of this project */ public CmsUUID getUuid() { return m_id; } /** * @see java.lang.Object#hashCode() */ @Override public int hashCode() { if (m_name != null) { return m_name.hashCode(); } return 0; } /** * Returns the delete After Publishing flag.

* * @return the delete After Publishing flag * * @see #getType() */ public boolean isDeleteAfterPublishing() { return (m_type == CmsProject.PROJECT_TYPE_TEMPORARY); } /** * Returns the 'hidden' flag.

* * @return the 'hidden' flag * * @see #getFlags() */ public boolean isHidden() { return (getFlags() & PROJECT_FLAG_HIDDEN) == PROJECT_FLAG_HIDDEN; } /** * Checks if the project should be hidden from the project selector in the workplace.

* * @return true if the project should not appear in the workplace's project selector */ public boolean isHiddenFromSelector() { return isWorkflowProject() || (0 != (getFlags() & PROJECT_HIDDEN_IN_SELECTOR)); } /** * Returns true if this project is the Online project.

* * @return true if this project is the Online project */ public boolean isOnlineProject() { return isOnlineProject(m_id); } /** * Returns true if this is a workflow project.

* * @return true if this is a workflow project */ public boolean isWorkflowProject() { return getType().getMode() == PROJECT_TYPE_WORKFLOW.getMode(); } /** * Sets the delete After Publishing flag.

* * @param deleteAfterPublishing the delete After Publishing flag to set */ public void setDeleteAfterPublishing(boolean deleteAfterPublishing) { m_type = deleteAfterPublishing ? CmsProject.PROJECT_TYPE_TEMPORARY : CmsProject.PROJECT_TYPE_NORMAL; } /** * Sets the description of this project.

* * @param description the description to set */ public void setDescription(String description) { m_description = description; } /** * Sets the flags of this project.

* * @param flags the flag to set */ public void setFlags(int flags) { m_flags = flags; } /** * Sets the user group id of this project.

* * @param id the user group id of this project */ public void setGroupId(CmsUUID id) { CmsUUID.checkId(id, false); m_groupUsersId = id; } /** * Sets the 'hidden' flag.

* * @param value the value to set */ public void setHidden(boolean value) { if (isHidden() != value) { setFlags(getFlags() ^ PROJECT_FLAG_HIDDEN); } } /** * Sets the manager group id of this project.

* * @param id the manager group id of this project */ public void setManagerGroupId(CmsUUID id) { CmsUUID.checkId(id, false); m_groupManagersId = id; } /** * Sets the name.

* * @param name the name to set */ public void setName(String name) { checkProjectName(name); m_name = name; } /** * Sets the owner id of this project.

* * @param id the id of the new owner */ public void setOwnerId(CmsUUID id) { CmsUUID.checkId(id, false); m_ownerId = id; } /** * @see java.lang.Object#toString() */ @Override public String toString() { StringBuffer result = new StringBuffer(); result.append("[Project]:"); result.append(m_name); result.append(" , Id="); result.append(m_id); result.append(", Desc="); result.append(m_description); return result.toString(); } /** * Sets the type of this project.

* * @param type the type to set */ void setType(CmsProjectType type) { m_type = type; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy