cmspublishlist.java
来自「找了很久才找到到源代码」· Java 代码 · 共 638 行 · 第 1/2 页
JAVA
638 行
/*
* File : $Source: /usr/local/cvs/opencms/src/org/opencms/db/CmsPublishList.java,v $
* Date : $Date: 2007-08-13 16:30:03 $
* Version: $Revision: 1.28 $
*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) 2002 - 2007 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.db;
import org.opencms.file.CmsObject;
import org.opencms.file.CmsProject;
import org.opencms.file.CmsResource;
import org.opencms.file.CmsResourceFilter;
import org.opencms.main.CmsException;
import org.opencms.main.CmsIllegalArgumentException;
import org.opencms.main.CmsLog;
import org.opencms.util.CmsFileUtil;
import org.opencms.util.CmsUUID;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.logging.Log;
/**
* A container for all new/changed/deteled Cms resources that are published together.<p>
*
* Only classes inside the org.opencms.db package can add or remove elements to or from this list.
* This allows the OpenCms API to pass the list around between classes, but with restricted access to
* create this list.<p>
*
* To create a publish list, one of the public constructors must be used in order to set the basic operation mode
* (project publish or direct publish).
* After this, use <code>{@link org.opencms.db.CmsDriverManager#fillPublishList(CmsDbContext, CmsPublishList)}</code>
* to fill the actual values of the publish list.<p>
*
* @author Alexander Kandzior
* @author Thomas Weckert
*
* @version $Revision: 1.28 $
*
* @since 6.0.0
*
* @see org.opencms.db.CmsDriverManager#fillPublishList(CmsDbContext, CmsPublishList)
*/
public class CmsPublishList implements Externalizable {
/** The log object for this class. */
private static final Log LOG = CmsLog.getLog(CmsPublishList.class);
/** Indicates a non existent object in the serialized data. */
private static final int NIL = -1;
/** Serial version UID required for safe serialization. */
private static final long serialVersionUID = -2578909250462750927L;
/** Length of a serialized uuid. */
private static final int UUID_LENGTH = CmsUUID.getNullUUID().toByteArray().length;
/** The list of deleted Cms folder resources to be published.<p> */
private List m_deletedFolderList;
/** The list of direct publish resources. */
private List m_directPublishResources;
/** The list of new/changed/deleted Cms file resources to be published.<p> */
private List m_fileList;
/** The list of new/changed Cms folder resources to be published.<p> */
private List m_folderList;
/** Flag to indicate if the list needs to be revived. */
private boolean m_needsRevive = false;
/** The id of the project that is to be published. */
private CmsUUID m_projectId;
/** The publish history ID.<p> */
private CmsUUID m_publishHistoryId;
/** Indicates if siblings of the resources in the list should also be published. */
private boolean m_publishSiblings;
/** Indicates if sub-resources in folders should be published (for direct publish only). */
private boolean m_publishSubResources;
/**
* Empty constructor.<p>
*/
public CmsPublishList() {
// noop
}
/**
* Constructs a publish list for a given project.<p>
*
* @param project the project to publish, this should always be the id of the current project
*/
public CmsPublishList(CmsProject project) {
this(project, null, false, true);
}
/**
* Constructs a publish list for a single direct publish resource.<p>
*
* @param directPublishResource a VFS resource to be published directly
* @param publishSiblings indicates if all siblings of the selected resources should be published
*/
public CmsPublishList(CmsResource directPublishResource, boolean publishSiblings) {
this(null, Collections.singletonList(directPublishResource), publishSiblings, true);
}
/**
* Constructs a publish list for a list of direct publish resources.<p>
*
* @param directPublishResources a list of <code>{@link CmsResource}</code> instances to be published directly
* @param publishSiblings indicates if all siblings of the selected resources should be published
*/
public CmsPublishList(List directPublishResources, boolean publishSiblings) {
this(null, directPublishResources, publishSiblings, true);
}
/**
* Constructs a publish list for a list of direct publish resources.<p>
*
* @param directPublishResources a list of <code>{@link CmsResource}</code> instances to be published directly
* @param publishSiblings indicates if all siblings of the selected resources should be published
* @param publishSubResources indicates if sub-resources in folders should be published (for direct publish only)
*/
public CmsPublishList(List directPublishResources, boolean publishSiblings, boolean publishSubResources) {
this(null, directPublishResources, publishSiblings, publishSubResources);
}
/**
* Internal constructor for a publish list.<p>
*
* @param project the project to publish
* @param directPublishResources the list of direct publish resources
* @param publishSiblings indicates if all siblings of the selected resources should be published
* @param publishSubResources indicates if sub-resources in folders should be published (for direct publish only)
*/
private CmsPublishList(
CmsProject project,
List directPublishResources,
boolean publishSiblings,
boolean publishSubResources) {
m_fileList = new ArrayList();
m_folderList = new ArrayList();
m_deletedFolderList = new ArrayList();
m_publishHistoryId = new CmsUUID();
m_publishSiblings = publishSiblings;
m_publishSubResources = publishSubResources;
m_projectId = (project != null) ? project.getUuid() : null;
if (directPublishResources != null) {
// reduce list of folders to minimum
m_directPublishResources = Collections.unmodifiableList(CmsFileUtil.removeRedundantResources(directPublishResources));
}
}
/**
* Returns a list of all resources in the publish list,
* including folders and files.<p>
*
* @return a list of {@link CmsResource} objects
*/
public List getAllResources() {
List all = new ArrayList();
all.addAll(m_folderList);
all.addAll(m_fileList);
all.addAll(m_deletedFolderList);
Collections.sort(all, CmsResource.COMPARE_ROOT_PATH);
return Collections.unmodifiableList(all);
}
/**
* Returns a list of folder resources with the given state.<p>
*
* @return a list of folder resources with the desired state
*/
public List getDeletedFolderList() {
if (m_needsRevive) {
return null;
} else {
return m_deletedFolderList;
}
}
/**
* Returns the list of resources that should be published for a "direct" publish operation.<p>
*
* Will return <code>null</code> if this publish list was not initilaized for a "direct publish" but
* for a project publish.<p>
*
* @return the list of resources that should be published for a "direct" publish operation, or <code>null</code>
*/
public List getDirectPublishResources() {
if (m_needsRevive) {
return null;
} else {
return m_directPublishResources;
}
}
/**
* Returns an unmodifiable list of the Cms file resources in this publish list.<p>
*
* @return the list with the Cms file resources in this publish list
*/
public List getFileList() {
if (m_needsRevive) {
return null;
} else {
return Collections.unmodifiableList(m_fileList);
}
}
/**
* Returns an unmodifiable list of the new/changed Cms folder resources in this publish list.<p>
*
* @return the list with the new/changed Cms file resources in this publish list
*/
public List getFolderList() {
if (m_needsRevive) {
return null;
} else {
return Collections.unmodifiableList(m_folderList);
}
}
/**
* Returns the id of the project that should be published, or <code>-1</code> if this publish list
* is initialized for a "direct publish" operation.<p>
*
* @return the id of the project that should be published, or <code>-1</code>
*/
public CmsUUID getProjectId() {
return m_projectId;
}
/**
* Returns the publish history Id for this publish list.<p>
*
* @return the publish history Id
*/
public CmsUUID getPublishHistoryId() {
return m_publishHistoryId;
}
/**
* Checks if this is a publish list is used for a "direct publish" operation.<p>
*
* @return true if this is a publish list is used for a "direct publish" operation
*/
public boolean isDirectPublish() {
return (m_projectId == null);
}
/**
* Returns <code>true</code> if all siblings of the project resources are to be published.<p>
*
* @return <code>true</code> if all siblings of the project resources are to be publisheds
*/
public boolean isPublishSiblings() {
return m_publishSiblings;
}
/**
* Returns <code>true</code> if sub-resources in folders should be published (for direct publish only).<p>
*
* @return <code>true</code> if sub-resources in folders should be published (for direct publish only)
*/
public boolean isPublishSubResources() {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?