diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java index 8894937a2..0e6295b5c 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/ContentSectionPage.java @@ -34,7 +34,6 @@ import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.ContentSection; import com.arsdigita.cms.dispatcher.CMSPage; -import com.arsdigita.cms.ui.workflow.WorkflowAdminPane; import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.util.Assert; @@ -125,8 +124,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { private ItemSearch m_searchPane; - private WorkflowAdminPane m_workflowPane; - /** * Creates the content section index page containing - a Navigaton bar for * the various tasks (items, search, images, ....) - a breadcrumb - .... @@ -142,7 +139,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { // Initialize the individual panes m_browsePane = getBrowsePane(); m_searchPane = getSearchPane(); - m_workflowPane = getWorkflowAdminPane(); // The panes m_tabbedPane = createTabbedPane(); @@ -167,11 +163,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { .createCdiUtil().findBean(PermissionChecker.class); if (CMSConfig.getConfig().isHideAdminTabs()) { - m_tabbedPane.setTabVisible( - state, - m_workflowPane, - permissionChecker.isPermitted( - AdminPrivileges.ADMINISTER_WORKFLOWS)); } } @@ -208,17 +199,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { return m_searchPane; } - /** - * Creates, and then caches, the workflow administration pane. Overriding - * this method to return null will prevent this tab from appearing. - */ - protected WorkflowAdminPane getWorkflowAdminPane() { - if (m_workflowPane == null) { - m_workflowPane = new WorkflowAdminPane(); - } - return m_workflowPane; - } - /** * Adds the specified component, with the specified tab name, to the tabbed * pane only if it is not null. @@ -262,7 +242,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { tab(pane, "cms.ui.browse", getBrowsePane()); tab(pane, "cms.ui.search", getSearchPane()); - tab(pane, "cms.ui.workflows", getWorkflowAdminPane()); return pane; } @@ -293,15 +272,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { final PageState state = event.getPageState(); final Component pane = m_tabbedPane.getCurrentPane(state); - -//ToDo NG if (pane == m_searchPane) { -// m_searchPane.reset(state); -// } else if (pane == m_imagesPane) { -// m_imagesPane.reset(state); -// } else - if (pane == m_workflowPane) { - m_workflowPane.reset(state); - } } /** diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/ContentSectionContainer.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/ContentSectionContainer.java deleted file mode 100755 index 87a56b0cd..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/ContentSectionContainer.java +++ /dev/null @@ -1,637 +0,0 @@ -/* - * Copyright (C) 2001-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.contentcenter; - - -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.Embedded; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Link; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.parameters.BigDecimalParameter; -import com.arsdigita.bebop.table.TableCellRenderer; -import com.arsdigita.bebop.table.TableColumn; -import com.arsdigita.bebop.table.TableColumnModel; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; -import com.arsdigita.cms.PageLocations; -import com.arsdigita.cms.ui.CMSContainer; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.LockableImpl; - -import org.libreccm.categorization.Category; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.security.PermissionChecker; -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentSectionRepository; -import org.librecms.contentsection.privileges.ItemPrivileges; - -import java.util.List; -import java.util.stream.Collectors; - - -/** - * Displays all the content sections in table, with links to the admin (and in - * legacy mode to legacy public pages as well). Also displays a form for each - * content section to create an object of a given type (configurable). The list - * of available types retrieved for each content section. - * - *

- * This class is a container for two other components: a form and a table. The - * form represents the drop down list of the content types available in a - * particular content section. It is an extension of the - * {@link com.arsdigita.cms.ui.authoring.NewItemForm}. The table displays each - * content section in one row, along with the specified form. The same form is - * reused in every row of the table. - * - * @author Michael Bryzek - * @version $Id: ContentSectionContainer.java 287 2005-02-22 00:29:02Z sskracic$ - */ -public class ContentSectionContainer extends CMSContainer { - - private static final String CONTENT_SECTION_CLASS = "contentSections"; - - private final ContentSectionTable m_table; - private final FormContainer m_formContainer; - private final SingleSelectionModel m_typeSel; - private final SingleSelectionModel m_sectionSel; - - /** - * Constructs a new ContentSectionContainer which containts: - * - *

- * - * @param typeSel passthrough to {@link NewItemForm} - * @param sectionSel passthrough to {@link NewItemForm} - */ - public ContentSectionContainer(SingleSelectionModel typeSel, - SingleSelectionModel sectionSel) { - super(); - setClassAttr(CONTENT_SECTION_CLASS); - - m_typeSel = typeSel; - m_sectionSel = sectionSel; - - m_formContainer = new FormContainer(); - add(m_formContainer); - m_table = new ContentSectionTable(); - add(m_table); - } - - /** - * - * @param p - */ - @Override - public void register(Page p) { - super.register(p); - p.setVisibleDefault(m_formContainer, false); - } - - /** - * - */ - private class FormContainer extends CMSContainer { - -// private final StaticNewItemForm m_form; - private final BigDecimalParameter m_sectionIdParam; - - /** - * Constructor - */ - private FormContainer() { - super(); - m_sectionIdParam = new BigDecimalParameter("sectionId"); -// m_form = new StaticNewItemForm(m_sectionIdParam); - -// m_form.addSubmissionListener(new FormSubmissionListener() { -// -// /** -// * Cancels the form if the user lacks the "create new items" -// * privilege. -// */ -// @Override -// public void submitted(FormSectionEvent event) -// throws FormProcessException { -// PageState state = event.getPageState(); -// StaticNewItemForm form = (StaticNewItemForm) event -// .getSource(); -// -// ContentSection section = form.getContentSection(state); -// final PermissionChecker permissionChecker = CdiUtil -// .createCdiUtil().findBean(PermissionChecker.class); -// Category folder = null; -// //ToDo -//// User user = Web.getWebContext().getUser(); -//// if (user != null) { -//// folder = Folder.getUserHomeFolder(user, section); -//// } -//// if (folder == null) { -//// folder = section.getRootFolder(); -//// } -////ToDo End -// folder = section.getRootDocumentsFolder(); -// -// if (!permissionChecker.isPermitted( -// ItemPrivileges.CREATE_NEW, folder)) { -// throw new FormProcessException( -// (GlobalizationUtil.globalize( -// "cms.ui.insufficient_privileges"))); -// } -// } -// -// }); -// -// m_form.addProcessListener(new FormProcessListener() { -// -// /** -// * Process listener: redirects to the authoring kit to create a -// * new item. -// */ -// @Override -// public void process(FormSectionEvent e) throws -// FormProcessException { -// StaticNewItemForm form = (StaticNewItemForm) e.getSource(); -// PageState state = e.getPageState(); -// -// BigDecimal typeId = form.getTypeID(state); -// if (typeId != null) { -// Long sectionId = form.getContentSectionID(state); -// m_sectionSel.setSelectedKey(state, sectionId); -// m_typeSel.setSelectedKey(state, typeId); -// } -// } -// -// }); -// -// add(m_form); - } - - @Override - public void register(Page p) { - super.register(p); - p.addComponentStateParam(this, m_sectionIdParam); - } - -// public StaticNewItemForm getNewItemForm() { -//// return m_form; -// } - - } - -// private static class StaticNewItemForm extends NewItemForm { -// -// private final Hidden m_sectionIDParamWidget; -// -// public StaticNewItemForm(BigDecimalParameter sectionParam) { -// super("StaticNewItemForm", BoxPanel.VERTICAL); -// setClassAttr("static-new-item-form"); -// m_sectionIDParamWidget = new Hidden(sectionParam); -// add(m_sectionIDParamWidget); -// setProcessInvisible(true); -// } -// -// /** -// * Sets the id of the content section in this form. This ID is used to -// * generate a list of available content types in the section. -// * -// * @param state The current page state. -// * @param id The id of the ContentSection for which this form should -// * display a list of content types -// * -// * @pre ( state != null && id != null ) -// */ -// public void setSectionId(PageState state, BigDecimal id) { -// Assert.exists(id); -// m_sectionIDParamWidget.setValue(state, id); -// } -// -// /** -// * Retrieves the content section for this form given the specified page -// * state. This method will return null if there is no content section. -// * -// * @param state The current page state. -// * -// * @return The current content section or null if the section does not -// * exist -// * -// * @pre ( state != null ) -// */ -// @Override -// public ContentSection getContentSection(PageState state) { -// Long id = getContentSectionID(state); -// Assert.exists(id); -// ContentSection section; -// section = CdiUtil.createCdiUtil().findBean( -// ContentSectionRepository.class).findById(id); -// return section; -// } -// -// /** -// * Retrieves the ID of the content section for this form given the -// * specified page state. This method will return null if no content -// * section id has been set. -// * -// * @param state The current page state. -// * -// * @return The id of the content section or null if it has not been set. -// * -// * @pre ( state != null ) -// */ -// private Long getContentSectionID(PageState state) { -// return (Long) Long.parseLong((String) m_sectionIDParamWidget -// .getValue(state)); -// } -// -// } - - /** - * A table that displays all content sections, with links to their locations - * and admin pages and a {@link NewItemForm} next to each section. - * - * @author Michael Bryzek - * @version $Revision$ $DateTime: 2004/08/17 23:15:09 $ - * - */ - private class ContentSectionTable extends Table { - - // We will use a (symboloc) headerKey to match columns. Because the - // number of columns depends on configuration for the llocation column, - // the index varies and con not be used. - private static final String COLUMN_SECTION = "Section"; - private static final String COLUMN_LOCATION = "Public Site"; - private static final String COLUMN_ACTION = "Action"; - - /** - * Constructs a new ContentSectionTable, using a default table model - * builder. - */ - private ContentSectionTable() { - super(); - - // we must use symbolic keys (instead of symbolic column index as - // usual) to identify a column because their number is dynamic - // depending on configuration of the location column! - Integer colNo = 0; - - Label emptyView = new Label(new GlobalizedMessage( - "cms.ui.contentcenter.section", CmsConstants.CMS_BUNDLE)); - emptyView.setFontWeight(Label.ITALIC); - setEmptyView(emptyView); - - setClassAttr("dataTable"); - - // add columns to the table - TableColumnModel columnModel = getColumnModel(); - - // prepare column headers - Label sectionHead = new Label(new GlobalizedMessage( - "cms.ui.contentcenter.section", CmsConstants.CMS_BUNDLE)); - sectionHead.setHint(new GlobalizedMessage( - "cms.ui.contentcenter.section_hint", CmsConstants.CMS_BUNDLE)); - Label locationHead = new Label(new GlobalizedMessage( - "cms.ui.contentcenter.location", CmsConstants.CMS_BUNDLE)); - locationHead.setHint(new GlobalizedMessage( - "cms.ui.contentcenter.location_hint", CmsConstants.CMS_BUNDLE)); - Label actionHead = new Label(new GlobalizedMessage( - "cms.ui.contentcenter.action", CmsConstants.CMS_BUNDLE)); - actionHead.setHint(new GlobalizedMessage( - "cms.ui.contentcenter.action_hint", CmsConstants.CMS_BUNDLE)); - - //TableColumn contentSectionColumn = new TableColumn(colNo, COLUMN_SECTION); - TableColumn contentSectionColumn = new TableColumn( - colNo, - sectionHead, - COLUMN_SECTION); - contentSectionColumn - .setCellRenderer(new AdminURLTableCellRenderer()); - columnModel.add(contentSectionColumn); - - TableColumn actionColumn = new TableColumn( - colNo++, - actionHead, - COLUMN_ACTION); - actionColumn.setCellRenderer(new ActionTableCellRenderer()); - columnModel.add(actionColumn); - - setModelBuilder(new ContentSectionTableModelBuilder()); - } - - /** - * An ContentSections table model builder - * - * @author Michael Bryzek - * - */ - private class ContentSectionTableModelBuilder extends LockableImpl - implements TableModelBuilder { - - @Override - public TableModel makeModel(Table table, PageState state) { - table.getRowSelectionModel().clearSelection(state); - return new ContentSectionTableModel((ContentSectionTable) table, - state); - } - - } - - /** - * An ContentSections table model - * - * @author Michael Bryzek - * - */ - private class ContentSectionTableModel implements TableModel { - - private final ContentSectionTable m_table; - private final TableColumnModel m_columnModel; - private final PageState m_state; - private final List m_contentSections; - private ContentSection m_section; - private int index = -1; - - private ContentSectionTableModel(ContentSectionTable table, - PageState state) { - m_table = table; - m_columnModel = table.getColumnModel(); - m_state = state; - - // retrieve all Content Sections - m_contentSections = getContentSectionCollection(); - } - - /** - * Returns a collection of ContentSections to display in this table. - * This implementation orders the content sections by - * lower(label). They are also already filtered for the - * sections to which the current user has no access. - * - */ - private List getContentSectionCollection() { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); - final List allSections = cdiUtil.findBean( - ContentSectionRepository.class).findAll(); - return allSections - .stream() - .filter(section -> permissionChecker - .isPermitted(ItemPrivileges.VIEW_PUBLISHED, - section)) - .collect(Collectors.toList()); - } - - @Override - public int getColumnCount() { - return m_columnModel.size(); - } - - @Override - public boolean nextRow() { - index++; - if (index < m_contentSections.size()) { - m_section = m_contentSections.get(index); - return true; - } else { - return false; - } - } - - /** - * By default, we return null. For the section, location, and action - * columns, we return the current Content Section if there is one. - * - * @param columnIndex The index of the current column - */ - @Override - public Object getElementAt(int columnIndex) { - if (m_columnModel == null || m_section == null) { - return null; - } - - TableColumn tc = m_columnModel.get(columnIndex); - String columnKey = (String) tc.getHeaderKey(); - - Object result = m_section; - if (columnKey.equals(COLUMN_SECTION) - || columnKey.equals(COLUMN_LOCATION) - || columnKey.equals( - COLUMN_ACTION)) { - result = m_section; - } - return result; - } - - @Override - public Object getKeyAt(int columnIndex) { - return m_section.getObjectId(); - } - - /** - * Returns the table associated with this table model. - * - */ - protected Table getTable() { - return m_table; - } - - /** - * Returns the current page state - * - */ - protected PageState getPageState() { - return m_state; - } - - } - - /** - * Sets the hidden parameter in the form containers form to the id of - * the current section. Then returns the form for display, but only if - * the user has permission to create new items in the current section. - * - * @author Michael Bryzek - * - */ - private class ActionTableCellRenderer implements TableCellRenderer { - - @Override - public Component getComponent(Table table, PageState state, - Object value, - boolean isSelected, Object key, - int row, int column) { - ContentSection section = (ContentSection) value; - Category folder = null; - //ToDo -// User user = Web.getWebContext().getUser(); -// if (user != null) { -// folder = Folder.getUserHomeFolder(user, section); -// } -// if (folder == null) { -// folder = section.getRootFolder(); -// } - - folder = section.getRootDocumentsFolder(); - // If the user has no access, return an empty Label - -// -// SecurityManager sm = new SecurityManager(section); -// -// if (!sm.canAccess(state.getRequest(), SecurityManager.NEW_ITEM, -// folder) -// || !ContentSection.getConfig() -// .getAllowContentCreateInSectionListing()) { -// // return null; // produces NPE here but works somewhere else. -// // It's a kind of a hack. Label is supposed not to accept -// // not-gloabalized data. Usually aou will return null here -// // and xmlgenerator takes care of it. Doesn't work here. -// return new Embedded( -// "   - -   "); -// } else { -// // set the value of the sectionIdParameter in the form -// // to this section -// m_formContainer.getNewItemForm().setSectionId(state, section -// .getID()); -// return m_formContainer.getNewItemForm(); -// } - //ToDo End - return new Embedded( - "   - -   "); - - } - - } - - } - - /** - * Generates the correct URL to the public pages for a content section. - * - * @author Michael Bryzek - * - */ - public static class URLTableCellRenderer implements TableCellRenderer { - - /** - * The object passed in is the current content section. This returns a - * Link whose name and target are the url to the public pages. - * - * @return Link whose name and target are the url to the public pages of - * the current (passed in) content section or a Label if current - * use does not habe acces priviledge for the content section - */ - @Override - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { - - /* cast to ContentSection for further processing */ - ContentSection section = (ContentSection) value; - String name = section.getLabel(); - String path = section.getPrimaryUrl(); // from Application - - // If the user has no access, return a Label instead of a Link - // Kind of a hack because Label is supposed not to accept - // "un-globalized" display data. Label had been abused here to - // to display a DataValue - return new Embedded("/" + name + "/", false); - // return null; // produces NPE here - - } - - } - - /** - * Generates the correct URL to the admin pages for a content section. - * - * @author Michael Bryzek - * - */ - public static class AdminURLTableCellRenderer extends URLTableCellRenderer { - - /** - * The object passed in is the current content section - * - * @param table - * @param state - * @param row - * @param value - * @param column - * @param isSelected - * @param key - * - * @return - * - */ - @Override - public Component getComponent(Table table, PageState state, Object value, - boolean isSelected, Object key, - int row, int column) { - ContentSection section = (ContentSection) value; - - final PermissionChecker permissionChecker = CdiUtil.createCdiUtil() - .findBean(PermissionChecker.class); - - // If the user has no access, return a Label instead of a Link - if (permissionChecker.isPermitted( - ItemPrivileges.EDIT, - section.getRootDocumentsFolder())) { - - return new Link(section.getLabel(), - generateURL(section.getPrimaryUrl())); - } else { - //return new Label(section.getName(), false); - // return null; // Produces a NPE although it shouldn't and - // indeed doesn't elsewhere - // Kind of a hack because Label is supposed not to accept - // "un-globalized" display data. Label had been abused here to - // to display a DataValue - return new Embedded(section.getLabel(), false); - } - } - - /** - * Generates the admin url for the specified prefix. Always returns - * something that does not start with a forward slash. - * - * @param prefix The prefix of the URL - * - * @return - */ - protected String generateURL(String prefix) { - return prefix + PageLocations.SECTION_PAGE; - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/MainPage.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/MainPage.java deleted file mode 100755 index 70e7cae5f..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/MainPage.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * - * 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.contentcenter; - -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.TabbedPane; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.parameters.LongParameter; -import com.arsdigita.cms.ui.CMSApplicationPage; -import com.arsdigita.cms.ui.GlobalNavigation; -import com.arsdigita.cms.ui.WorkspaceContextBar; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.ui.CcmObjectSelectionModel; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.security.PermissionChecker; -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentType; - -// //////////////////////////////////////////////////////////////////////////// -// -// Developer's Note: -// Replaces the (old) Dispatcher based Code cms.ui.CMSPageWorkspacePage -// Note should be removed as soon as the migration process is competed (in- -// cluding content section pages). -// -// //////////////////////////////////////////////////////////////////////////// -/** - *

- * The Content Center main page.

- * - * The page contains the general header and footer, the breadcrumb, and the - * complete content page including the tab bar, the sections/tasks page, the - * search page, and the listener to switch between the tabs. - * - * @author Jack Chung (flattop@arsdigita.com) - * @author Michael Pih (pihman@arsdigita.com) - * @author Peter Boy (pboy@barkhof.uni-bremen.de) - */ -public class MainPage extends CMSApplicationPage implements ActionListener { - - private final static String XSL_CLASS = "CMS Admin"; - - public static final String CONTENT_TYPE = "type_id"; - public static final String CONTENT_SECTION = "section_id"; - - private final CcmObjectSelectionModel typeSelection; - private final CcmObjectSelectionModel sectionSelection; - - private final TabbedPane tabbedPane; - - private TasksPane tasksPanel; -// private ItemSearch m_search; -// private IdSearchTab m_IdSearch; - - /** - * Construct a new MainPage. - * - * Creates the complete page ready to be included in the page cache of - * ContentCenterServlet. - */ - public MainPage() { - - super(new Label(new GlobalizedMessage("cms.ui.content_center", - CmsConstants.CMS_BUNDLE)), - new SimpleContainer()); - - - /* Set the class attribute value (down in SimpleComponent). */ - super.setClassAttr("cms-admin"); - - final LongParameter typeId = new LongParameter(CONTENT_TYPE); - super.addGlobalStateParam(typeId); - typeSelection = new CcmObjectSelectionModel<>(ContentType.class, typeId); - - final LongParameter sectionId = new LongParameter(CONTENT_SECTION); - super.addGlobalStateParam(sectionId); - sectionSelection = new CcmObjectSelectionModel<>(ContentSection.class, - sectionId - ); - - super.add(new WorkspaceContextBar()); - super.add(new GlobalNavigation()); - - tasksPanel = getTasksPane(typeSelection, sectionSelection); -// m_search = getSearchPane(); -// m_IdSearch = getIdSearchPane(); - - tabbedPane = createTabbedPane(); - tabbedPane.setIdAttr("page-body"); - super.add(tabbedPane); - -// add(new DebugPanel()); - } - - /** - * Creates, and then caches, the Tasks pane. Overriding this method to - * return null will prevent this tab from appearing. - * - * @param typeModel - * @param sectionModel - * - * @return - */ - protected TasksPane getTasksPane( - final CcmObjectSelectionModel typeModel, - final CcmObjectSelectionModel sectionModel) { - - if (tasksPanel == null) { - tasksPanel = new TasksPane(typeModel, sectionModel); - } - return tasksPanel; - } - -// /** -// * Creates, and then caches, the Search pane. Overriding this method to -// * return null will prevent this tab from appearing. -// * -// */ -// protected ItemSearch getSearchPane() { -// if (m_search == null) { -// m_search = new ItemSearch(ContentItem.DRAFT); -// } -// -// return m_search; -// } -// -// protected IdSearchTab getIdSearchPane() { -// if (m_IdSearch == null) { -// m_IdSearch = new IdSearchTab("idsearch"); -// } -// -// return m_IdSearch; -// } - /** - * 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. - * - * @return - */ - protected TabbedPane createTabbedPane() { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionChecker permissionChecker = cdiUtil - .findBean(PermissionChecker.class); - - final TabbedPane pane = new TabbedPane(); - pane.setClassAttr(XSL_CLASS); - Label taskLabel = new Label(new GlobalizedMessage( - "cms.ui.contentcenter.mainpage.taskssections", - CmsConstants.CMS_BUNDLE)); - Label pagesLabel = new Label(new GlobalizedMessage( - "cms.ui.contentcenter.mainpage.pages", - CmsConstants.CMS_BUNDLE)); - Label searchLabel = new Label(new GlobalizedMessage( - "cms.ui.contentcenter.mainpage.search", CmsConstants.CMS_BUNDLE)); - Label IdsearchLabel = new Label("ID Search"); - - addToPane(pane, - taskLabel, - getTasksPane(typeSelection, sectionSelection)); - -// if (permissionChecker.isPermitted(PagesPrivileges.ADMINISTER_PAGES)) { - addToPane(pane, - pagesLabel, - new PagesPane()); -// } -// addToPane(tabbedPane, -// new Label(new GlobalizedMessage( -// "cms.ui.contentcenter.mainpage.search", -// CmsConstants.CMS_BUNDLE)), -// getSearchPane()); -// addToPane(tabbedPane, -// IdsearchLabel, -// getIdSearchPane()); - - 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 -// * @deprecated refactor to use addToPane(Label, Component) instead to -// * enable localized tab strips. -// */ -// protected void addToPane(TabbedPane pane, String tabName, Component comp) { -// if (comp != null) { -// pane.addTab(tabName, comp); -// } -// } - /** - * Adds the specified component, with the specified Label as 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 component The component to add to the pane - */ - protected void addToPane(final TabbedPane pane, - final Label tabName, - final Component component) { - if (component != null) { - pane.addTab(tabName, component); - } - } - - /** - * When a new tab is selected, reset the state of the formerly-selected - * pane. - * - * @param event The event fired by selecting a tab - */ - @Override - public void actionPerformed(final ActionEvent event) { - - final PageState state = event.getPageState(); - final Component pane = tabbedPane.getCurrentPane(state); - - if (pane == tasksPanel) { - tasksPanel.reset(state); - } -// else if (pane == m_search) { -// m_search.reset(state); -// } else if (pane == m_IdSearch) { -// m_IdSearch.reset(state); -// } - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesForm.java deleted file mode 100644 index e35335fef..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesForm.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (C) 2017 LibreCCM Foundation. - * - * 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., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.cms.ui.contentcenter; - -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.bebop.form.SingleSelect; - -import com.arsdigita.bebop.form.TextField; -import com.arsdigita.globalization.GlobalizedMessage; - -import org.libreccm.categorization.Domain; -import org.libreccm.categorization.DomainRepository; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.core.UnexpectedErrorException; -import org.libreccm.sites.Site; -import org.libreccm.sites.SiteRepository; -import org.librecms.CmsConstants; -import org.librecms.pages.Pages; -import org.librecms.pages.PagesRepository; - -import java.util.List; -import java.util.TooManyListenersException; - -/** - * - * @author Jens Pelzetter - */ -class PagesForm extends Form { - - private final static String PRIMARY_URL_FIELD = "primaryUrl"; - private final static String SITE_SELECT = "site"; - private final static String CATEGORY_DOMAIN_SELECT = "categoryDomain"; - - private final PagesPane pagesPane; - private final ParameterSingleSelectionModel selectedPages; - - private final TextField primaryUrlField; - private final SingleSelect siteSelect; - private final SingleSelect categoryDomainSelect; - private final SaveCancelSection saveCancelSection; - - PagesForm(final PagesPane pagesPane, - final ParameterSingleSelectionModel selectedPages) { - - super("pagesForm"); - - this.pagesPane = pagesPane; - this.selectedPages = selectedPages; - - primaryUrlField = new TextField(PRIMARY_URL_FIELD); - primaryUrlField.setLabel(new GlobalizedMessage( - "cms.ui.pages.form.primary_url_field.label", - CmsConstants.CMS_BUNDLE)); - super.add(primaryUrlField); - - siteSelect = new SingleSelect(SITE_SELECT); - try { - siteSelect.addPrintListener(this::populateSiteSelect); - } catch (TooManyListenersException ex) { - throw new UnexpectedErrorException(ex); - } - siteSelect.setLabel(new GlobalizedMessage( - "cms.ui.pages.form.site_select.label", - CmsConstants.CMS_BUNDLE)); - super.add(siteSelect); - - categoryDomainSelect = new SingleSelect(CATEGORY_DOMAIN_SELECT); - try { - categoryDomainSelect - .addPrintListener(this::populateCategoryDomainSelect); - } catch (TooManyListenersException ex) { - throw new UnexpectedErrorException(ex); - } - categoryDomainSelect.setLabel(new GlobalizedMessage( - "cms.ui.pages.form.category_domain_select.label", - CmsConstants.CMS_BUNDLE)); - super.add(categoryDomainSelect); - - saveCancelSection = new SaveCancelSection(); - super.add(saveCancelSection); - - super.addInitListener(this::init); - super.addValidationListener(this::validate); - super.addProcessListener(this::process); - } - - private void populateSiteSelect(final PrintEvent event) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final SiteRepository siteRepository = cdiUtil - .findBean(SiteRepository.class); - - final List sites = siteRepository.findAll(); - - final SingleSelect target = (SingleSelect) event.getTarget(); - target.clearOptions(); - - for (final Site site : sites) { - final Text label; - if (site.isDefaultSite()) { - label = new Text(String.format("%s *", site.getDomainOfSite())); - } else { - label = new Text(site.getDomainOfSite()); - } - - target.addOption(new Option(Long.toString(site.getObjectId()), - label)); - } - - if (selectedPages.getSelectedKey(event.getPageState()) != null) { - target.setDisabled(); - } - } - - private void populateCategoryDomainSelect(final PrintEvent event) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final DomainRepository domainRepo = cdiUtil - .findBean(DomainRepository.class); - - final List categoryDomains = domainRepo.findAll(); - - final SingleSelect target = (SingleSelect) event.getTarget(); - target.clearOptions(); - - for (final Domain domain : categoryDomains) { - - target.addOption(new Option(Long.toString(domain.getObjectId()), - new Text(domain.getDomainKey()))); - } - - if (selectedPages.getSelectedKey(event.getPageState()) != null) { - target.setDisabled(); - } - } - - private void init(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - - if (selectedPages.getSelectedKey(state) != null) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PagesRepository pagesRepo = cdiUtil - .findBean(PagesRepository.class); - - final Pages pages = pagesRepo - .findById(Long.parseLong(selectedPages.getSelectedKey(state))) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Pages with ID %s in the database.", - selectedPages.getSelectedKey(state)))); - - primaryUrlField.setValue(state, pages.getPrimaryUrl()); - - siteSelect.setValue(state, - Long.toString(pages.getSite().getObjectId())); - - categoryDomainSelect - .setValue(state, - Long.toString(pages.getCategoryDomain().getObjectId())); - } - } - - private void validate(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - - final FormData data = event.getFormData(); - - final String primaryUrl = data.getString(PRIMARY_URL_FIELD); - if (primaryUrl == null - || primaryUrl.isEmpty() - || primaryUrl.matches("\\s*")) { - - data.addError(PRIMARY_URL_FIELD, - new GlobalizedMessage( - "cms.ui.pages.form.primary_url_field.error", - CmsConstants.CMS_BUNDLE)); - } - - final String selectedSite = data.getString(SITE_SELECT); - if (selectedSite == null - || selectedSite.isEmpty()) { - - data.addError(PRIMARY_URL_FIELD, - new GlobalizedMessage( - "cms.ui.pages.form.site_select.error", - CmsConstants.CMS_BUNDLE)); - } - - final String selectedDomain = data.getString(CATEGORY_DOMAIN_SELECT); - if (selectedDomain == null - || selectedDomain.isEmpty()) { - - data.addError(PRIMARY_URL_FIELD, - new GlobalizedMessage( - "cms.ui.pages.form.category_domain_select.error", - CmsConstants.CMS_BUNDLE)); - } - } - - } - - private void process(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PagesPaneController controller = cdiUtil - .findBean(PagesPaneController.class); - - final FormData data = event.getFormData(); - - final String primaryUrl; - if (data.getString(PRIMARY_URL_FIELD).startsWith("/") - && data.getString(PRIMARY_URL_FIELD).endsWith("/")) { - primaryUrl = data.getString(PRIMARY_URL_FIELD); - } else if(data.getString(PRIMARY_URL_FIELD).startsWith("/")) { - primaryUrl = String.format("%s/", - data.getString(PRIMARY_URL_FIELD)); - } else if(data.getString(PRIMARY_URL_FIELD).endsWith("/")) { - primaryUrl = String.format("/%s", - data.getString(PRIMARY_URL_FIELD)); - } else { - primaryUrl = String.format("/%s/", - data.getString(PRIMARY_URL_FIELD)); - } - final String selectedSiteId = data.getString(SITE_SELECT); - final String selectedDomainId = data.getString( - CATEGORY_DOMAIN_SELECT); - - if (selectedPages.getSelectedKey(state) == null) { - controller.createPages(primaryUrl, - Long.parseLong(selectedSiteId), - Long.parseLong(selectedDomainId)); - } else { - controller - .updatePages( - Long.parseLong(selectedPages.getSelectedKey(state)), - primaryUrl); - } - } - - pagesPane.showPagesTable(state); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesPane.java deleted file mode 100644 index 9e95408df..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesPane.java +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (C) 2017 LibreCCM Foundation. - * - * 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., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.cms.ui.contentcenter; - -import com.arsdigita.bebop.ActionLink; -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Link; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.event.TableActionEvent; -import com.arsdigita.bebop.event.TableActionListener; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.bebop.table.TableCellRenderer; -import com.arsdigita.bebop.table.TableColumn; -import com.arsdigita.bebop.table.TableColumnModel; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; -import com.arsdigita.cms.ui.CMSContainer; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.LockableImpl; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.core.UnexpectedErrorException; -import org.libreccm.security.PermissionChecker; -import org.librecms.CmsConstants; -import org.librecms.pages.Pages; -import org.librecms.pages.PagesPrivileges; -import org.librecms.pages.PagesRepository; - -import java.util.Iterator; -import java.util.List; - -/** - * - * @author Jens Pelzetter - */ -class PagesPane extends CMSContainer { - - private final ParameterSingleSelectionModel selectedPages; - - private final ActionLink addPagesLink; - private final PagesTable pagesTable; - private final PagesForm pagesForm; - - PagesPane() { - - super(); - - selectedPages = new ParameterSingleSelectionModel<>( - new StringParameter("selectedPages")); - - addPagesLink = new ActionLink(new GlobalizedMessage( - "cms.ui.contentcenter.pages.add_link", - CmsConstants.CMS_BUNDLE)); - addPagesLink.addActionListener(event -> { - showPagesForm(event.getPageState()); - }); - pagesTable = new PagesTable(); - pagesForm = new PagesForm(this, selectedPages); - - final BoxPanel panel = new BoxPanel(BoxPanel.VERTICAL); - panel.add(addPagesLink); - panel.add(pagesTable); - panel.add(pagesForm); - - super.add(panel); - } - - @Override - public void register(final Page page) { - super.register(page); - - page.addGlobalStateParam(selectedPages.getStateParameter()); - - page.setVisibleDefault(addPagesLink, true); - page.setVisibleDefault(pagesTable, true); - page.setVisibleDefault(pagesForm, false); - } - - protected void showPagesForm(final PageState state) { - - addPagesLink.setVisible(state, false); - pagesTable.setVisible(state, false); - pagesForm.setVisible(state, true); - } - - protected void showPagesTable(final PageState state) { - - addPagesLink.setVisible(state, true); - pagesTable.setVisible(state, true); - pagesForm.setVisible(state, false); - - selectedPages.clearSelection(state); - } - - private class PagesTable extends Table { - - public static final int COL_SITE = 0; - public static final int COL_PAGES_INSTANCE = 1; - public static final int COL_EDIT = 2; - public static final int COL_DELETE = 3; - - public PagesTable() { - - super(); - - final TableColumnModel columnModel = super.getColumnModel(); - - columnModel - .add(new TableColumn( - COL_SITE, - new Label(new GlobalizedMessage( - "cms.ui.contentcenter.pagestable.columns.site.header", - CmsConstants.CMS_BUNDLE)))); - columnModel - .add(new TableColumn( - COL_SITE, - new Label(new GlobalizedMessage( - "cms.ui.contentcenter.pagestable.columns.pages_instance.header", - CmsConstants.CMS_BUNDLE)))); - columnModel - .add(new TableColumn( - COL_EDIT, - new Label(new GlobalizedMessage( - "cms.ui.contentcenter.pagestable.columns.edit.header", - CmsConstants.CMS_BUNDLE)))); - columnModel - .add(new TableColumn( - COL_DELETE, - new Label(new GlobalizedMessage( - "cms.ui.contentcenter.pagestable.columns.delete.header", - CmsConstants.CMS_BUNDLE)))); - - columnModel - .get(COL_SITE) - .setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionChecker permissionChecker = cdiUtil - .findBean(PermissionChecker.class); - -// return new ControlLink((String) value); - final Pages pages = (Pages) value; - if (permissionChecker.isPermitted( - PagesPrivileges.ADMINISTER_PAGES)) { - return new Link(pages.getSite().getDomainOfSite(), - pages.getPrimaryUrl()); - } else { - return new Text(pages.getSite().getDomainOfSite()); - } - } - }); - - columnModel - .get(COL_PAGES_INSTANCE) - .setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - - final Pages pages = (Pages) value; - return new Text(pages.getPrimaryUrl()); - } - }); - - columnModel - .get(COL_EDIT) - .setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionChecker permissionChecker = cdiUtil - .findBean(PermissionChecker.class); - - if (permissionChecker.isPermitted( - PagesPrivileges.ADMINISTER_PAGES)) { - - final ControlLink link = new ControlLink( - (Component) value); - return link; - } else { - return new Text(""); - } - } - - }); - - columnModel - .get(COL_DELETE) - .setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionChecker permissionChecker = cdiUtil - .findBean(PermissionChecker.class); - - if (permissionChecker.isPermitted( - PagesPrivileges.ADMINISTER_PAGES)) { - - final ControlLink link = new ControlLink( - (Component) value); - link.setConfirmation(new GlobalizedMessage( - "cms.ui.contentcenter.pages.delete.confirm", - CmsConstants.CMS_BUNDLE)); - return link; - } else { - return new Text(""); - } - } - - }); - - super.addTableActionListener(new TableActionListener() { - - @Override - public void cellSelected(final TableActionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - - final int column = event.getColumn(); - final String key = (String) event.getRowKey(); - - switch (column) { - case COL_EDIT: - selectedPages.setSelectedKey(state, key); - showPagesForm(state); - break; - case COL_DELETE: { - deletePages(key); - break; - } - default: - throw new UnexpectedErrorException( - "Illegal column index."); - } - - } - - @Override - public void headSelected(final TableActionEvent event) { - - //Nothing - } - - }); - - super.setModelBuilder(new PagesTableModelBuilder()); - - super.setEmptyView(new Label(new GlobalizedMessage( - "cms.ui.contentcenter.pages.none", CmsConstants.CMS_BUNDLE))); - } - - } - - private void deletePages(final String pagesId) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PagesRepository pagesRepo = cdiUtil - .findBean(PagesRepository.class); - - final Pages pages = pagesRepo - .findById(Long.parseLong(pagesId)) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Pages with ID %d in the database.", - pagesId))); - - pagesRepo.delete(pages); - } - - private class PagesTableModelBuilder - extends LockableImpl - implements TableModelBuilder { - - @Override - public TableModel makeModel(final Table table, final PageState state) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PagesRepository pagesRepo = cdiUtil - .findBean(PagesRepository.class); - - final List pages = pagesRepo.findAll(); - return new PagesTableModel(pages); - } - - } - - private class PagesTableModel implements TableModel { - - private final Iterator iterator; - private Pages current; - - public PagesTableModel(final List pages) { - - iterator = pages.iterator(); - - } - - @Override - public int getColumnCount() { - return 3; - } - - @Override - public boolean nextRow() { - - if (iterator.hasNext()) { - current = iterator.next(); - return true; - } else { - return false; - } - } - - @Override - public Object getElementAt(final int columnIndex) { - - switch (columnIndex) { - case PagesTable.COL_SITE: - return current; - case PagesTable.COL_PAGES_INSTANCE: - return current; - case PagesTable.COL_EDIT: - return new Label(new GlobalizedMessage( - "cms.ui.contentcenter.pages.edit.label", - CmsConstants.CMS_BUNDLE)); - case PagesTable.COL_DELETE: - return new Label(new GlobalizedMessage( - "cms.ui.contentcenter.pages.delete.label", - CmsConstants.CMS_BUNDLE)); - default: - throw new IllegalArgumentException("Illegal column index."); - } - } - - @Override - public Object getKeyAt(final int columnIndex) { - - return current.getObjectId(); - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesPaneController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesPaneController.java deleted file mode 100644 index 0bb6a530d..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/PagesPaneController.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2017 LibreCCM Foundation. - * - * 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., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.cms.ui.contentcenter; - -import org.libreccm.categorization.Domain; -import org.libreccm.categorization.DomainRepository; -import org.libreccm.core.UnexpectedErrorException; -import org.libreccm.sites.Site; -import org.libreccm.sites.SiteManager; -import org.libreccm.sites.SiteRepository; -import org.librecms.pages.Pages; -import org.librecms.pages.PagesManager; -import org.librecms.pages.PagesRepository; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@RequestScoped -class PagesPaneController { - - @Inject - private DomainRepository domainRepo; - - @Inject - private PagesRepository pagesRepo; - - @Inject - private PagesManager pagesManager; - - @Inject - private SiteManager siteManager; - - @Inject - private SiteRepository siteRepo; - - @Transactional(Transactional.TxType.REQUIRED) - protected void createPages(final String primaryUrl, - final long siteId, - final long categoryDomainId) { - - final Site site = siteRepo - .findById(siteId) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Site with ID %d in the database.", - siteId))); - - final Domain domain = domainRepo - .findById(categoryDomainId) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No (Category) Domain with ID %d in the database.", - categoryDomainId))); - - final Pages pages = pagesManager.createPages(primaryUrl, site, domain); - pages.setPrimaryUrl(primaryUrl); - - pagesRepo.save(pages); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected void updatePages(final long pagesId, - final String primaryUrl) { - - final Pages pages = pagesRepo - .findById(pagesId) - .orElseThrow(() -> new UnexpectedErrorException(String - .format("No Pages with ID %d in the database.", - pagesId))); - - pages.setPrimaryUrl(primaryUrl); - - pagesRepo.save(pages); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/TasksPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/TasksPane.java deleted file mode 100755 index 20ffd04dc..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/contentcenter/TasksPane.java +++ /dev/null @@ -1,762 +0,0 @@ -/* - * Copyright (C) 2001-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.contentcenter; - -import java.math.BigDecimal; - -import javax.servlet.ServletException; - -import com.arsdigita.bebop.ActionLink; -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.PaginationModelBuilder; -import com.arsdigita.bebop.Paginator; -import com.arsdigita.bebop.RequestLocal; -import com.arsdigita.bebop.SimpleComponent; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.event.ChangeEvent; -import com.arsdigita.bebop.event.ChangeListener; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.event.PrintListener; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.cms.CMS; -import com.arsdigita.cms.ui.CMSContainer; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.ui.CcmObjectSelectionModel; -import com.arsdigita.xml.Element; - -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentType; - -public class TasksPane extends CMSContainer { - - // The default number of rows to show - private static final int DEFAULT_MAX_ROWS = 15; - // Number of tasks to show - private final int m_maxRows; - private TaskList m_taskList; - // private ActionLink m_viewAllLink; - // private ActionLink m_viewShortLink; - private Paginator m_paginator; - private ActionLink m_viewLockLink; - private ActionLink m_viewUnlockLink; - private ActionLink m_viewAllLockLink; - private Label m_viewLockLabel; - private Label m_viewUnlockLabel; - private Label m_viewAllLockLabel; - private StringParameter m_sortDirectionParam; - private StringParameter m_sortTypeParam; - private StringParameter m_lockFilterParam; - // control link variable - private static final String TASK_PANEL_CLASS = "taskPanel"; - private static final String TASK_ACTION = "taskAction"; - private static final String SORT_DOWN = "sortActionUp"; - private static final String SORT_UP = "sortActionDown"; - private static final String LOCK_FILTER_TYPE = "lockFilterType"; - private static final String SORT_TYPE = "sortType"; - private static final String SORT_DIRECTION = "sortDirection"; - private static final String SORT_ACTION = "action"; - private static final String SORT_DATE = "date"; - private static final String SORT_STATUS = "status"; - private static final String SORT_TITLE = "title"; - private static final String SORT_USER = "user"; - private static final String SORT_WORKFLOW = "workflow"; - // IMAGES - public static final String UP_ARROW_IMAGE - = "/themes/heirfloom/images/gray-triangle-up.gif"; - public static final String DOWN_ARROW_IMAGE - = "/themes/heirfloom/images/gray-triangle-down.gif"; - // CREATION PANE CONSTANTS - private Label m_selectorLabel; -//ToDo -// private CreationSelector m_selector; - private ContentSectionContainer m_sections; -// ToDo End - private CcmObjectSelectionModel m_sectionSel; - private CcmObjectSelectionModel m_typeSel; - -// private RootFolderSelectionModel m_folderSel; - private BoxPanel m_creationPane; - - /** - * Constructs a new task panel that shows no more than 15 enabled tasks by - * default. - * - * @param typeModel - * @param sectionModel - * - */ - public TasksPane(CcmObjectSelectionModel typeModel, - CcmObjectSelectionModel sectionModel) { - this(DEFAULT_MAX_ROWS, typeModel, sectionModel); - } - - /** - * Constructs a new task panel that shows a specified number enabled tasks. - * - * @param maxRows the maximum number of rows to show by default - * @param typeModel - * @param sectionModel - * - * @pre maxRows != null - * - */ - public TasksPane(int maxRows, - CcmObjectSelectionModel typeModel, - CcmObjectSelectionModel sectionModel) { - super(); - - // Set class attribute - setClassAttr(TASK_PANEL_CLASS); - - m_maxRows = maxRows; - - m_typeSel = typeModel; - m_sectionSel = sectionModel; - - m_sortDirectionParam = new StringParameter(SORT_DIRECTION); - m_sortTypeParam = new StringParameter(SORT_TYPE); - m_lockFilterParam = new StringParameter(LOCK_FILTER_TYPE); - addComponents(); - } - - /** - * Adds the components to this tasks panel - */ - private void addComponents() { - m_creationPane = new BoxPanel(BoxPanel.VERTICAL); - - // A label that says "Create $content_type in $section" - m_selectorLabel = new Label(new PrintListener() { - - @Override - public void prepare(PrintEvent e) { - PageState s = e.getPageState(); - Label t = (Label) e.getTarget(); - - ContentType type = (ContentType) m_typeSel.getSelectedObject(s); - ContentSection sec = (ContentSection) m_sectionSel - .getSelectedObject(s); - - StringBuilder buf = new StringBuilder( - new GlobalizedMessage("cms.ui.create", - CmsConstants.CMS_BUNDLE).localize() - + " "); - buf.append(type.getLabel()); - buf.append(" in "); - buf.append(sec.getLabel()); - - t.setLabel(buf.toString()); - t.setFontWeight(Label.BOLD); - t.setClassAttr("creationLabel"); - } - - }); - m_selectorLabel.setClassAttr("creationLabel"); - m_creationPane.add(m_selectorLabel); - -//ToDo -// m_folderSel = new RootFolderSelectionModel(m_sectionSel); -// m_selector = new CreationSelector(m_typeSel, m_folderSel); -// m_creationPane.add(m_selector); -//ToDo End - m_creationPane.setClassAttr("itemCreationPane"); - add(m_creationPane); - - // The section list UIx -//ToDo - m_sections = new ContentSectionContainer(m_typeSel, m_sectionSel); - add(m_sections); -//ToDo End - // When a new type is selected, show the creation UI. - // When the selection is cleared, return to section list - m_typeSel.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - PageState s = e.getPageState(); - boolean isSelected = m_typeSel.isSelected(s); - -//ToDo -// m_sections.setVisible(s, !isSelected); -//ToDo End - m_creationPane.setVisible(s, isSelected); - } - - }); - - m_viewLockLink = new ActionLink(new Label(new GlobalizedMessage( - "cms.ui.workflow.task.view_locked", CmsConstants.CMS_BUNDLE))); - m_viewLockLink.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - PageState ps = e.getPageState(); - ps.setValue(m_lockFilterParam, "lock"); - } - - }); - - m_viewUnlockLink = new ActionLink(new Label(new GlobalizedMessage( - "cms.ui.workflow.task.view_unlocked", CmsConstants.CMS_BUNDLE))); - m_viewUnlockLink.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - PageState ps = e.getPageState(); - ps.setValue(m_lockFilterParam, "unlock"); - } - - }); - - m_viewAllLockLink = new ActionLink(new Label(new GlobalizedMessage( - "cms.ui.workflow.task.view_all", CmsConstants.CMS_BUNDLE))); - m_viewAllLockLink.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - PageState ps = e.getPageState(); - ps.setValue(m_lockFilterParam, "all"); - } - - }); - - m_viewLockLabel = new Label(new GlobalizedMessage( - "cms.ui.workflow.task.view_locked", CmsConstants.CMS_BUNDLE)); - m_viewLockLabel.setFontWeight(Label.BOLD); - m_viewUnlockLabel = new Label(new GlobalizedMessage( - "cms.ui.workflow.task.view_unlocked", CmsConstants.CMS_BUNDLE)); - m_viewUnlockLabel.setFontWeight(Label.BOLD); - m_viewAllLockLabel = new Label(new GlobalizedMessage( - "cms.ui.workflow.task.view_all", CmsConstants.CMS_BUNDLE)); - m_viewAllLockLabel.setFontWeight(Label.BOLD); - - add(new Label("
", false)); - add(m_viewLockLink); - add(m_viewLockLabel); - add(new Label(" ", false)); - add(m_viewUnlockLink); - add(m_viewUnlockLabel); - add(new Label(" ", false)); - add(m_viewAllLockLink); - add(m_viewAllLockLabel); - add(new Label("
", false)); - add(new Label("
", false)); - - add(getTasksList()); - add(getPaginator()); - -// m_actionLabel = new Label(GlobalizationUtil.globalize("cms.ui.action")); -// m_actionLabel.setClassAttr("action"); - } - - /** - * - * @param p - */ - @Override - public void register(Page p) { - super.register(p); - - p.setVisibleDefault(m_creationPane, false); -//ToDo -// p.addComponentStateParam(this, m_folderSel.getStateParameter()); -//ToDo End - - p.addGlobalStateParam(m_lockFilterParam); - p.addGlobalStateParam(m_sortTypeParam); - p.addGlobalStateParam(m_sortDirectionParam); - - p.setVisibleDefault(m_viewLockLabel, false); - p.setVisibleDefault(m_viewUnlockLabel, false); - p.setVisibleDefault(m_viewAllLockLink, false); - - p.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - final PageState state = e.getPageState(); - - String lockFilterType = getLockFilterType(state); - - if (lockFilterType.equals("lock")) { - m_viewLockLabel.setVisible(state, true); - m_viewLockLink.setVisible(state, false); - m_viewUnlockLabel.setVisible(state, false); - m_viewUnlockLink.setVisible(state, true); - m_viewAllLockLabel.setVisible(state, false); - m_viewAllLockLink.setVisible(state, true); - } else if (lockFilterType.equals("unlock")) { - m_viewLockLabel.setVisible(state, false); - m_viewLockLink.setVisible(state, true); - m_viewUnlockLabel.setVisible(state, true); - m_viewUnlockLink.setVisible(state, false); - m_viewAllLockLabel.setVisible(state, false); - m_viewAllLockLink.setVisible(state, true); - } else { - m_viewLockLabel.setVisible(state, false); - m_viewLockLink.setVisible(state, true); - m_viewUnlockLabel.setVisible(state, false); - m_viewUnlockLink.setVisible(state, true); - m_viewAllLockLabel.setVisible(state, true); - m_viewAllLockLink.setVisible(state, false); - } - } - - }); - } - - public void reset(PageState state) { - m_typeSel.clearSelection(state); - m_sectionSel.clearSelection(state); - } - - protected Paginator getPaginator() { - if (m_paginator == null) { - m_paginator = new Paginator(new TasksPaginationModelBuilder(), - m_maxRows); - } - return m_paginator; - } - - /** - * Returns the bebop List component to display the tasks - * - */ - private TaskList getTasksList() { - if (m_taskList == null) { - m_taskList = new TaskList(true); - } - return m_taskList; - } - - /** - * Returns the number of enabled tasks for the specified user. - * - * @param state - * - * @return - * - */ - protected int numberTasksForUser(PageState state) { - return m_taskList.size(state); - } - - protected String getSortType(PageState state) { - String sortType = (String) state.getValue(m_sortTypeParam); - if (sortType == null) { - sortType = SORT_DATE; - } - return sortType; - } - - protected String getSortDirection(PageState state) { - String sortDirection = (String) state.getValue(m_sortDirectionParam); - if (sortDirection == null) { - sortDirection = SORT_UP; - } - return sortDirection; - } - - protected String getLockFilterType(PageState state) { - String lockFilterType = (String) state.getValue(m_lockFilterParam); - if (lockFilterType == null || lockFilterType.equals("")) { - lockFilterType = "lock"; - } - return lockFilterType; - } - - /* - * Adds filters to the task query - */ -//ToDo -// protected void addQueryFilters(DataQuery query, Party party, PageState state) { -// query.setParameter("userId", party.getID()); -// -// FilterFactory ff = query.getFilterFactory(); -// -// // TODO: remove this hard coding of "Author", "Edit", and "Deploy" -// // TODO: remove this hard coding of "Author", "Edit", and "Deploy" -// CompoundFilter authorFilter = ff.and(); -// //cg query changed to refer to task type id -// authorFilter.addFilter(ff.equals("taskType", CMSTaskType.AUTHOR)); -// authorFilter.addFilter(getTaskFilter(CMSTaskType.retrieve( -// CMSTaskType.AUTHOR), -// party, ff)); -// -// CompoundFilter approveFilter = ff.and(); -// approveFilter.addFilter(ff.equals("taskType", CMSTaskType.EDIT)); -// approveFilter.addFilter(getTaskFilter(CMSTaskType.retrieve( -// CMSTaskType.EDIT), -// party, ff)); -// -// CompoundFilter deployFilter = ff.and(); -// deployFilter.addFilter(ff.equals("taskType", CMSTaskType.DEPLOY)); -// deployFilter.addFilter(getTaskFilter(CMSTaskType.retrieve( -// CMSTaskType.DEPLOY), -// party, ff)); -// -// CompoundFilter permissionFilter = ff.or(); -// permissionFilter.addFilter(authorFilter); -// permissionFilter.addFilter(approveFilter); -// permissionFilter.addFilter(deployFilter); -// -// query.addFilter(permissionFilter); -// -// String lockFilterType = getLockFilterType(state); -// if (lockFilterType.equals("lock")) { -// query.addEqualsFilter("isLocked", "t"); -// query.addEqualsFilter("status", "1"); -// } else if (lockFilterType.equals("unlock")) { -// query.addEqualsFilter("isLocked", "f"); -// } // else show all -// } -// private static class RootFolderSelectionModel -// extends FolderSelectionModel { -// -// CcmObjectSelectionModel m_sectionSel; -// -// public RootFolderSelectionModel(CcmObjectSelectionModel sectionSel) { -// super("f"); -// m_sectionSel = sectionSel; -// } -// -// @Override -// protected BigDecimal getRootFolderID(PageState s) { -// ContentSection sec = (ContentSection) m_sectionSel -// .getSelectedObject(s); -// Assert.exists(sec); -// -// User user = Web.getWebContext().getUser(); -// if (user != null) { -// Folder folder = Folder.getUserHomeFolder(user, sec); -// if (folder != null) { -// return folder.getID(); -// } -// } -// return sec.getRootFolder().getID(); -// } -// -// } -//ToDo End - /** - * - */ - private class TasksPaginationModelBuilder implements PaginationModelBuilder { - - @Override - public int getTotalSize(Paginator paginator, - PageState state) { - return numberTasksForUser(state); - } - - @Override - public boolean isVisible(PageState state) { - return numberTasksForUser(state) > m_maxRows; - } - - } - - private class TaskList extends SimpleComponent { - - private final static String QUERY_NAME - = "com.arsdigita.cms.workflow.getEnabledUserTasks"; - private boolean m_paginate = false; - - public TaskList(boolean paginate) { - m_paginate = paginate; - } - -// private DataQuery makeQuery(PageState state) { -// User user = (User) Kernel.getContext().getParty(); -// -// DataQuery query = SessionManager.getSession() -// .retrieveQuery(QUERY_NAME); -// addQueryFilters(query, user, state); -// -// return query; -// } - public int size(PageState ps) { - return ((Integer)m_taskCount.get(ps)).intValue(); - } - - private RequestLocal m_taskCount = new RequestLocal() { - - @Override - public Object initialValue(PageState state) { -// DataQuery query = makeQuery(state); -// return new Long(query.size()); - return 0; - } - - }; - - @Override - public void generateXML(PageState state, - Element parent) { - Element content = parent.newChildElement("cms:tasksPanel", - CMS.CMS_XML_NS); - exportAttributes(content); - -// DataQuery query = makeQuery(state); - String lockFilterType = getLockFilterType(state); - content.addAttribute("lockFilterType", lockFilterType); - - if (m_paginate) { -// query.setRange(new Integer(m_paginator.getFirst(state)), -// new Integer(m_paginator.getLast(state) + 1)); - } - - String sortKey = getSortType(state); - String sortDirection = getSortDirection(state); - String sortPostfix = " asc"; - if (sortDirection.equals(SORT_DOWN)) { - sortPostfix = " desc"; - } - -// if (sortKey.equals(SORT_TITLE)) { -// query.setOrder("lower(pageTitle) " + sortPostfix -// + ", lower(status) asc, dueDate desc"); -// } else if (sortKey.equals(SORT_DATE)) { -// query.setOrder("dueDate " + sortPostfix -// + ", lower(status) asc, lower(pageTitle) asc"); -// } else if (sortKey.equals(SORT_USER)) { -// query.setOrder("lockingUserID " + sortPostfix -// + ", lower(status) asc, dueDate desc " -// + ", lower(pageTitle) asc"); -// } else if (sortKey.equals(SORT_STATUS)) { -// query.setOrder("lower(status) " + sortPostfix -// + ", dueDate desc " -// + ", lower(pageTitle) asc"); -// -// } else if (sortKey.equals(SORT_ACTION)) { -// query.setOrder("taskType " + sortPostfix -// + ", lower(status) asc, dueDate desc " -// + ", lower(pageTitle) asc"); -// } else if (sortKey.equals(SORT_WORKFLOW)) { -// query.setOrder("processLabel " + sortPostfix -// + ", lower(status) asc, dueDate desc " -// + ", lower(pageTitle) asc"); -// } -// -// HashMap sections = new HashMap(); -// -// while (query.next()) { -// BigDecimal sectionID = (BigDecimal) query.get("sectionID"); -// String sectionPath = (String) sections.get(sectionID); -// if (sectionPath == null) { -// try { -// ContentSection section -// = (ContentSection) DomainObjectFactory -// .newInstance(new OID( -// ContentSection.BASE_DATA_OBJECT_TYPE, -// sectionID)); -// sectionPath = section.getPath(); -// } catch (DataObjectNotFoundException ex) { -// throw new UncheckedWrapperException( -// "cannot find content section", ex); -// } -// sections.put(sectionID, sectionPath); -// } -// -// Element task = content.newChildElement("cms:tasksPanelTask", -// CMS.CMS_XML_NS); -// -// BigDecimal itemID = (BigDecimal) query.get("itemID"); -// String taskType = (String) query.get("taskType"); -// -// task.addAttribute("taskID", query.get("taskID").toString()); -// task -// .addAttribute("processID", query.get("processID").toString()); -// task.addAttribute("taskLabel", (String) query.get("taskLabel")); -// task.addAttribute("taskDescription", (String) query.get( -// "taskDescription")); -// task.addAttribute("processLabel", (String) query.get( -// "processLabel")); -// -// String isLocked = (String) query.get("isLocked"); -// task.addAttribute("isLocked", isLocked); -// if (query.get("dueDate") != null) { -// java.util.Date d = (java.util.Date) query.get("dueDate"); -// SimpleDateFormat df = new SimpleDateFormat( -// "EEE, MMM d, yyyy"); -// -// task.addAttribute("dueDate", df.format(d)); -// } -// -// task.addAttribute("itemID", itemID.toString()); -// task -// .addAttribute("sectionID", query.get("sectionID").toString()); -// task.addAttribute("sectionPath", sectionPath); -// task.addAttribute("pageName", (String) query.get("pageName")); -// task.addAttribute("pageTitle", (String) query.get("pageTitle")); -// -// BigDecimal lockingUserID = (BigDecimal) query.get( -// "lockingUserID"); -// if (lockingUserID != null) { -// task.addAttribute("lockingUserID", lockingUserID.toString()); -// if (!"f".equals(isLocked)) { -// User lockingUser = User.retrieve(lockingUserID); -// if (lockingUser != null) { -// task.addAttribute("assignee", lockingUser -// .getDisplayName()); -// } -// } -// } -// task.addAttribute("taskType", taskType); -// task.addAttribute("taskTypeClass", (String) query.get( -// "taskTypeClass")); -// task.addAttribute("status", query.get("status").toString()); -// -// // control event for locking a task -// try { -// state.setControlEvent(this, TASK_ACTION, itemID.toString()); -// task.addAttribute("actionURL", state.stateAsURL()); -// state.clearControlEvent(); -// } catch (java.io.IOException ex) { -// s_log.warn("Error: " + ex.getMessage()); -// } -// -// if ("Deploy".equals(taskType)) { -// task.addAttribute("editTabNumber", -// String.valueOf( -// ContentItemPage.PUBLISHING_TAB)); -// } else { -// task.addAttribute("editTabNumber", -// String.valueOf( -// ContentItemPage.AUTHORING_TAB)); -// } - } - - // m_actionLabel.generateXML(state, content); - String[][] sortableHeaders = {{SORT_TITLE, - "cms.ui.workflow.task.item_title"}, - {SORT_ACTION, "cms.ui.action"}, - {SORT_DATE, "cms.ui.tasks_due_date"}, - {SORT_STATUS, - "cms.ui.tasks_status_no_colon"}, - {SORT_USER, - "cms.ui.workflow.task.locking_user"}, - {SORT_WORKFLOW, "cms.ui.workflow"}}; -// for (int i = 0; i < sortableHeaders.length; i++) { -// String header = sortableHeaders[i][0]; -// String labelKey = sortableHeaders[i][1]; -// if (sortDirection.equals(SORT_UP) && header.equals(sortKey)) { -// state.setControlEvent(this, SORT_DOWN, header); -// } else { -// state.setControlEvent(this, SORT_UP, header); -// } -// SimpleContainer container = new SimpleContainer(); -// container.add(new Label(GlobalizationUtil.globalize(labelKey))); -// if (header.equals(sortKey)) { -// String imageURLStub = null; -// if (SORT_UP.equals(sortDirection)) { -// imageURLStub = UP_ARROW_IMAGE; -// } else { -// imageURLStub = DOWN_ARROW_IMAGE; -// } -// Image image = new Image(imageURLStub); -// image.setBorder("0"); -// container.add(image); -// } -// -// ControlLink link = new ControlLink(container); -// link.setHint(GlobalizationUtil -// .globalize("cms.ui.contentcenter.task_panel_control")); -// link.setClassAttr(header); -// link.generateXML(state, content); -// state.clearControlEvent(); -// } - - } - - @Override - public void respond(PageState state) throws ServletException { - String key = state.getControlEventName(); - String value = state.getControlEventValue(); - if (TASK_ACTION.equals(key)) { - BigDecimal itemID = new BigDecimal(value); -// -// try { -// ContentItem item = new ContentItem(itemID); -// Workflow wf = Workflow.getObjectWorkflow(item); -// int tabNumber = ContentItemPage.AUTHORING_TAB; -// String sectionPath = item.getContentSection().getPath(); -// -// if (wf != null) { -// User user = Web.getWebContext().getUser(); -// Engine engine = Engine.getInstance( -// CMSEngine.CMS_ENGINE_TYPE); -// Iterator i = engine.getEnabledTasks(user, wf.getID()) -// .iterator(); -// if (i.hasNext()) { -// CMSTask task = (CMSTask) i.next(); -// Integer taskType = task.getTaskType().getID(); -// -// if (taskType.equals(CMSTaskType.DEPLOY)) { -// tabNumber = ContentItemPage.PUBLISHING_TAB; -// } else // see if item is locked; if not, lock -// { -// if (!task.isLocked()) { -// task.lock(user); -// } -// } -// } -// } -// -// String redirectURL = Web.getConfig() -// .getDispatcherServletPath() -// + sectionPath -// + "/admin/item.jsp?item_id=" -// + itemID + "&set_tab=" + tabNumber; -// throw new RedirectSignal(redirectURL, true); -// } catch (DataObjectNotFoundException ex) { -// throw new ServletException("Unknown content ID" + itemID); -// } -// } else - if (SORT_UP.equals(key) || SORT_DOWN.equals(key)) { - state.setValue(m_sortTypeParam, value); - if (SORT_DOWN.equals(key)) { - state.setValue(m_sortDirectionParam, SORT_DOWN); - } else { - state.setValue(m_sortDirectionParam, SORT_UP); - } - } else { - throw new ServletException("Unknown control event: " + key); - } - } - - } - -// private static Filter getTaskFilter(CMSTaskType taskType, Party party, -// FilterFactory factory) { -// PrivilegeDescriptor privilege; -// String queryName; -// String queryType; -// OID partyOID = party.getOID(); -// privilege = taskType.getPrivilege(); -// -// return PermissionService.getFilterQuery(factory, "itemID", privilege, -// partyOID); -// } -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowAddForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowAddForm.java deleted file mode 100755 index d59fe7a1a..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowAddForm.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * 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.workflow; - -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.cms.CMS; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.workflow.Workflow; - -/** - * @author Uday Mathur - * @author Michael Pih - * @author Justin Ross - * @author Jens Pelzetter - */ -class WorkflowAddForm extends BaseWorkflowForm { - - private final SingleSelectionModel m_model; - - WorkflowAddForm(final SingleSelectionModel model) { - super("workflow", gz("cms.ui.workflow.add")); - - m_model = model; - - addProcessListener(new ProcessListener()); - } - - private class ProcessListener implements FormProcessListener { - - @Override - public final void process(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - - final String label = (String) m_title.getValue(state); - final String description = (String) m_description.getValue(state); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final WorkflowAdminPaneController controller = cdiUtil.findBean( - WorkflowAdminPaneController.class); - - final Workflow workflow = controller.createWorkflow( - CMS.getContext().getContentSection(), - label, - description); - - m_model.setSelectedKey(state, workflow.getWorkflowId()); - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowAdminPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowAdminPane.java deleted file mode 100755 index 7268269b2..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowAdminPane.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2001-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.workflow; - -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.cms.ui.BaseAdminPane; -import com.arsdigita.cms.ui.BaseDeleteForm; -import com.arsdigita.cms.ui.VisibilityComponent; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.workflow.Workflow; -import org.libreccm.workflow.WorkflowRepository; - -import org.librecms.contentsection.privileges.AdminPrivileges; - -/** - * @author Justin Ross - * @author Jens Pelzetter - */ -public final class WorkflowAdminPane extends BaseAdminPane { - - private final WorkflowRequestLocal m_workflow; - - public WorkflowAdminPane() { - super(gz("cms.ui.workflows"), new WorkflowListModelBuilder()); - - m_workflow = new SelectionRequestLocal(); - - setAdd(gz("cms.ui.workflow.add"), - new WorkflowAddForm(getSelectionModel())); - setEdit(gz("cms.ui.workflow.edit"), new WorkflowEditForm(m_workflow)); - setDelete(gz("cms.ui.workflow.delete"), new DeleteForm()); - - setIntroPane(new Label(gz("cms.ui.workflow.intro"))); - setItemPane(new WorkflowItemPane(m_workflow, - getEditLink(), - getDeleteLink())); - - addAction(new VisibilityComponent( - getAddLink(), AdminPrivileges.ADMINISTER_WORKFLOWS)); - } - - private class DeleteForm extends BaseDeleteForm { - - DeleteForm() { - super(gz("cms.ui.workflow.delete_prompt")); - - addSecurityListener(AdminPrivileges.ADMINISTER_WORKFLOWS); - } - - @Override - public final void process(final FormSectionEvent event) - throws FormProcessException { - final PageState state = event.getPageState(); - - final CdiUtil cdiUtil= CdiUtil.createCdiUtil(); - final WorkflowRepository workflowRepo= cdiUtil.findBean(WorkflowRepository.class); - - final Workflow workflow = m_workflow.getWorkflow(state); - workflowRepo.delete(workflow); - - getSelectionModel().clearSelection(state); - } - - } - - private class SelectionRequestLocal extends WorkflowRequestLocal { - - @Override - protected final Object initialValue(final PageState state) { - final String id = getSelectionModel().getSelectedKey(state) - .toString(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final WorkflowRepository templateRepo = cdiUtil.findBean( - WorkflowRepository.class); - - return templateRepo.findById(Long.parseLong(id)); - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowItemPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowItemPane.java deleted file mode 100755 index c21349ba0..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowItemPane.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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.workflow; - -import com.arsdigita.bebop.ActionLink; - -class WorkflowItemPane extends BaseWorkflowItemPane { - - public WorkflowItemPane(final WorkflowRequestLocal workflow, - final ActionLink editLink, - final ActionLink deleteLink) { - super(workflow, editLink, deleteLink); - } -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowLockedComponentAccess.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowLockedComponentAccess.java deleted file mode 100755 index 35b6ac843..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/workflow/WorkflowLockedComponentAccess.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2001-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.workflow; - -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.PageState; - -import org.librecms.contentsection.ContentItem; - -import com.arsdigita.cms.ItemSelectionModel; -import com.arsdigita.toolbox.ui.ComponentAccess; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.security.PermissionChecker; -import org.librecms.contentsection.privileges.ItemPrivileges; - -/** - * A ComponentAccess implementation that respects workflow - * - * @author Stanislav Freidin - * @author Uday Mathur - * @author Jens Pelzetter - */ -public class WorkflowLockedComponentAccess extends ComponentAccess { - - private static final Logger LOGGER = LogManager.getLogger( - WorkflowLockedComponentAccess.class); - private final ItemSelectionModel itemModel; - - /** - * Constructor. - * - * @param component The component - * @param itemModel - */ - public WorkflowLockedComponentAccess(final Component component, - final ItemSelectionModel itemModel) { - super(component); - this.itemModel = itemModel; - } - - /** - * Constructor. - * - * @param component The component - * @param check An access check - * @param itemModel - */ - public WorkflowLockedComponentAccess(final Component component, - final String check, - final ItemSelectionModel itemModel) { - super(component, check); - this.itemModel = itemModel; - } - - /** - * Check if this item is locked from the workflow module. In addition check - * if all the access checks registered to the component pass. - * - * @param state The page state - * - * @return true if all the access checks pass, false otherwise - * - */ - @Override - public boolean canAccess(final PageState state) { - final ContentItem item = itemModel.getSelectedObject(state); - - if (isVisible(state) == true) { - if (super.canAccess(state)) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); - - final boolean result = permissionChecker.isPermitted( - ItemPrivileges.EDIT, item); - LOGGER.debug( - "Superclass security check passed. Result of check " - + "for permission {}.{} is {}.", - ItemPrivileges.class.getName(), - ItemPrivileges.EDIT, - result); - - return result; - } else { - return false; - } - } else { - return false; - } - } - - /** - * Override this method to change visiblity of action link created by - * SecurityPropertyEditor add-method. If this method returns false, the link - * will be hidden, p.ex. to hide a delete link if the component is already - * empty. - * - * @param state The page state - * - * @return true for default behavior - */ - public boolean isVisible(final PageState state) { - return true; - } - -}