199 lines
6.5 KiB
Java
Executable File
199 lines
6.5 KiB
Java
Executable File
/*
|
|
* Copyright (C) 2003-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.ui;
|
|
|
|
import com.arsdigita.bebop.Component;
|
|
import com.arsdigita.bebop.SimpleContainer;
|
|
import com.arsdigita.bebop.TabbedPane;
|
|
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
|
import com.arsdigita.bebop.parameters.StringParameter;
|
|
import com.arsdigita.cms.CMSExcursion;
|
|
import com.arsdigita.cms.ContentItem;
|
|
import com.arsdigita.cms.ContentSection;
|
|
import com.arsdigita.cms.dispatcher.CMSPage;
|
|
import com.arsdigita.dispatcher.RequestContext;
|
|
import com.arsdigita.domain.DataObjectNotFoundException;
|
|
import com.arsdigita.templating.PresentationManager;
|
|
import com.arsdigita.templating.Templating;
|
|
import com.arsdigita.util.UncheckedWrapperException;
|
|
import com.arsdigita.xml.Document;
|
|
import com.arsdigita.web.Web;
|
|
import com.arsdigita.web.Application;
|
|
import java.io.IOException;
|
|
import java.math.BigDecimal;
|
|
import javax.servlet.ServletException;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
/**
|
|
* <p>The Item Search page.</p>
|
|
*
|
|
* @author Scott Seago (scott@arsdigita.com)
|
|
* @version $Revision: #12 $ $DateTime: 2004/08/17 23:15:09 $
|
|
*/
|
|
public class ItemSearchPage extends CMSPage {
|
|
private final static String XSL_CLASS = "CMS Admin";
|
|
|
|
private TabbedPane m_tabbedPane;
|
|
|
|
private ItemSearchBrowsePane m_browse;
|
|
private ItemSearchPopup m_search;
|
|
private BigDecimalParameter m_sectionId;
|
|
|
|
public static final String CONTENT_SECTION = "section_id";
|
|
|
|
/**
|
|
* Construct a new ItemSearchPage
|
|
*/
|
|
public ItemSearchPage() {
|
|
super("Item Search", new SimpleContainer());
|
|
|
|
setClassAttr("cms-admin");
|
|
|
|
addGlobalStateParam
|
|
(new BigDecimalParameter(ItemSearch.SINGLE_TYPE_PARAM));
|
|
addGlobalStateParam(new StringParameter(ItemSearchPopup.WIDGET_PARAM));
|
|
|
|
m_sectionId = new BigDecimalParameter(CONTENT_SECTION);
|
|
addGlobalStateParam(m_sectionId);
|
|
|
|
m_browse = getBrowsePane();
|
|
m_search = getSearchPane();
|
|
|
|
m_tabbedPane = createTabbedPane();
|
|
m_tabbedPane.setIdAttr("page-body");
|
|
add(m_tabbedPane);
|
|
}
|
|
|
|
|
|
/**
|
|
* Creates, and then caches, the Browse pane. Overriding this
|
|
* method to return null will prevent this tab from appearing.
|
|
* Note: not implemented yet.
|
|
*/
|
|
protected ItemSearchBrowsePane getBrowsePane() {
|
|
if (m_browse == null) {
|
|
m_browse = new ItemSearchBrowsePane();
|
|
}
|
|
|
|
return m_browse;
|
|
}
|
|
|
|
/**
|
|
* Creates, and then caches, the Creation pane. Overriding this
|
|
* method to return null will prevent this tab from appearing.
|
|
*/
|
|
protected ItemSearchPopup getSearchPane() {
|
|
if (m_search == null) {
|
|
m_search = new ItemSearchPopup(ContentItem.DRAFT);
|
|
}
|
|
|
|
return m_search;
|
|
}
|
|
|
|
|
|
/**
|
|
* Created the TabbedPane to use for this page. Sets the class
|
|
* attribute for this tabbed pane. The default implementation uses a
|
|
* {@link com.arsdigita.bebop.TabbedPane} and sets the class
|
|
* attribute to "CMS Admin." This implementation also adds tasks,
|
|
* content sections, and search panes.
|
|
*
|
|
* Developers can override this method to add only the tabs they
|
|
* want, or to add additional tabs after the default CMS tabs are
|
|
* added.
|
|
*/
|
|
protected TabbedPane createTabbedPane() {
|
|
TabbedPane pane = new TabbedPane();
|
|
pane.setClassAttr(XSL_CLASS);
|
|
addToPane(pane, "Browse", getBrowsePane());
|
|
addToPane(pane, "Search", getSearchPane());
|
|
pane.setDefaultPane(m_browse);
|
|
//pane.addActionListener(this);
|
|
return pane;
|
|
}
|
|
|
|
|
|
/**
|
|
* Adds the specified component, with the specified tab name, to the
|
|
* tabbed pane only if it is not null.
|
|
*
|
|
* @param pane The pane to which to add the tab
|
|
* @param tabName The name of the tab if it's added
|
|
* @param comp The component to add to the pane
|
|
*/
|
|
protected void addToPane(TabbedPane pane, String tabName, Component comp) {
|
|
if (comp != null) {
|
|
pane.addTab(tabName, comp);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* When a new tab is selected, reset the state of the
|
|
* formerly-selected pane.
|
|
*
|
|
* @param event The event fired by selecting a tab
|
|
*/
|
|
//public void actionPerformed(ActionEvent event) {
|
|
//PageState state = event.getPageState();
|
|
//Component pane = m_tabbedPane.getCurrentPane(state);
|
|
|
|
//if ( pane == m_browse ) {
|
|
// MP: reset tasks pane
|
|
//} else if ( pane == m_search ) {
|
|
//m_search.reset(state);
|
|
//}
|
|
//}
|
|
|
|
/**
|
|
* This strange voodoo from Dan. No idea what it does.
|
|
*/
|
|
public void dispatch(final HttpServletRequest request,
|
|
final HttpServletResponse response,
|
|
RequestContext actx)
|
|
throws IOException, ServletException {
|
|
new CMSExcursion() {
|
|
public void excurse()
|
|
throws IOException, ServletException {
|
|
ContentSection section = null;
|
|
Application app = Web.getContext().getApplication();
|
|
if (app instanceof ContentSection) {
|
|
section = (ContentSection)app;
|
|
} else {
|
|
try {
|
|
section = new ContentSection
|
|
((BigDecimal) m_sectionId.transformValue(request));
|
|
} catch (DataObjectNotFoundException ex) {
|
|
throw new UncheckedWrapperException(ex);
|
|
}
|
|
}
|
|
setContentSection(section);
|
|
|
|
|
|
final Document doc = buildDocument(request, response);
|
|
final PresentationManager pm =
|
|
Templating.getPresentationManager();
|
|
|
|
pm.servePage(doc, request, response);
|
|
}
|
|
}.run();
|
|
}
|
|
}
|