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

org.opencms.db.CmsPublishedResource Maven / Gradle / Ivy

/*
 * 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.db;

import org.opencms.file.CmsResource;
import org.opencms.util.CmsUUID;

import java.io.Serializable;

/**
 * Represents the state of a published resource *before* it got published.

* * This allows various subsequent tasks in the Cms app. (e.g. exporting files and folders) * to identify published resources after a resource or project was published.

* * The values to fill this container are read from the Cms publish history database table * that is written during each publishing process.

* * @since 6.0.0 * * @see org.opencms.db.I_CmsProjectDriver#readPublishedResources(CmsDbContext, CmsUUID) */ public class CmsPublishedResource implements Serializable, Comparable { /** * Add new resource states under consideration of the move operation.

*/ public static class CmsPublishedResourceState extends CmsResourceState { /** The serial version id. */ private static final long serialVersionUID = -2901049208546972463L; /** * protected constructor.

* * @param state an integer representing the state * @param abbrev an abbreviation character */ protected CmsPublishedResourceState(int state, char abbrev) { super(state, abbrev); } /** * Returns the corresponding resource state for this publish resource state.

* * @return the corresponding resource state */ public CmsResourceState getResourceState() { if (this == STATE_MOVED_SOURCE) { return CmsResource.STATE_DELETED; } else if (this == STATE_MOVED_DESTINATION) { return CmsResource.STATE_NEW; } else { return null; } } } /** Additional state for moved resources, the (new) destination of the moved resource. */ public static final CmsPublishedResourceState STATE_MOVED_DESTINATION = new CmsPublishedResourceState(12, 'M'); /** Additional state for moved resources, the (deleted) source of the moved resource. */ public static final CmsPublishedResourceState STATE_MOVED_SOURCE = new CmsPublishedResourceState(11, ' '); /** Serial version UID required for safe serialization. */ private static final long serialVersionUID = -1054065812825770479L; /** Indicates if the published resource is a folder or a file. */ private boolean m_isFolder; /** Flag to signal if the resource was moved. */ private boolean m_isMoved; /** The publish tag of the published resource. */ private int m_publishTag; /** The resource ID of the published resource.

*/ private CmsUUID m_resourceId; /** The state of the resource *before* it was published.

*/ private CmsResourceState m_resourceState; /** The type of the published resource.

*/ private int m_resourceType; /** The root path of the published resource.

*/ private String m_rootPath; /** The count of siblings of the published resource. */ private int m_siblingCount; /** The structure ID of the published resource.

*/ private CmsUUID m_structureId; /** * Creates an object for published VFS resources.

* * Do not write objects created with this constructor to db, since the publish tag is not set.

* * @param resource an CmsResource object to create a CmsPublishedResource from */ public CmsPublishedResource(CmsResource resource) { this(resource, -1); } /** * Creates an object for published VFS resources.

* * @param resource an CmsResource object to create a CmsPublishedResource from * @param publishTag the publish Tag */ public CmsPublishedResource(CmsResource resource, int publishTag) { this(resource, publishTag, resource.getState()); } /** * Creates an object for published VFS resources.

* * @param resource an CmsResource object to create a CmsPublishedResource from * @param state the resource state * @param publishTag the publish tag */ public CmsPublishedResource(CmsResource resource, int publishTag, CmsResourceState state) { this( resource.getStructureId(), resource.getResourceId(), publishTag, resource.getRootPath(), resource.getTypeId(), resource.isFolder(), state, resource.getSiblingCount()); } /** * Creates an object for published VFS resources.

* * @param structureId the structure ID of the published resource * @param resourceId the resource ID of the published resource * @param publishTag the publish tag * @param rootPath the root path of the published resource * @param resourceType the type of the published resource * @param isFolder indicates if the published resource is a folder or a file * @param resourceState the state of the resource *before* it was published * @param siblingCount count of siblings of the published resource */ public CmsPublishedResource( CmsUUID structureId, CmsUUID resourceId, int publishTag, String rootPath, int resourceType, boolean isFolder, CmsResourceState resourceState, int siblingCount) { m_structureId = structureId; m_resourceId = resourceId; m_publishTag = publishTag; m_rootPath = rootPath; m_resourceType = resourceType; m_isFolder = isFolder; if (resourceState instanceof CmsPublishedResourceState) { m_resourceState = ((CmsPublishedResourceState)resourceState).getResourceState(); m_isMoved = true; } else { m_resourceState = resourceState; } m_siblingCount = siblingCount; } /** * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(CmsPublishedResource obj) { if (obj == this) { return 0; } if (m_rootPath != null) { return m_rootPath.compareTo(obj.m_rootPath); } return 0; } /** * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof CmsPublishedResource) { if (m_structureId.isNullUUID()) { return ((CmsPublishedResource)obj).m_resourceId.equals(m_resourceId); } else { return ((CmsPublishedResource)obj).m_structureId.equals(m_structureId); } } return false; } /** * Returns the resource state including move operation information.

* * @return the resource state including move operation information */ public CmsResourceState getMovedState() { if (!m_isMoved) { return getState(); } else if (getState().isDeleted()) { return STATE_MOVED_SOURCE; } else if (getState().isNew()) { return STATE_MOVED_DESTINATION; } else { // should never happen return getState(); } } /** * Returns the publish tag of the published resource.

* * @return the publish tag of the published resource */ public int getPublishTag() { return m_publishTag; } /** * Returns the resource ID of the published resource.

* * @return the resource ID of the published resource */ public CmsUUID getResourceId() { return m_resourceId; } /** * Returns the root path of the published resource.

* * @return the root path of the published resource */ public String getRootPath() { return m_rootPath; } /** * Returns the count of siblings of the published resource.

* * If a resource has no sibling, the total sibling count for this resource is 1, * if a resource has n siblings, the sibling count is n + 1.

* * @return the count of siblings of the published resource */ public int getSiblingCount() { return m_siblingCount; } /** * Returns the resource state of the published resource.

* * @return the resource state of the published resource */ public CmsResourceState getState() { return m_resourceState; } /** * Returns the structure ID of the published resource.

* * @return the structure ID of the published resource */ public CmsUUID getStructureId() { return m_structureId; } /** * Returns the resource type of the published resource.

* * @return the resource type of the published resource */ public int getType() { return m_resourceType; } /** * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return m_structureId.isNullUUID() ? m_resourceId.hashCode() : m_structureId.hashCode(); } /** * Determines if this resource is a file.

* * @return true if this resource is a file, false otherwise */ public boolean isFile() { return !m_isFolder; } /** * Checks if this resource is a folder.

* * @return true if this is is a folder */ public boolean isFolder() { return m_isFolder; } /** * Returns true if the resource has been moved.

* * @return true if the resource has been moved */ public boolean isMoved() { return m_isMoved; } /** * Sets the resource state of the published resource.

* * This is sometimes required for offline search index generation.

* * @param state the new state to set */ public void setState(CmsResourceState state) { m_resourceState = state; } /** * @see java.lang.Object#toString() */ @Override public String toString() { StringBuffer result = new StringBuffer(128); result.append("["); result.append(this.getClass().getName()); result.append(": root path: "); result.append(m_rootPath); result.append(", structure ID: "); result.append(m_structureId); result.append(", resource ID: "); result.append(m_resourceId); result.append(", publish tag: "); result.append(m_publishTag); result.append(", siblings: "); result.append(m_siblingCount); result.append(", state: "); result.append(m_resourceState); result.append(", type: "); result.append(m_resourceType); result.append("]"); return result.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy