libreccm-legacy/ccm-cms/src/com/arsdigita/cms/CMSContext.java

171 lines
5.0 KiB
Java
Executable File

/*
* Copyright (C) 2002-2004 Red Hat Inc. All Rights Reserved.
*
* 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.
*
* 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 com.arsdigita.cms;
import com.arsdigita.util.Assert;
import org.apache.log4j.Logger;
/**
* <p>The entry point into all the global state that CCM CMS code expects to
* have available to it when running, e.g. the current content section,
* current item
*
* <p>This is a session object that provides an environment in which
* code can execute. The CMSContext contains all session-specific
* variables. One session object is maintained per thread.</p>
*
* <p>Accessors of this class will assert that the item it returned is
* not null. If the caller wants to handle the case where an item is
* null explicitly, then use the hasContentItem and hasContentSection
* methods first.
*
* @see com.arsdigita.kernel.KernelContext
* @see com.arsdigita.cms.CMS
*
* @author Daniel Berrange
* @version $Id: CMSContext.java 2090 2010-04-17 08:04:14Z pboy $
*/
public final class CMSContext {
private static final Logger s_log = Logger.getLogger(CMSContext.class);
private ContentSection m_section = null;
private ContentItem m_item = null;
private SecurityManager m_security = null;
CMSContext() {
// Empty
}
public final String getDebugInfo() {
final String info = "Current state of " + this + ":\n" +
" getContentSection() -> " + getContentSection() + "\n" +
" getContentItem() -> " + getContentItem() + "\n" +
" getSecurityManager() -> " + getSecurityManager();
return info;
}
final CMSContext copy() {
final CMSContext result = new CMSContext();
result.m_section = m_section;
result.m_item = m_item;
result.m_security = m_security;
return result;
}
/**
* Checks if a content section is available
* @return true if a content section is available
*/
public final boolean hasContentSection() {
return m_section != null;
}
/**
* Gets the current content section
* not anymore: hasContentSection() == true
* @return the currently selected content section
*/
public final ContentSection getContentSection() {
// removing this which is not true when viewing category pages
//Assert.exists(m_section, "section");
return m_section;
}
/**
* Sets the current content section
* @param section the new content section
*/
public final void setContentSection(final ContentSection section) {
m_section = section;
if (s_log.isDebugEnabled()) {
s_log.debug("Content section set to " + section);
}
}
/**
* Checks if a content item is available
* @return true if a content item is available
*/
public final boolean hasContentItem() {
return m_item != null;
}
/**
* Returns the current content item
* @pre hasContentItem() == true
* @return the current content item
*/
public final ContentItem getContentItem() {
// removing this which is necessarily true in ContentList
//Assert.exists(m_item, "item");
if (s_log.isDebugEnabled() && m_item == null) {
s_log.debug("Content item is null");
}
return m_item;
}
/**
* Sets the current content item
* @param item the new content item
*/
public final void setContentItem(final ContentItem item) {
m_item = item;
if (s_log.isDebugEnabled()) {
s_log.debug("Content item set to " + item);
}
}
/**
* Checks if there is a CMS <code>SecurityManager</code> for this
* session.
*
* @see com.arsdigita.cms.SecurityManager
* @return <code>true</code> if a security manager is available
*/
public final boolean hasSecurityManager() {
return m_security != null;
}
/**
* Returns the current security manager.
*
* @return the current security manager
*/
public final SecurityManager getSecurityManager() {
Assert.exists(m_security, SecurityManager.class);
return m_security;
}
public final void setSecurityManager(final SecurityManager security) {
m_security = security;
if (s_log.isDebugEnabled()) {
s_log.debug("Security manager set to " + security);
}
}
}