From 01d8874193c6d82562ff964848127e722efc141c Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Wed, 16 Mar 2022 19:44:23 +0100 Subject: [PATCH] Removed depcrecated package com/arsdigita/cms/ui/type --- .../arsdigita/cms/ui/ContentSectionPage.java | 83 ++-- .../cms/ui/type/ContentTypeAdminPane.java | 366 ----------------- .../type/ContentTypeAdminPaneController.java | 247 ----------- .../cms/ui/type/ContentTypeItemPane.java | 355 ---------------- .../ui/type/ContentTypeListModelBuilder.java | 90 ---- .../cms/ui/type/ContentTypePropertyList.java | 141 ------- .../cms/ui/type/ContentTypeRequestLocal.java | 34 -- .../com/arsdigita/cms/ui/type/EditType.java | 386 ------------------ .../com/arsdigita/cms/ui/type/SelectType.java | 211 ---------- .../cms/ui/type/TypePermissionsTable.java | 262 ------------ .../type/TypePermissionsTableController.java | 114 ------ .../cms/ui/type/TypeSecurityContainer.java | 55 --- .../cms/ui/type/TypeSecurityListener.java | 51 --- 13 files changed, 26 insertions(+), 2369 deletions(-) delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java delete mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPaneController.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeListModelBuilder.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypePropertyList.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeRequestLocal.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/EditType.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/SelectType.java delete mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java delete mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTableController.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityContainer.java delete mode 100755 ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityListener.java 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 df3d9b518..c5a2875cf 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 @@ -36,12 +36,10 @@ import org.librecms.contentsection.ContentSection; import com.arsdigita.cms.dispatcher.CMSPage; import com.arsdigita.cms.ui.category.CategoryAdminPane; -//ToDo NG import com.arsdigita.cms.ui.category.CategoryAdminPane; import com.arsdigita.cms.ui.cse.ContentSoonExpiredPane; import com.arsdigita.cms.ui.folder.FolderAdminPane; import com.arsdigita.cms.ui.lifecycle.LifecycleAdminPane; import com.arsdigita.cms.ui.role.RoleAdminPane; -import com.arsdigita.cms.ui.type.ContentTypeAdminPane; import com.arsdigita.cms.ui.workflow.WorkflowAdminPane; import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.toolbox.ui.LayoutPanel; @@ -77,59 +75,73 @@ public class ContentSectionPage extends CMSPage implements ActionListener { * expansion from content item page. */ public static final String SET_FOLDER = "set_folder"; + /** * The URL parameter that can be passed in in order to set the current * template (for setting the content type) */ public static final String SET_TEMPLATE = "set_template"; + /** * The URL parameter that can be passed in in order to set the current tab. * This is a KLUDGE right now because the TabbedDialog's current tab is * selected with a local state parameter. */ public static final String SET_TAB = "set_tab"; + /** * Index of the search tab */ public static final int SEARCH_TAB = 0; + /** * Index of the browse tab */ public static final int BROWSE_TAB = 1; + /** * Index of the roles tab */ public static final int ROLES_TAB = 2; + /** * Index of the workflows tab */ public static final int WORKFLOW_TAB = 3; + /** * Index of the lifecycles tab */ public static final int LIFECYCLES_TAB = 4; + /** * Index of the categories tab */ public static final int CATEGORIES_TAB = 5; + /** * Index of the content types tab */ public static final int CONTENTTYPES_TAB = 6; + public static final int USER_ADMIN_TAB = 7; private TabbedPane m_tabbedPane; + private FolderAdminPane m_folderPane; + private BrowsePane m_browsePane; + private ItemSearch m_searchPane; -// private AssetPane m_assetPane; -//ToDo NG private ImagesPane m_imagesPane; + private RoleAdminPane m_rolePane; + private WorkflowAdminPane m_workflowPane; + private LifecycleAdminPane m_lifecyclePane; + private CategoryAdminPane m_categoryPane; - private ContentTypeAdminPane m_typePane; - //private LayoutPanel m_userAdminPane; + private LayoutPanel m_csePane; /** @@ -148,18 +160,11 @@ public class ContentSectionPage extends CMSPage implements ActionListener { m_folderPane = getFolderAdminPane(); m_browsePane = getBrowsePane(); m_searchPane = getSearchPane(); - m_assetPane = getAssetPane(); -//ToDo NG m_imagesPane = getImagesPane(); m_rolePane = getRoleAdminPane(); m_workflowPane = getWorkflowAdminPane(); m_lifecyclePane = getLifecycleAdminPane(); m_categoryPane = getCategoryAdminPane(); - m_typePane = getContentTypeAdminPane(); - // userAdminPane removed, used to contain just one item (reset user - // folder) which moved to the FolderAdminPane - //m_userAdminPane = getUserAdminPane(); m_csePane = getCSEPane(); - m_reportPane = getReportPane(); // The panes m_tabbedPane = createTabbedPane(); @@ -187,7 +192,8 @@ public class ContentSectionPage extends CMSPage implements ActionListener { m_tabbedPane.setTabVisible( state, m_workflowPane, - permissionChecker.isPermitted(AdminPrivileges.ADMINISTER_WORKFLOWS)); + permissionChecker.isPermitted( + AdminPrivileges.ADMINISTER_WORKFLOWS)); m_tabbedPane.setTabVisible( state, m_categoryPane, @@ -198,11 +204,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { m_lifecyclePane, permissionChecker.isPermitted( AdminPrivileges.ADMINISTER_LIFECYLES)); - m_tabbedPane.setTabVisible( - state, - m_typePane, - permissionChecker.isPermitted( - AdminPrivileges.ADMINISTER_CONTENT_TYPES)); m_tabbedPane.setTabVisible( state, @@ -253,7 +254,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener { protected ItemSearch getSearchPane() { if (m_searchPane == null) { m_searchPane - = new ItemSearch( + = new ItemSearch( ContentItemVersion.DRAFT.toString(), CMSConfig.getConfig().isLimitItemSearchToContentSection()); } @@ -267,7 +268,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { // // return m_assetPane; // } - // ToDo NG // protected ImagesPane getImagesPane() { // if (m_imagesPane == null) { @@ -315,28 +315,6 @@ public class ContentSectionPage extends CMSPage implements ActionListener { return m_categoryPane; } - /** - * Creates, and then caches, the content type administration pane. - * Overriding this method to return null will prevent this tab from - * appearing. - * - * @return - */ - protected ContentTypeAdminPane getContentTypeAdminPane() { - if (m_typePane == null) { - m_typePane = new ContentTypeAdminPane(); - } - return m_typePane; - } - -// protected LayoutPanel getUserAdminPane() { -// if (m_userAdminPane == null) { -// m_userAdminPane = new LayoutPanel(); -// m_userAdminPane.setLeft(new SimpleComponent()); -// m_userAdminPane.setBody(new UserAdminPane()); -// } -// return m_userAdminPane; -// } protected LayoutPanel getCSEPane() { if (m_csePane == null) { m_csePane = new LayoutPanel(); @@ -346,14 +324,13 @@ public class ContentSectionPage extends CMSPage implements ActionListener { return m_csePane; } - /** * 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 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 + * @param comp The component to add to the pane */ protected void addToPane(final TabbedPane pane, final String tabName, @@ -391,15 +368,12 @@ public class ContentSectionPage extends CMSPage implements ActionListener { //tab(pane, "cms.ui.folders", getFolderAdminPane()); tab(pane, "cms.ui.browse", getBrowsePane()); tab(pane, "cms.ui.search", getSearchPane()); - tab(pane, "cms.ui.assets", getAssetPane()); // ToDo NG replace with media tab tab(pane, "cms.ui.images", getImagesPane()); tab(pane, "cms.ui.roles", getRoleAdminPane()); tab(pane, "cms.ui.workflows", getWorkflowAdminPane()); tab(pane, "cms.ui.lifecycles", getLifecycleAdminPane()); tab(pane, "cms.ui.categories", getCategoryAdminPane()); - tab(pane, "cms.ui.content_types", getContentTypeAdminPane()); tab(pane, "cms.ui.cse", getCSEPane()); - tab(pane, "cms.ui.reports", getReportPane()); return pane; } @@ -436,9 +410,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener { // } else if (pane == m_imagesPane) { // m_imagesPane.reset(state); // } else - if (pane == m_assetPane) { - m_assetPane.reset(state); - } else if (pane == m_folderPane) { + if (pane == m_folderPane) { m_folderPane.reset(state); //ToDo NG } else if (pane == m_browsePane) { // m_browsePane.reset(state); @@ -450,10 +422,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener { m_lifecyclePane.reset(state); } else if (pane == m_categoryPane) { m_categoryPane.reset(state); - } else if (pane == m_typePane) { - m_typePane.reset(state); -// } else if (pane == m_userAdminPane) { - //m_userAdminPane.reset(state); + } else if (pane == m_csePane) { m_csePane.reset(state); } @@ -463,7 +432,7 @@ public class ContentSectionPage extends CMSPage implements ActionListener { * Construct a URL for displaying the tab * * @param item The item from which we get the corresponding content section - * @param tab The index of the tab to display + * @param tab The index of the tab to display * * @return */ diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java deleted file mode 100755 index 58ec05906..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java +++ /dev/null @@ -1,366 +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.type; - -import com.arsdigita.bebop.ActionLink; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.GridPanel; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSubmissionListener; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.event.PrintListener; -import com.arsdigita.cms.CMS; - -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentType; -//ToDo import com.arsdigita.cms.SectionTemplateMapping; - -import com.arsdigita.cms.ui.BaseAdminPane; -import com.arsdigita.cms.ui.BaseDeleteForm; -import com.arsdigita.globalization.GlobalizedMessage; -//ToDo insert later import com.arsdigita.cms.ui.ContentSectionPage; - -import com.arsdigita.kernel.ui.ACSObjectSelectionModel; -import com.arsdigita.toolbox.ui.ActionGroup; -import com.arsdigita.toolbox.ui.Cancellable; -import com.arsdigita.toolbox.ui.Section; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.core.UnexpectedErrorException; -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentSectionManager; -import org.librecms.contentsection.ContentTypeManager; -import org.librecms.contenttypes.ContentTypeInfo; - -import java.util.List; -import java.util.TooManyListenersException; - -/** - * This class contains the split pane for the ContentType administration - * interface. - * - * @author Jack Chung - * @author Michael Pih - * @author Stanislav Freidin - * @author Justin Ross <jross@redhat.com> - * @author Jens Pelzetter - */ -public final class ContentTypeAdminPane extends BaseAdminPane { - - private static final Logger LOGGER = LogManager.getLogger( - ContentTypeAdminPane.class); - - private final ACSObjectSelectionModel m_model; - private final ContentTypeRequestLocal m_type; - - /** - * Constructs an admin pane. It is containing (a) a list of available - * content types in a given content section and adds a link to make - * additional content types available (out of a list of installed, but - * available in a given content section). - */ - public ContentTypeAdminPane() { - - // - super(new Label(gz("cms.ui.types")), - new ContentTypeListModelBuilder()); //list with all Types avail. - - m_model = new ACSObjectSelectionModel(getSelectionModel()); - m_type = new SelectionRequestLocal(); - - ActionLink addTypeLink - = new ActionLink(new Label(gz("cms.ui.type.add"))); - - AddTypeContainer addTypeContainer = new AddTypeContainer(); - getBody().add(addTypeContainer); - getBody().connect(addTypeLink, addTypeContainer); - addTypeLink.addActionListener(addTypeContainer); - - setEdit(new ActionLink(new Label(gz("cms.ui.type.edit"))), - new EditType(m_model)); - - setDelete(new ActionLink(new Label(gz("cms.ui.type.delete"))), - new DeleteForm()); - - setIntroPane(new Label(gz("cms.ui.type.intro"))); - setItemPane(new ContentTypeItemPane(m_model, - m_type, - getEditLink(), - getDeleteLink())); - - addAction(new TypeSecurityContainer(addTypeLink), ActionGroup.ADD); - } - - @Override - public void register(final Page page) { - super.register(page); - - page.addActionListener(new ActionListener() { - - /** - * - * @param event - */ - @Override - public void actionPerformed(final ActionEvent event) { -// ToDo -// final PageState state = event.getPageState(); -// ContentType contentType = (ContentType) m_model.getSelectedObject(state); -// ContentSection section = CMS.getContext().getContentSection(); -// if (contentType == null) { -// final String template = state.getRequest() -// .getParameter(ContentSectionPage -// .SET_TEMPLATE); -// if (template != null) { -// DataCollection da = SessionManager.getSession().retrieve(SectionTemplateMapping.BASE_DATA_OBJECT_TYPE); -// DomainCollection c = new DomainCollection(da); -// c.addEqualsFilter(SectionTemplateMapping.SECTION + "." + ACSObject.ID, -// section.getID()); -// c.addEqualsFilter(SectionTemplateMapping.TEMPLATE + "." + ACSObject.ID, -// new BigDecimal(template)); -// c.addOrder(SectionTemplateMapping.CONTENT_TYPE + "." + ContentType.LABEL); -// if (c.next()) { -// SectionTemplateMapping mapping = -// (SectionTemplateMapping) c.getDomainObject(); -// contentType = mapping.getContentType(); -// } -// c.close(); -// } -// if (contentType == null) { -// ContentTypeCollection contentTypes = section.getContentTypes(); -// contentTypes.addOrder("label asc"); -// try { -// if (contentTypes.next()) { -// contentType = contentTypes.getContentType(); -// } -// } finally { -// contentTypes.close(); -// } -// } -// if (contentType != null) { -// m_model.setSelectedObject(state, contentType); -// getBody().push(state, getItemPane()); -// } -// -// -// } - } - - }); - } - -// ToDo (?) User Definied Content Types -// private class AddTypeContainer extends GridPanel implements ActionListener, -// FormProcessListener { -// -// private Label m_noTypesAvailable = -// new Label(gz("cms.ui.type.select.none")); -// private SelectType m_selectType; -//// User Definied Content Types private CreateType m_createType; -// -// /** -// * -// */ -// AddTypeContainer() { -// super(1); -// Section selectSection = new Section(); -// selectSection.setHeading(new Label(gz("cms.ui.type.select"))); -// add(selectSection); -// -// GridPanel container = new GridPanel(1); -// container.add(m_noTypesAvailable); -// m_selectType = new SelectType(); -// m_selectType.addSubmissionListener(new CancelListener(m_selectType)); -// m_selectType.addProcessListener(this); -// container.add(m_selectType); -// selectSection.setBody(container); -// -// Section addSection = new Section() { -// -// @Override -// public final boolean isVisible(final PageState state) { -// return super.isVisible(state) -// && !ContentSection.getConfig().getHideUDCTUI(); -// } -// }; -// addSection.setHeading(new Label(gz("cms.ui.type.define"))); -// m_createType = new CreateType(m_model); -// m_createType.addSubmissionListener(new CancelListener(m_createType)); -// m_createType.addProcessListener(this); -// addSection.setBody(m_createType); -// add(addSection); -// } -// -// /** -// * -// * @param e -// */ -// @Override -// public void actionPerformed(ActionEvent e) { -// PageState s = e.getPageState(); -// ContentSection section = CMS.getContext().getContentSection(); -// ContentTypeCollection contentTypes = -// section.getNotAssociatedContentTypes(); -// boolean hasAvailableTypes = !contentTypes.isEmpty(); -// m_selectType.setVisible(s, hasAvailableTypes); -// m_noTypesAvailable.setVisible(s, !hasAvailableTypes); -// } -// -// public final void process(final FormSectionEvent e) -// throws FormProcessException { -// final PageState state = e.getPageState(); -// resetPane(state); -// } -// } - /** - * This class is essentially a copy of the CancelListener inside of - * ModalPanel. We could not use the one in ModalPanel because it was - * protected - */ - private final class CancelListener implements FormSubmissionListener { - - Cancellable m_form; - - CancelListener(final Cancellable form) { - m_form = form; - } - - @Override - public void submitted(FormSectionEvent event) - throws FormProcessException { - PageState state = event.getPageState(); - if (m_form.isCancelled(state)) { - getBody().pop(state); - throw new FormProcessException(new GlobalizedMessage( - "cms.ui.type.cancelled", CmsConstants.CMS_BUNDLE)); - } - } - - } // end private class - - private void resetPane(final PageState state) { - getBody().reset(state); - if (getSelectionModel().isSelected(state)) { - LOGGER.debug("The selection model is selected; displaying " - + "the item pane"); - getBody().push(state, getItemPane()); - } - } - - private class SelectionRequestLocal extends ContentTypeRequestLocal { - - @Override - protected final Object initialValue(final PageState state) { - ContentType contentType = (ContentType) m_model.getSelectedObject( - state); - return contentType; - } - - } - - private class DeleteForm extends BaseDeleteForm { - - DeleteForm() { - super(new Label(gz("cms.ui.type.delete_prompt"))); - - addSubmissionListener(new TypeSecurityListener()); - } - - @Override - public final void process(final FormSectionEvent e) - throws FormProcessException { - final PageState state = e.getPageState(); - final ContentSection section = CMS.getContext().getContentSection(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentSectionManager sectionManager = cdiUtil.findBean( - ContentSectionManager.class); - final ContentTypeManager typeManager = cdiUtil.findBean( - ContentTypeManager.class); - - m_type.getContentType(state).getContentItemClass(); - - sectionManager.removeContentTypeFromSection( - typeManager.classNameToClass(m_type.getContentType(state) - .getContentItemClass()), - section); - - getSelectionModel().clearSelection(state); - } - - } - - private class AddTypeContainer - extends GridPanel - implements ActionListener, FormProcessListener { - - private final Label noTypesAvailableLabel - = new Label(gz("cms.ui.type.select.none")); - private final SelectType selectType; - - public AddTypeContainer() { - super(1); - - final Section selectSection = new Section(); - selectSection.setHeading(new Label(gz("cms.ui.type.select"))); - add(selectSection); - - final GridPanel container = new GridPanel(1); - container.add(noTypesAvailableLabel); - selectType = new SelectType(); - selectType.addSubmissionListener(new CancelListener(selectType)); - selectType.addProcessListener(this); - container.add(selectType); - selectSection.setBody(container); - } - - @Override - public void actionPerformed(final ActionEvent event) { - - final PageState state = event.getPageState(); - final ContentSection section = CMS.getContext().getContentSection(); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeAdminPaneController controller = cdiUtil - .findBean(ContentTypeAdminPaneController.class); - final List contentTypes = controller - .getNotAssociatedContentTypes(section); - final boolean hasAvailableTypes = !contentTypes.isEmpty(); - selectType.setVisible(state, hasAvailableTypes); - noTypesAvailableLabel.setVisible(state, !hasAvailableTypes); - } - - @Override - public void process(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - resetPane(state); - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPaneController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPaneController.java deleted file mode 100644 index 5b60a7236..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPaneController.java +++ /dev/null @@ -1,247 +0,0 @@ -/* - * Copyright (C) 2016 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.type; - -import org.libreccm.workflow.Workflow; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentSectionManager; -import org.librecms.contentsection.ContentSectionRepository; -import org.librecms.contentsection.ContentType; -import org.librecms.contentsection.ContentTypeManager; -import org.librecms.contentsection.ContentTypeRepository; -import org.librecms.contenttypes.ContentTypeInfo; -import org.librecms.contenttypes.ContentTypesManager; -import org.librecms.lifecycle.LifecycleDefinition; - -import java.nio.charset.IllegalCharsetNameException; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Objects; -import java.util.Optional; -import java.util.ResourceBundle; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.transaction.Transactional; - -/** - * A controller class for the {@link ContentTypeAdminPane} and its associated - * classes. For now it only contains methods which require or transaction (which - * are controlled by the container now). - * - * - * @author Jens Pelzetter - */ -@RequestScoped -class ContentTypeAdminPaneController { - - @Inject - private EntityManager entityManager; - - @Inject - private ContentSectionRepository sectionRepo; - - @Inject - private ContentSectionManager sectionManager; - - @Inject - private ContentTypeRepository typeRepo; - - @Inject - private ContentTypeManager typeManager; - - @Inject - private ContentTypesManager typesManager; - - @Transactional(Transactional.TxType.REQUIRED) - protected List getTypeList(final ContentSection section) { - final List types = typeRepo.findByContentSection(section); - - return types.stream() - .map(type -> generateListEntry(type)) - .collect(Collectors.toList()); - } - - @Transactional - protected List getContentItemClassesList( - final ContentSection ofSection - ) { - final ContentSection section = sectionRepo.findById( - ofSection.getObjectId() - ) - .orElseThrow( - () -> new IllegalArgumentException( - String.format( - "No ContentSection with ID %d found.", - ofSection.getObjectId() - ) - ) - ); - return section.getContentTypes() - .stream() - .map(type -> type.getContentItemClass()) - .collect(Collectors.toList()); - } - - private String[] generateListEntry(final ContentType type) { - final String[] entry = new String[2]; - - entry[0] = Long.toString(type.getObjectId()); - - final ContentTypeInfo typeInfo = typesManager - .getContentTypeInfo(type.getContentItemClass()); - final ResourceBundle labelBundle = ResourceBundle - .getBundle(typeInfo.getLabelBundle()); - final String labelKey = typeInfo.getLabelKey(); - - entry[1] = labelBundle.getString(labelKey); - - return entry; - } - - @Transactional(Transactional.TxType.REQUIRED) - protected List getNotAssociatedContentTypes( - final ContentSection section) { - - final List availableTypes = typesManager - .getAvailableContentTypes(); - final List associatedTypes = typeRepo - .findByContentSection(section) - .stream() - .map(type -> typesManager.getContentTypeInfo(type)) - .collect(Collectors.toList()); - - return availableTypes - .stream() - .filter(typeInfo -> !associatedTypes.contains(typeInfo)) - .collect(Collectors.toList()); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected LifecycleDefinition getLifecycleDefinition(final ContentType type) { - - final ContentType contentType = typeRepo - .findById(type.getObjectId()) - .orElseThrow(() -> new IllegalCharsetNameException(String.format( - "No ContentType with Id %d in the database. " - + "Where did that ID come from?", - type.getObjectId()))); - - return contentType.getDefaultLifecycle(); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected Optional getLifecycleDefinitionLabel( - final ContentType type, - final Locale locale) { - - final LifecycleDefinition lifecycleDefinition = getLifecycleDefinition( - type); - - if (lifecycleDefinition == null) { - return Optional.empty(); - } else { - return Optional.of(lifecycleDefinition.getLabel().getValue(locale)); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - protected Workflow getWorkflowTemplate(final ContentType type) { - - final ContentType contentType = typeRepo - .findById(type.getObjectId()) - .orElseThrow(() -> new IllegalCharsetNameException(String.format( - "No ContentType with Id %d in the database. " - + "Where did that ID come from?", - type.getObjectId()))); - - return contentType.getDefaultWorkflow(); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected Optional getWorkflowTemplateName(final ContentType type, - final Locale locale) { - - final Workflow workflowTemplate = getWorkflowTemplate(type); - - if (workflowTemplate == null) { - return Optional.empty(); - } else { - return Optional.of(workflowTemplate.getName().getValue(locale)); - } - } - - @Transactional(Transactional.TxType.REQUIRED) - protected List getLifecycleDefinitions( - final ContentSection section) { - - final ContentSection contentSection = sectionRepo - .findById(section.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No ContentSection with ID %d in the database. " - + "Where did that ID come from?", - section.getObjectId()))); - - return new ArrayList<>(contentSection.getLifecycleDefinitions()); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected List getWorkflowTemplates( - final ContentSection section) { - - final ContentSection contentSection = sectionRepo - .findById(section.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No ContentSection with ID %d in the database. " - + "Where did that ID come from?", - section.getObjectId()))); - - return new ArrayList<>(contentSection.getWorkflowTemplates()); - } - - @Transactional(Transactional.TxType.REQUIRED) - protected void addContentTypeToContentSection( - final String type, final ContentSection toSection - ) { - Objects.requireNonNull(type); - Objects.requireNonNull(toSection); - - final ContentSection section = sectionRepo - .findById(toSection.getObjectId()) - .orElseThrow( - () -> new IllegalArgumentException( - String.format( - "No ContentSection identified by ID %d found.", - toSection.getObjectId() - ) - ) - ); - - sectionManager.addContentTypeToSection( - typeManager.classNameToClass(type), - section, - section.getLifecycleDefinitions().get(0), - section.getWorkflowTemplates().get(0) - ); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java deleted file mode 100755 index d8162a027..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java +++ /dev/null @@ -1,355 +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.type; - -import com.arsdigita.bebop.ActionLink; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.event.ActionEvent; -import com.arsdigita.bebop.event.ActionListener; -import com.arsdigita.bebop.form.Submit; -import com.arsdigita.cms.CMS; - -import org.librecms.contentsection.ContentItem; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentType; - -import com.arsdigita.cms.ui.BaseItemPane; -import com.arsdigita.cms.ui.ContentSectionRequestLocal; -//ToDo import com.arsdigita.cms.ui.templates.SectionTemplatesListing; -//ToDo import com.arsdigita.cms.ui.templates.TemplateCreate; -import com.arsdigita.kernel.ui.ACSObjectSelectionModel; -import com.arsdigita.toolbox.ui.ActionGroup; -import com.arsdigita.toolbox.ui.Cancellable; -import com.arsdigita.toolbox.ui.Section; -import com.arsdigita.util.UncheckedWrapperException; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.security.PermissionChecker; -import org.librecms.contentsection.ContentSectionManager; -import org.librecms.contentsection.ContentTypeManager; -import org.librecms.contentsection.privileges.AdminPrivileges; - -/** - * - * @author Justin Ross <jross@redhat.com> - * @author Jens Pelzetter - */ -final class ContentTypeItemPane extends BaseItemPane { - - private final ACSObjectSelectionModel m_model; - private final ContentTypeRequestLocal m_type; - private final SimpleContainer m_detailPane; -// Only useful for user definied content types private final TypeElements m_elements; -// Only useful for user definied content types private final AddElement m_elementAddForm; -// ToDo private final SectionTemplatesListing m_templates; - private final TypePermissionsTable m_permissions; - - ContentTypeItemPane(final ACSObjectSelectionModel model, - final ContentTypeRequestLocal type, - final ActionLink editLink, - final ActionLink deleteLink) { - m_model = model; - m_type = type; - - m_detailPane = new SimpleContainer(); - add(m_detailPane); - setDefault(m_detailPane); - -// m_elements = new TypeElements(m_model); -// m_elementAddForm = new AddElement(); -// ToDo -// m_templates = new SectionTemplatesListing( -// new ContentSectionRequestLocal(), m_type); - m_permissions = new TypePermissionsTable( - new ContentSectionRequestLocal(), m_type); - - final ActionLink templateAddLink = new ActionLink(new Label(gz( - "cms.ui.type.template.add"))); -// ToDo -// final TemplateCreate templateFormSection = new TemplateCreate(m_model); -// final Form templateForm = new CancellableForm("AddTemplate", -// templateFormSection. -// getSaveCancelSection().getCancelButton()); -// templateForm.add(templateFormSection); -// add(templateForm); - -// final AddTextElement textForm = new AddTextElement(m_model); -// add(textForm); -// -// final AddNumberElement numberForm = new AddNumberElement(m_model); -// add(numberForm); -// -// final AddDateElement dateForm = new AddDateElement(m_model); -// add(dateForm); -// -// final AddTextAssetElement assetForm = new AddTextAssetElement(m_model); -// add(assetForm); -// -// final AddImageElement imageForm = new AddImageElement(m_model); -// add(imageForm); -// -// final AddFileElement fileForm = new AddFileElement(m_model); -// add(fileForm); -// -// final AddContentItemElement itemForm -// = new AddContentItemElement(m_model); -// add(itemForm); - m_detailPane.add(new SummarySection(editLink, deleteLink)); -// m_detailPane.add(new RelationAttributeSection()); - - m_detailPane.add(new TypeSecurityContainer(new ElementSection())); - m_detailPane.add(new TemplateSection(templateAddLink)); - - //m_detailPane.add(new PermissionsSection(permissionAddLink)); - m_detailPane.add(new PermissionsSection()); - -// connect(templateAddLink, templateForm); - // connect(permissionAddLink, permissionsForm); -// final SingleSelect elementSelect -// = m_elementAddForm.getElementTypeSelect(); -// -// connect(m_elementAddForm, elementSelect, -// AddElement.TEXT_ELEMENT, textForm); -// connect(textForm); -// -// connect(m_elementAddForm, elementSelect, -// AddElement.NUMBER_ELEMENT, numberForm); -// connect(numberForm); -// -// connect(m_elementAddForm, elementSelect, -// AddElement.DATE_ELEMENT, dateForm); -// connect(dateForm); -// -// connect(m_elementAddForm, elementSelect, -// AddElement.TEXT_ASSET_ELEMENT, assetForm); -// connect(assetForm); -// -// connect(m_elementAddForm, elementSelect, -// AddElement.IMAGE_ELEMENT, imageForm); -// connect(imageForm); -// -// connect(m_elementAddForm, elementSelect, -// AddElement.FILE_ELEMENT, fileForm); -// connect(fileForm); -// -// connect(m_elementAddForm, elementSelect, -// AddElement.CONTENT_ITEM_ELEMENT, itemForm); -// connect(itemForm); - } - - // XXX A temporary, low-impact fix. - private class CancellableForm extends Form implements Cancellable { - - private final Submit m_cancel; - - CancellableForm(final String name, final Submit cancel) { - super(name); - - m_cancel = cancel; - } - - public final boolean isCancelled(final PageState state) { - return m_cancel.isSelected(state); - } - - } - - private class SummarySection extends Section { - - SummarySection(final ActionLink editLink, - final ActionLink deleteLink) { - setHeading(new Label(gz("cms.ui.type.details"))); - - final ActionGroup group = new ActionGroup(); - setBody(group); - - group.setSubject(new ContentTypePropertyList(m_type)); - - group.addAction(new TypeSecurityContainer(editLink)); - group.addAction(new TypeSecurityContainer(deleteLink)); - } - - } - - private class ElementSection extends Section { - - ElementSection() { - setHeading(new Label(gz("cms.ui.type.elements"))); - - final ActionGroup group = new ActionGroup(); - setBody(group); - -// group.setSubject(m_elements); -// group.addAction(m_elementAddForm); - } - - @Override - public final boolean isVisible(final PageState state) { -// return m_model.isSelected(state) && isDynamicType(state) -// && !ContentSection.getConfig().getHideUDCTUI(); - return false; - } - - } - - private class TemplateSection extends Section { - - TemplateSection(final ActionLink templateAddLink) { - setHeading(new Label(gz("cms.ui.type.templates"))); - - final ActionGroup group = new ActionGroup(); - setBody(group); - -// ToDo group.setSubject(m_templates); - group.addAction(new TypeSecurityContainer(templateAddLink)); - } - - @Override - public final boolean isVisible(final PageState state) { - return m_model.isSelected(state) && !isDynamicType(state); - } - - } - - private class PermissionsSection extends Section { - - public PermissionsSection() { - setHeading(new Label(gz("cms.ui.type.permissions"))); - - final ActionGroup group = new ActionGroup(); - setBody(group); - - group.setSubject(m_permissions); - //group.addAction(new TypeSecurityContainer(permissionsAddLink)); - } - - @Override - public final boolean isVisible(final PageState state) { - return m_model.isSelected(state) && !isDynamicType(state); - } - - } - -// private class RelationAttributeSection extends Section { -// -// RelationAttributeSection() { -// setHeading(new Label(gz("cms.ui.type.attributes"))); -// -// setBody(new RelationAttributeList(m_type)); -// } -// -// @Override -// public final boolean isVisible(final PageState state) { -//// ISt es möglich, den folgenden Code nur einmal zu haben?? Kann man auf die isVisible von RelationAttributeList -// // zurückgreifen?? -// boolean retVal = false; -// ContentType ct = (ContentType) m_type.getContentType(state); -// ContentItem ci = null; -// -// try { -// Class clazz = Class.forName(ct. -// getClassName()).asSubclass(ContentItem.class); -// ci = clazz.newInstance(); -// if (ci instanceof RelationAttributeInterface) { -// RelationAttributeInterface rai -// = (RelationAttributeInterface) ci; -// retVal = rai.hasRelationAttributes(); -// } -// ci.delete(); -// } catch (Exception ex) { -// //retVal = false; -// } -// -// return retVal; -// } -// } - @Override - public final void register(final Page page) { - super.register(page); - - page.addActionListener(new ActionListener() { - - @Override - public final void actionPerformed(final ActionEvent event) { - final PageState state = event.getPageState(); - - if (state.isVisibleOnPage(ContentTypeItemPane.this) - && m_model.isSelected(state) - && !userCanEdit(state)) { -// m_templates.getRemoveColumn().setVisible(state, false); -// m_templates.getDefaultColumn().setVisible(state, false); -// m_elements.getTable().getColumn(3).setVisible(state, false); - } - } - - }); - } - - /** - * Unregister a content type from a content section. - */ - private void removeType(final PageState state) { - final ContentSection section = CMS.getContext().getContentSection(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeManager typeManager = cdiUtil.findBean( - ContentTypeManager.class); - final ContentSectionManager sectionManager = cdiUtil.findBean( - ContentSectionManager.class); - - final ContentType type = m_type.getContentType(state); - final Class typeClass; - try { - typeClass = (Class) Class.forName( - type.getContentItemClass()); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - sectionManager.removeContentTypeFromSection(typeClass, section); - } - - /** - * Determine if the current user has access to edit the content type - */ - protected static boolean userCanEdit(final PageState state) { - final PermissionChecker permissionChecker = CdiUtil.createCdiUtil() - .findBean(PermissionChecker.class); - final ContentSection section = CMS.getContext().getContentSection(); - - return permissionChecker.isPermitted( - AdminPrivileges.ADMINISTER_CONTENT_TYPES, section); - } - - /** - * utility method get the DataObject from the DataBase, returns true if it - * is a modifiable type, false otherwise. - * - * Because we don't have modifiable types aka User Definied Content Types in - * CCM NG yet, this method returns always false for now. - */ - protected final boolean isDynamicType(final PageState state) { - return false; - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeListModelBuilder.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeListModelBuilder.java deleted file mode 100755 index f28975a32..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeListModelBuilder.java +++ /dev/null @@ -1,90 +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.type; - -import com.arsdigita.bebop.List; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.list.ListModel; -import com.arsdigita.bebop.list.ListModelBuilder; -import com.arsdigita.cms.CMS; - -import org.librecms.contentsection.ContentSection; - -import com.arsdigita.util.LockableImpl; - -import org.libreccm.cdi.utils.CdiUtil; - -import java.util.NoSuchElementException; - -/** - * Builds a dynamic list of content types for a content section. - */ -class ContentTypeListModelBuilder - extends LockableImpl - implements ListModelBuilder { - - /** - * - * @param list - * @param state - * - * @return - */ - @Override - public ListModel makeModel(final List list, final PageState state) { - return new Model(); - } - - /** - * - */ - private class Model implements ListModel { - - private final java.util.List types; - private int index = -1; - - Model() { - final ContentSection section = CMS.getContext().getContentSection(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeAdminPaneController controller = cdiUtil.findBean( - ContentTypeAdminPaneController.class); - - types = controller.getTypeList(section); - } - - @Override - public boolean next() throws NoSuchElementException { - index++; - return index < types.size(); - } - - @Override - public Object getElement() { - return types.get(index)[1]; - } - - @Override - public String getKey() { - return types.get(index)[0]; - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypePropertyList.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypePropertyList.java deleted file mode 100755 index 2dafd940e..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypePropertyList.java +++ /dev/null @@ -1,141 +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.type; - -import com.arsdigita.bebop.PageState; -import com.arsdigita.cms.CMS; - -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentType; - -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.kernel.KernelConfig; -import com.arsdigita.toolbox.ui.Property; -import com.arsdigita.toolbox.ui.PropertyList; - -import org.libreccm.cdi.utils.CdiUtil; - -import java.util.Locale; - -import org.librecms.CmsConstants; -import org.librecms.contenttypes.ContentTypeInfo; -import org.librecms.contenttypes.ContentTypesManager; - -import java.util.List; -import java.util.Optional; -import java.util.ResourceBundle; - -/** - * This component displays basic attributes of a content type including: - * - * label, description, default lifecycle definition, default workflow template - * - * @author Michael Pih - * @author Justin Ross - * @author Jens Pelzetter - */ -class ContentTypePropertyList extends PropertyList { - - private final ContentTypeRequestLocal m_type; - - public ContentTypePropertyList(final ContentTypeRequestLocal type) { - m_type = type; - } - - @Override - protected final List properties(final PageState state) { - final List props = super.properties(state); - final ContentType type = m_type.getContentType(state); - final ContentSection section = CMS.getContext().getContentSection(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypesManager typesManager = cdiUtil - .findBean(ContentTypesManager.class); - final ContentTypeInfo typeInfo = typesManager.getContentTypeInfo(type); - - final KernelConfig kernelConfig = KernelConfig.getConfig(); - final Locale defaultLocale = kernelConfig.getDefaultLocale(); - - final ResourceBundle labelBundle = ResourceBundle - .getBundle(typeInfo.getLabelBundle()); - final ResourceBundle descBundle = ResourceBundle - .getBundle(typeInfo.getDescriptionBundle()); - - props.add(new Property(gz("cms.ui.name"), - labelBundle.getString(typeInfo.getLabelKey()))); - props.add(new Property(gz("cms.ui.description"), - descBundle - .getString(typeInfo.getDescriptionKey()))); -// props.add(new Property(gz("cms.ui.type.parent"), -// type.getParent().orElse(null))); - props.add(new Property(gz("cms.ui.type.lifecycle"), - getLifecycle(section, type))); - props.add(new Property(gz("cms.ui.type.workflow"), - getWorkflow(section, type))); - - return props; - } - - private String getLifecycle(final ContentSection section, - final ContentType type) { - final KernelConfig kernelConfig = KernelConfig.getConfig(); - final Locale defaultLocale = kernelConfig.getDefaultLocale(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeAdminPaneController controller = cdiUtil - .findBean(ContentTypeAdminPaneController.class); - - final Optional label = controller - .getLifecycleDefinitionLabel(type, defaultLocale); - - if (label.isPresent()) { - return label.get(); - } else { - return lz("cms.ui.type.lifecycle.none"); - } - } - - private String getWorkflow(final ContentSection section, - final ContentType type) { - final KernelConfig kernelConfig = KernelConfig.getConfig(); - final Locale defaultLocale = kernelConfig.getDefaultLocale(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeAdminPaneController controller = cdiUtil - .findBean(ContentTypeAdminPaneController.class); - - final Optional name = controller - .getWorkflowTemplateName(type, defaultLocale); - - if (name.isPresent()) { - return name.get(); - } else { - return lz("cms.ui.type.workflow.none"); - } - } - - private static GlobalizedMessage gz(final String key) { - return new GlobalizedMessage(key, CmsConstants.CMS_BUNDLE); - } - - private static String lz(final String key) { - return (String) gz(key).localize(); - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeRequestLocal.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeRequestLocal.java deleted file mode 100755 index d2125e9d2..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeRequestLocal.java +++ /dev/null @@ -1,34 +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.type; - -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.RequestLocal; - -import org.librecms.contentsection.ContentType; - -public abstract class ContentTypeRequestLocal extends RequestLocal { - - @Override - protected abstract Object initialValue(final PageState state); - - public final ContentType getContentType(final PageState state) { - return (ContentType) get(state); - } -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/EditType.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/EditType.java deleted file mode 100755 index 2acd84c19..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/EditType.java +++ /dev/null @@ -1,386 +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.type; - -import com.arsdigita.bebop.ColumnPanel; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.SingleSelectionModel; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.event.FormInitListener; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.event.PrintListener; -import com.arsdigita.bebop.form.Hidden; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.bebop.form.SingleSelect; -import com.arsdigita.bebop.form.Submit; -import com.arsdigita.bebop.parameters.LongParameter; -import com.arsdigita.bebop.parameters.NotNullValidationListener; -import com.arsdigita.cms.CMS; - -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentType; -import org.librecms.lifecycle.LifecycleDefinition; - -import com.arsdigita.cms.ui.CMSForm; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.kernel.KernelConfig; -import com.arsdigita.util.UncheckedWrapperException; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.workflow.Workflow; -import org.libreccm.workflow.WorkflowRepository; -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentTypeManager; -import org.librecms.contentsection.ContentTypeRepository; -import org.librecms.lifecycle.LifecycleDefinitionRepository; - -import java.util.List; -import java.util.Locale; -import java.util.Optional; -import java.util.TooManyListenersException; - -/** - * This class contains a form component to edit a content type - * - * @author Jack Chung (flattop@arsdigita.com) - * @author Michael Pih (pihman@arsdigita.com) - * @author Jens Pelzetter - */ -public class EditType extends CMSForm - implements FormInitListener, FormProcessListener { - - private static final Logger LOGGER = LogManager.getLogger(EditType.class); - - private final SingleSelectionModel selectedTypeModel; - - // Form widgets - private final Hidden idField; -// private TextField m_label; -// private TextArea m_description; - private final SingleSelect lifecycleSelect; - private final SingleSelect workflowSelect; - private final Submit submitButton; - private final Submit cancelButton; - - /** - * @param selectedTypeModel The content type selection model. This tells the - * form which content type is selected. - */ - public EditType(final SingleSelectionModel selectedTypeModel) { - super("EditContentType"); - - this.selectedTypeModel = selectedTypeModel; - - idField = new Hidden(new LongParameter("id")); - idField.addValidationListener(new NotNullValidationListener()); - super.add(idField); - -// add(new Label(new GlobalizedMessage("cms.ui.type.label", -// CmsConstants.CMS_BUNDLE))); -// m_label = new TextField(new StringParameter("label")); -// m_label.addValidationListener(new NotNullValidationListener()); -// m_label.setSize(40); -// m_label.setMaxLength(1000); -// add(m_label); -// -// add(new Label(new GlobalizedMessage("cms.ui.description", -// CmsConstants.CMS_BUNDLE))); -// m_description = new TextArea(new StringParameter("description")); -// m_description.addValidationListener( -// new StringLengthValidationListener(4000)); -// m_description.setCols(40); -// m_description.setRows(5); -// m_description.setWrap(TextArea.SOFT); -// add(m_description); - super.add(new Label(new GlobalizedMessage("cms.ui.type.lifecycle", - CmsConstants.CMS_BUNDLE))); - lifecycleSelect = new SingleSelect(new LongParameter("lifecycle")); - try { - lifecycleSelect.addPrintListener(new SelectLifecyclePrintListener()); - } catch (TooManyListenersException e) { - throw new UncheckedWrapperException("TooManyListeners: " + e - .getMessage(), e); - } - super.add(lifecycleSelect); - - super.add(new Label(new GlobalizedMessage("cms.ui.type.workflow", - CmsConstants.CMS_BUNDLE))); - workflowSelect = new SingleSelect(new LongParameter("workflow")); - try { - workflowSelect.addPrintListener(new SelectWorkflowPrintListener()); - } catch (TooManyListenersException ex) { - throw new UncheckedWrapperException("TooManyListeners: " + ex - .getMessage(), ex); - } - super.add(workflowSelect); - - final SimpleContainer buttonContainer = new SimpleContainer(); - submitButton = new Submit(new GlobalizedMessage("cms.ui.save", - CmsConstants.CMS_BUNDLE)); - buttonContainer.add(submitButton); - cancelButton = new Submit(new GlobalizedMessage("cms.ui.cancel", - CmsConstants.CMS_BUNDLE)); - buttonContainer.add(cancelButton); - super.add(buttonContainer, ColumnPanel.FULL_WIDTH | ColumnPanel.CENTER); - - super.addInitListener(this); - super.addSubmissionListener(new TypeSecurityListener()); - super.addProcessListener(this); - } - - /** - * Returns true if the "cancel" button was submitted. - * - * @param state The page state - * - * @return True if the form was cancelled, false otherwise - */ - @Override - public boolean isCancelled(final PageState state) { - return cancelButton.isSelected(state); - } - - /** - * Returns the "cancel" button on the form - * - * @return the cancel button on the form - */ - public Submit getCancelButton() { - return cancelButton; - } - - /** - * Populates the form with the content type properties. - * - * @param event - */ - @Override - public void init(final FormSectionEvent event) { - - final FormData data = event.getFormData(); - final PageState state = event.getPageState(); - -// final ContentSection section = CMS.getContext().getContentSection(); -// -// final KernelConfig kernelConfig = KernelConfig.getConfig(); - final ContentType type = getContentType(state); - final long typeId = type.getObjectId(); -// final String label = type.getLabel().getValue(kernelConfig -// .getDefaultLocale()); -// final String description = type.getDescription().getValue(kernelConfig -// .getDefaultLocale()); - - data.put(idField.getName(), typeId); -// data.put(m_label.getName(), label); -// data.put(m_description.getName(), description); - - final LifecycleDefinition cycle = type.getDefaultLifecycle(); - if (cycle != null) { - data.put(lifecycleSelect.getName(), cycle.getDefinitionId()); - } - - final Workflow template = type.getDefaultWorkflow(); - if (template != null) { - data.put(workflowSelect.getName(), template.getWorkflowId()); - } - } - - /** - * Fetches the currently selected content type from the single selection - * model. - */ - private ContentType getContentType(final PageState state) { - - final String key = selectedTypeModel.getSelectedKey(state); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeRepository typeRepo = cdiUtil.findBean( - ContentTypeRepository.class); - - final Optional result; - try { - result = typeRepo.findByIdAndFetchAttributes(Long.parseLong(key), - "defaultLifecycle", - "defaultWorkflow"); - } catch (NumberFormatException ex) { - throw new UncheckedWrapperException(String.format( - "The provided key \"%s\" is not a long.", key), - ex); - } - - if (result.isPresent()) { - return result.get(); - } else { - throw new UncheckedWrapperException(String.format( - "ContentType with ID %s not found.", key)); - } - } - - /** - * Edits the content type. - * - * @param event - * - * @throws FormProcessException - */ - @Override - public void process(final FormSectionEvent event) throws - FormProcessException { - final FormData data = event.getFormData(); - - // Get the current content section. - final ContentSection section = CMS.getContext().getContentSection(); - - // Read form variables. - final Long key = (Long) data.get(idField.getName()); -// final String label = (String) data.get(m_label.getName()); -// final String description = (String) data.get(m_description.getName()); - final Long lifecycleId = (Long) data.get(lifecycleSelect.getName()); - final Long workflowId = (Long) data.get(workflowSelect.getName()); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeRepository typeRepo = cdiUtil.findBean( - ContentTypeRepository.class); - final LifecycleDefinitionRepository lifecycleDefRepo = cdiUtil.findBean( - LifecycleDefinitionRepository.class); - final WorkflowRepository workflowRepo = cdiUtil - .findBean(WorkflowRepository.class); - final ContentTypeManager typeManager = cdiUtil.findBean( - ContentTypeManager.class); - - final Optional type = typeRepo.findById(key); - if (!type.isPresent()) { - LOGGER.error("Can't find ContentType with key {}", key); - throw new FormProcessException(new GlobalizedMessage( - "cms.ui.type.content_editing_failed", - CmsConstants.CMS_BUNDLE, - new Object[]{key})); - } - -// final KernelConfig kernelConfig = KernelConfig.getConfig(); -// type.get().getLabel().putValue(kernelConfig.getDefaultLocale(), label); -// type.get().getDescription().putValue(kernelConfig.getDefaultLocale(), -// description); - typeRepo.save(type.get()); - - // Handle default lifecycle and workflow. - final LifecycleDefinition defaultLifecycle; - if (lifecycleId == 0) { - defaultLifecycle = null; - } else { - defaultLifecycle = lifecycleDefRepo.findById(lifecycleId).get(); - } - final Workflow defaultWorkflow; - if (workflowId == 0) { - defaultWorkflow = null; - } else { - defaultWorkflow = workflowRepo.findById(workflowId).get(); - } - - typeManager.setDefaultLifecycle(type.get(), defaultLifecycle); - typeManager.setDefaultWorkflow(type.get(), defaultWorkflow); - - } - - /** - * Print listener to generate the select widget for the list of lifecyle - * definitions. - */ - private class SelectLifecyclePrintListener implements PrintListener { - - @Override - public void prepare(final PrintEvent event) { - - final SingleSelect lifecycleSelect = (SingleSelect) event - .getTarget(); - lifecycleSelect.clearOptions(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeAdminPaneController controller = cdiUtil - .findBean(ContentTypeAdminPaneController.class); - - // Get the current content section - ContentSection section = CMS.getContext().getContentSection(); - - lifecycleSelect.addOption(new Option( - "0", - new Label(new GlobalizedMessage("cms.ui.type.lifecycle.select", - CmsConstants.CMS_BUNDLE)))); - - final List cycles = controller - .getLifecycleDefinitions(section); - final Locale defaultLocale = KernelConfig.getConfig() - .getDefaultLocale(); - cycles.forEach(cycle -> { - lifecycleSelect.addOption( - new Option(Long.toString(cycle.getDefinitionId()), - new Text(cycle.getLabel().getValue(defaultLocale)))); - }); - } - - } - - /** - * Print listener to generate the select widget for the list of workflow - * templates. - */ - private class SelectWorkflowPrintListener implements PrintListener { - - @Override - public void prepare(final PrintEvent event) { - - final SingleSelect workflowSelect = (SingleSelect) event.getTarget(); - workflowSelect.clearOptions(); - - // Get the current content section - ContentSection section = CMS.getContext().getContentSection(); - - workflowSelect.addOption(new Option( - "0", - new Label(new GlobalizedMessage("cms.ui.type.workflow.select", - CmsConstants.CMS_BUNDLE)))); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeAdminPaneController controller = cdiUtil - .findBean(ContentTypeAdminPaneController.class); - - final List templates = controller - .getWorkflowTemplates(section); - final Locale defaultLocale = KernelConfig.getConfig() - .getDefaultLocale(); - templates.forEach(template -> { - workflowSelect.addOption( - new Option( - Long.toString(template.getWorkflowId()), - new Text(template.getName().getValue(defaultLocale)))); - }); - - } - - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/SelectType.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/SelectType.java deleted file mode 100755 index ae35157d9..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/SelectType.java +++ /dev/null @@ -1,211 +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.type; - -import com.arsdigita.bebop.ColumnPanel; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.SimpleContainer; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.FormSubmissionListener; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.event.PrintListener; -import com.arsdigita.bebop.form.CheckboxGroup; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.bebop.form.Submit; -import com.arsdigita.cms.CMS; - -import org.librecms.contentsection.ContentSection; - -import com.arsdigita.cms.ui.CMSForm; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.ui.admin.GlobalizationUtil; -import com.arsdigita.util.UncheckedWrapperException; - -import org.libreccm.cdi.utils.CdiUtil; -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentSectionManager; -import org.librecms.contentsection.ContentTypeManager; -import org.librecms.contenttypes.ContentTypeInfo; -import org.librecms.contenttypes.ContentTypesManager; - -import java.util.List; -import java.util.TooManyListenersException; -import java.util.stream.Collectors; - -/** - * This class contains a form component to that allows adding already-existing - * content type to a content section. - * - * @author Jack Chung - * @author Michael Pih - * @author Jens Pelzetter - */ -public class SelectType extends CMSForm implements PrintListener, - FormSubmissionListener, - FormProcessListener { - - private final static String TYPES = "types"; - private CheckboxGroup m_typesCheckbox; - private Submit m_submit; - private Submit m_cancel; - - public SelectType() { - super("ContentTypeSelect"); - - m_typesCheckbox = new CheckboxGroup(TYPES); - try { - m_typesCheckbox.addPrintListener(this); - } catch (TooManyListenersException e) { - throw new UncheckedWrapperException("TooManyListeners: " + e - .getMessage()); - } - - add(new Label(new GlobalizedMessage("cms.ui.type.available_types", - CmsConstants.CMS_BUNDLE))); - add(m_typesCheckbox); - - SimpleContainer s = new SimpleContainer(); - m_submit = new Submit("submit"); - m_submit.setButtonLabel("Add Selected Content Types"); - s.add(m_submit); - m_cancel = new Submit("cancel"); - m_cancel.setButtonLabel("Cancel"); - s.add(m_cancel); - add(s, ColumnPanel.FULL_WIDTH | ColumnPanel.CENTER); - - addProcessListener(this); - addSubmissionListener(new TypeSecurityListener()); - addSubmissionListener(this); - } - - /** - * Generate a checkbox list of all content type not associated with the - * current content section - * @param event - */ - @Override - public void prepare(final PrintEvent event) { - - final CheckboxGroup target = (CheckboxGroup) event.getTarget(); - - // Get the current content section - final ContentSection section = CMS.getContext().getContentSection(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ContentTypeAdminPaneController controller = cdiUtil - .findBean(ContentTypeAdminPaneController.class); - final ContentTypesManager typesManager = cdiUtil.findBean( - ContentTypesManager.class); - - final List availableTypes = typesManager - .getAvailableContentTypes(); - final List assignedTypes = controller - .getContentItemClassesList(section); -// = section.getContentTypes() -// .stream() -// .map(contentType -> contentType.getContentItemClass()) -// .collect(Collectors.toList()); - - final List notAssignedTypes = availableTypes.stream() - .filter(type -> !assignedTypes.contains(type.getContentItemClass() - .getName())) - .collect(Collectors.toList()); - - for (final ContentTypeInfo typeInfo : notAssignedTypes) { - addOption(target, typeInfo); - } - } - - private void addOption(final CheckboxGroup target, - final ContentTypeInfo typeInfo) { - final Label label = new Label(new GlobalizedMessage(typeInfo - .getLabelKey(), typeInfo.getLabelBundle())); - target.addOption(new Option(typeInfo.getContentItemClass().getName(), - label)); - } - - /** - * Form submission listener. If the cancel button was pressed, do not - * process the form. - * - * @param event The submit event - * - * @throws com.arsdigita.bebop.FormProcessException - */ - @Override - public void submitted(final FormSectionEvent event) throws - FormProcessException { - PageState state = event.getPageState(); - if (isCancelled(state)) { - throw new FormProcessException(GlobalizationUtil.globalize( - "cms.ui.cancelled")); - } - } - - /** - * Returns true if this form was cancelled. - * - * @return true if the form was cancelled, false otherwise - */ - @Override - public boolean isCancelled(final PageState state) { - return m_cancel.isSelected(state); - } - - /** - * Processes form listener which updates a life cycle - * - * @param event - * - * @throws com.arsdigita.bebop.FormProcessException - */ - @Override - public void process(final FormSectionEvent event) - throws FormProcessException { - - final ContentSection section = CMS.getContext().getContentSection(); - - final FormData data = event.getFormData(); - final String[] types = (String[]) data.get(TYPES); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); -// final ContentTypeManager typeManager = cdiUtil.findBean( -// ContentTypeManager.class); -// final ContentSectionManager sectionManager = cdiUtil.findBean( -// ContentSectionManager.class); - final ContentTypeAdminPaneController controller = cdiUtil - .findBean(ContentTypeAdminPaneController.class); - - if (types != null) { - for (String type : types) { -// sectionManager.addContentTypeToSection( -// typeManager.classNameToClass(type), -// section, -// section.getLifecycleDefinitions().get(0), -// section.getWorkflowTemplates().get(0)); - controller.addContentTypeToContentSection(type, section); - } - } - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java deleted file mode 100644 index 2fd5ddce4..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java +++ /dev/null @@ -1,262 +0,0 @@ -package com.arsdigita.cms.ui.type; - -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -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.table.RowData; -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.CMS; - -import org.librecms.contentsection.ContentType; - -import com.arsdigita.cms.ui.ContentSectionRequestLocal; -import com.arsdigita.globalization.GlobalizedMessage; - -import org.libreccm.security.Role; - -import com.arsdigita.util.LockableImpl; - -import java.util.List; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.security.PermissionChecker; -import org.libreccm.security.RoleRepository; -import org.librecms.CmsConstants; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.privileges.AdminPrivileges; - -import java.util.Iterator; - -/** - * - * ToDo, maybe not needed anymore... - * - * @author Jens Pelzetter - */ -public class TypePermissionsTable extends Table implements TableActionListener { - - private final String TABLE_COL_ROLE = "table_col_role"; - private final String TABLE_COL_CAN_USE = "table_col_can_use"; - private final String TABLE_COL_ACTION = "table_col_action"; - private final ContentTypeRequestLocal type; - - public TypePermissionsTable(final ContentSectionRequestLocal section, - final ContentTypeRequestLocal type) { - super(); - - this.type = type; - - setEmptyView(new Label(new GlobalizedMessage( - "cms.ui.type.permissions.none", - CmsConstants.CMS_BUNDLE))); - - TableColumnModel columnModel = getColumnModel(); - - columnModel.add(new TableColumn( - 0, - new GlobalizedMessage("cms.ui.type.permissions.role", - CmsConstants.CMS_BUNDLE).localize(), - TABLE_COL_ROLE)); - - columnModel.add(new TableColumn( - 1, - new GlobalizedMessage("cms.ui.type.permissions_can_use", - CmsConstants.CMS_BUNDLE).localize(), - TABLE_COL_CAN_USE)); - - columnModel.add(new TableColumn( - 2, - new GlobalizedMessage("cms.ui.type.permission.action", - CmsConstants.CMS_BUNDLE).localize(), - TABLE_COL_ACTION)); - - setModelBuilder(new TypePermissionsTableModelBuilder()); - - columnModel.get(0).setCellRenderer(new RoleCellRenderer()); - columnModel.get(1).setCellRenderer(new CanUseCellRenderer()); - columnModel.get(2).setCellRenderer(new ActionCellRenderer()); - - addTableActionListener(this); - } - - @Override - public void cellSelected(final TableActionEvent event) { - final PageState state = event.getPageState(); - - final TableColumn column = getColumnModel().get(event.getColumn()); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final RoleRepository roleRepo = cdiUtil.findBean(RoleRepository.class); - final TypePermissionsTableController controller = cdiUtil.findBean( - TypePermissionsTableController.class); - - if (TABLE_COL_ACTION.equals(column.getHeaderKey().toString())) { - final Role role = roleRepo.findById(Long.parseLong( - event.getRowKey().toString())).get(); - ContentType contentType = getType().getContentType(state); - - controller.toggleTypeUsePermission(contentType, role); - } - } - - @Override - public void headSelected(final TableActionEvent event) { - //Nothing to do - } - - private class TypePermissionsTableModelBuilder - extends LockableImpl - implements TableModelBuilder { - - public TypePermissionsTableModelBuilder() { - } - - @Override - public TableModel makeModel(final Table table, final PageState state) { - table.getRowSelectionModel().clearSelection(state); - return new TypePermissionsTableModel(table, state); - } - - } - - private class TypePermissionsTableModel implements TableModel { - - private final Iterator> iterator; - private RowData currentRow; - - public TypePermissionsTableModel(final Table table, - final PageState state) { - final ContentType contentType = ((TypePermissionsTable) table) - .getType() - .getContentType(state); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final TypePermissionsTableController controller = cdiUtil.findBean( - TypePermissionsTableController.class); - final ContentSection section = CMS.getContext().getContentSection(); - final List> rows = controller.retrieveTypePermissions( - contentType, section); - iterator = rows.iterator(); - } - - @Override - public int getColumnCount() { - return 3; - } - - @Override - public boolean nextRow() { - if (iterator.hasNext()) { - currentRow = iterator.next(); - return true; - } else { - return false; - } - } - - @Override - public Object getElementAt(final int columnIndex) { - switch (columnIndex) { - case 0: - return currentRow.getColData(0); - case 1: - return currentRow.getColData(1); - case 2: - if ("cms.ui.type.permissions.can_use.yes".equals(currentRow - .getColData(1))) { - return "cms.ui.type.permissions.actions.revoke"; - } else { - return "cms.ui.type.permissions.can_use.grant"; - } - default: - throw new IllegalArgumentException("Invalid column index."); - } - } - - @Override - public Object getKeyAt(final int columnIndex) { - return currentRow.getRowKey(); - } - - } - - private class RoleCellRenderer - extends LockableImpl - implements TableCellRenderer { - - @Override - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { - return new Text(value.toString()); - } - - } - - private class CanUseCellRenderer - extends LockableImpl - implements 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) { - return new Label(new GlobalizedMessage(value.toString(), - CmsConstants.CMS_BUNDLE)); - } - - } - - private class ActionCellRenderer - extends LockableImpl - implements TableCellRenderer { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - boolean isSelected, - final Object key, - final int row, - final int column) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final PermissionChecker permissionChecker = cdiUtil.findBean( - PermissionChecker.class); - - final ContentSection section = CMS.getContext().getContentSection(); - - if (permissionChecker.isPermitted( - AdminPrivileges.ADMINISTER_CONTENT_TYPES, section)) { - - return new ControlLink(new Label(new GlobalizedMessage( - (String) value), CmsConstants.CMS_BUNDLE)); - } else { - return new Text(""); - } - - } - - } - - private ContentTypeRequestLocal getType() { - return type; - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTableController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTableController.java deleted file mode 100644 index 9e9984aff..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTableController.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (C) 2016 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.type; - -import org.librecms.contentsection.privileges.TypePrivileges; - -import com.arsdigita.bebop.table.RowData; - -import org.libreccm.security.PermissionChecker; -import org.libreccm.security.PermissionManager; -import org.libreccm.security.Role; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.ContentSectionRepository; -import org.librecms.contentsection.ContentType; -import org.librecms.contentsection.ContentTypeRepository; - -import java.util.List; -import java.util.stream.Collectors; - -import javax.enterprise.context.RequestScoped; -import javax.inject.Inject; -import javax.transaction.Transactional; - -/** - * - * @author Jens Pelzetter - */ -@RequestScoped -public class TypePermissionsTableController { - - @Inject - private PermissionChecker permissionChecker; - - @Inject - private PermissionManager permissionManager; - - @Inject - private ContentSectionRepository sectionRepo; - - @Inject - private ContentTypeRepository typeRepo; - - @Transactional(Transactional.TxType.REQUIRED) - public List> retrieveTypePermissions( - final ContentType type, final ContentSection section) { - - //Ensure that we use a sane object for the type - return retrieveTypePermissions(type.getObjectId(), section); - } - - @Transactional(Transactional.TxType.REQUIRED) - public List> retrieveTypePermissions( - final long typeId, final ContentSection section) { - - final ContentType type = typeRepo.findById(typeId).get(); - final ContentSection contentSection = sectionRepo - .findById(section.getObjectId()) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No ContentSection with ID %d in the database. " - + "Where did that Id come from?", - section.getObjectId()))); - - final List roles = contentSection.getRoles(); - - return roles.stream() - .map(role -> retrievePermissionsForRole(type, role)) - .collect(Collectors.toList()); - } - - private RowData retrievePermissionsForRole(final ContentType type, - final Role role) { - final RowData rowData = new RowData<>(2); - rowData.setRowKey(role.getRoleId()); - rowData.setColData(0, role.getName()); - - if (permissionChecker.isPermitted(TypePrivileges.USE_TYPE, type)) { - rowData.setColData(1, "cms.ui.type.permissions.can_use.yes"); - } else { - rowData.setColData(1, "cms.ui.type.permissions.can_use.no"); - } - - return rowData; - } - - public void toggleTypeUsePermission(final ContentType type, - final Role role) { - if (permissionChecker.isPermitted(TypePrivileges.USE_TYPE, type, role)) { - permissionManager.revokePrivilege(TypePrivileges.USE_TYPE, - role, - type); - } else { - permissionManager.grantPrivilege(TypePrivileges.USE_TYPE, - role, - type); - } - } - -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityContainer.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityContainer.java deleted file mode 100755 index 5d5a8e64e..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityContainer.java +++ /dev/null @@ -1,55 +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.type; - -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.PageState; -import com.arsdigita.cms.CMS; - -import org.libreccm.security.Party; - -import com.arsdigita.toolbox.ui.SecurityContainer; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.security.PermissionChecker; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.privileges.AdminPrivileges; - -/** - * - * @author Justin Ross - * @author Jens Pelzetter - */ -public final class TypeSecurityContainer extends SecurityContainer { - - public TypeSecurityContainer(final Component component) { - super(component); - } - - @Override - protected final boolean canAccess(final Party party, - final PageState state) { - final PermissionChecker permissionChecker = CdiUtil.createCdiUtil().findBean(PermissionChecker.class); - - final ContentSection section = CMS.getContext().getContentSection(); - - return permissionChecker.isPermitted( - AdminPrivileges.ADMINISTER_CONTENT_TYPES, section); - } -} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityListener.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityListener.java deleted file mode 100755 index 7a163f192..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypeSecurityListener.java +++ /dev/null @@ -1,51 +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.type; - -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.FormSubmissionListener; -import com.arsdigita.cms.CMS; -import com.arsdigita.dispatcher.AccessDeniedException; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.security.PermissionChecker; -import org.librecms.contentsection.ContentSection; -import org.librecms.contentsection.privileges.AdminPrivileges; - -/** - * - * @author Justin Ross <jross@redhat.com> - * @autor Jens Pelzetter - */ -final class TypeSecurityListener implements FormSubmissionListener { - - - @Override - public final void submitted(final FormSectionEvent event) - throws FormProcessException { - - final ContentSection section = CMS.getContext().getContentSection(); - final PermissionChecker permissionChecker = CdiUtil.createCdiUtil().findBean(PermissionChecker.class); - if (!permissionChecker.isPermitted( - AdminPrivileges.ADMINISTER_CONTENT_TYPES, section)) { - throw new AccessDeniedException(); - } - } -}