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

org.opencms.relations.CmsCategory 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 (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, 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.relations;

import org.opencms.file.CmsDataAccessException;
import org.opencms.file.CmsResource;
import org.opencms.main.CmsException;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;

import java.io.Serializable;

/**
 * Represents a category, that is just a folder.

* * The category can be centralized under /system/categories/, * or decentralized in every folder.

* * For instance, you can have a category folder under /sites/default/ * so, any file under /sites/default/ could be assigned to any * category defined under /system/categories/ or * /sites/default/categories.

* * But a file under /sites/othersite/ will only be assignable to * categories defined in /system/categories/.

* * @since 6.9.2 */ public class CmsCategory implements Comparable, Serializable { /** The serialization id. */ private static final long serialVersionUID = -6395887983124249138L; /** The category's base path. */ private String m_basePath; /** The description of the category. */ private String m_description; /** The path of the category. */ private String m_path; /** The category's root path. */ private String m_rootPath; /** The structure id of the resource that this category represents. */ private CmsUUID m_structureId; /** The title of the category. */ private String m_title; /** * Default constructor.

* * @param structureId the structure id of the resource that this category represents * @param rootPath the root path of the category folder * @param title the title of the category * @param description the description of the category * @param baseFolder the base categories folder * * @throws CmsException if the root path does not match the given base folder */ public CmsCategory(CmsUUID structureId, String rootPath, String title, String description, String baseFolder) throws CmsException { m_structureId = structureId; m_rootPath = rootPath; m_title = title; m_description = description; m_path = getCategoryPath(m_rootPath, baseFolder); m_basePath = m_rootPath.substring(0, m_rootPath.length() - m_path.length()); } /** * Empty default constructor which is only used for serialization.

*/ protected CmsCategory() { // do nothing } /** * Returns the category path for the given root path.

* * @param rootPath the root path * @param baseFolder the categories base folder name * * @return the category path * * @throws CmsException if the root path does not match the given base folder */ public static String getCategoryPath(String rootPath, String baseFolder) throws CmsException { String base; if (rootPath.startsWith(CmsCategoryService.CENTRALIZED_REPOSITORY)) { base = CmsCategoryService.CENTRALIZED_REPOSITORY; } else { base = baseFolder; if (!base.endsWith("/")) { base += "/"; } if (!base.startsWith("/")) { base = "/" + base; } int pos = rootPath.indexOf(base); if (pos < 0) { throw new CmsDataAccessException( Messages.get().container(Messages.ERR_CATEGORY_INVALID_LOCATION_1, rootPath)); } base = rootPath.substring(0, pos + base.length()); } return rootPath.substring(base.length()); } /** * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(CmsCategory cat) { boolean thisGlobal = getBasePath().equals(CmsCategoryService.CENTRALIZED_REPOSITORY); boolean thatGlobal = cat.getBasePath().equals(CmsCategoryService.CENTRALIZED_REPOSITORY); if ((thisGlobal && thatGlobal) || (!thisGlobal && !thatGlobal)) { return getPath().compareTo(cat.getPath()); } return thisGlobal ? -1 : 1; } /** * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (!(obj instanceof CmsCategory)) { return false; } CmsCategory compareCategory = (CmsCategory)obj; if (!compareCategory.getPath().equals(getPath())) { return false; } return true; } /** * Returns the category's base path.

* * @return the category's base path */ public String getBasePath() { return m_basePath; } /** * Returns the description.

* * @return the description */ public String getDescription() { return m_description; } /** * Returns the id.

* * @return the id */ public CmsUUID getId() { return m_structureId; } /** * Returns the mere category name without it's complete path and without the trailing folder - slash.

* * @return the mere category name without it's complete path and without the trailing folder - slash */ public String getName() { if (CmsStringUtil.isEmptyOrWhitespaceOnly(m_path)) { return ""; } String result = CmsResource.getName(m_path); // remove trailing slash as categories are not displayed like folders if (CmsResource.isFolder(result)) { result = result.substring(0, result.length() - 1); } return result; } /** * Returns the path.

* * @return the path */ public String getPath() { return m_path; } /** * Returns the category's root path.

* * @return the category's root path */ public String getRootPath() { return m_rootPath; } /** * Returns the title.

* * @return the title */ public String getTitle() { return m_title; } /** * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return getPath().hashCode(); } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "[" + CmsCategory.class.getSimpleName() + "/" + System.identityHashCode(this) + ": " + m_rootPath + " ]"; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy