diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java.off b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java.off index 57c4d3a67..80862a576 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java.off +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeAdminPane.java.off @@ -112,46 +112,47 @@ public final class ContentTypeAdminPane extends BaseAdminPane { */ @Override public void actionPerformed(final ActionEvent event) { - 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 +// 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()); +// } +// +// +// } } }); } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java.off b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java similarity index 54% rename from ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java.off rename to ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java index 42394c327..890b0f996 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java.off +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypeItemPane.java @@ -41,10 +41,17 @@ 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 java.util.logging.Level; import org.apache.log4j.Logger; +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; /** - * + * * @authro Jens Pelzetter * @author Justin Ross <jross@redhat.com> */ @@ -54,11 +61,10 @@ final class ContentTypeItemPane extends BaseItemPane { private final ACSObjectSelectionModel m_model; private final ContentTypeRequestLocal m_type; private final SimpleContainer m_detailPane; - private final TypeElements m_elements; - private final AddElement m_elementAddForm; - //ToDo private final SectionTemplatesListing m_templates; +// 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; -// private final RelationAttributeSection m_relationAttributes; ContentTypeItemPane(final ACSObjectSelectionModel model, final ContentTypeRequestLocal type, @@ -71,13 +77,11 @@ final class ContentTypeItemPane extends BaseItemPane { add(m_detailPane); setDefault(m_detailPane); - m_elements = new TypeElements(m_model); - m_elementAddForm = new AddElement(); - +// 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); @@ -91,31 +95,29 @@ final class ContentTypeItemPane extends BaseItemPane { // 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); - +// 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 RelationAttributeSection()); m_detailPane.add(new TypeSecurityContainer(new ElementSection())); m_detailPane.add(new TemplateSection(templateAddLink)); @@ -123,39 +125,38 @@ final class ContentTypeItemPane extends BaseItemPane { //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); +// 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. @@ -198,14 +199,15 @@ final class ContentTypeItemPane extends BaseItemPane { final ActionGroup group = new ActionGroup(); setBody(group); - group.setSubject(m_elements); - group.addAction(m_elementAddForm); +// 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 m_model.isSelected(state) && isDynamicType(state) +// && !ContentSection.getConfig().getHideUDCTUI(); + return false; } } @@ -217,7 +219,7 @@ final class ContentTypeItemPane extends BaseItemPane { final ActionGroup group = new ActionGroup(); setBody(group); - group.setSubject(m_templates); +// ToDo group.setSubject(m_templates); group.addAction(new TypeSecurityContainer(templateAddLink)); } @@ -245,55 +247,55 @@ final class ContentTypeItemPane extends BaseItemPane { } } - 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; - } - } - +// 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() { - public final void actionPerformed(final ActionEvent e) { - final PageState state = e.getPageState(); + @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); + && 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); } } }); @@ -301,46 +303,47 @@ final class ContentTypeItemPane extends BaseItemPane { /** * Unregister a content type from a content section. - * XXX domlay */ private void removeType(final PageState state) { final ContentSection section = CMS.getContext().getContentSection(); - section.removeContentType(m_type.getContentType(state)); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final ContentTypeManager typeManager = cdiUtil.findBean( + ContentTypeManager.class); + final ContentSectionManager sectionManager = cdiUtil.findBean( + ContentSectionManager.class); - section.save(); + 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 - * XXX domlay */ protected static boolean userCanEdit(final PageState state) { - SecurityManager sm = Utilities.getSecurityManager(state); - return sm.canAccess(state.getRequest(), - SecurityManager.CONTENT_TYPE_ADMIN); + 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 + * utility method get the DataObject from the DataBase, returns true if it * is a modifiable type, false otherwise. * - * XXX domlay + * 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) { - final ContentType type = m_type.getContentType(state); - - final String objectTypeString = - "com.arsdigita.persistence.DynamicObjectType"; - final DataCollection collection = SessionManager.getSession().retrieve( - objectTypeString); - collection.addEqualsFilter("dynamicType", type.getAssociatedObjectType()); - - final boolean b = collection.next(); - - collection.close(); - - return b; + return false; } } 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 new file mode 100755 index 000000000..fa02a1b54 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/ContentTypePropertyList.java @@ -0,0 +1,111 @@ +/* + * 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 org.librecms.lifecycle.LifecycleDefinition; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.kernel.KernelConfig; +import com.arsdigita.toolbox.ui.PropertyList; +import java.util.Locale; +import org.libreccm.workflow.WorkflowTemplate; +import org.librecms.CmsConstants; + +/** + * This component displays basic attributes of a content type + * including: + * + * label, description, default lifecycle definition, default workflow + * template + * + * @author Jens Pelzetter + * @author Michael Pih + * @author Justin Ross + */ +class ContentTypePropertyList extends PropertyList { + + private final ContentTypeRequestLocal m_type; + + public ContentTypePropertyList(final ContentTypeRequestLocal type) { + m_type = type; + } + + @Override + protected final java.util.List properties(final PageState state) { + final java.util.List props = super.properties(state); + final ContentType type = m_type.getContentType(state); + final ContentSection section = + CMS.getContext().getContentSection(); + + final KernelConfig kernelConfig = KernelConfig.getConfig(); + final Locale defaultLocale = kernelConfig.getDefaultLocale(); + + props.add(new Property(gz("cms.ui.name"), + type.getLabel().getValue(defaultLocale))); + props.add(new Property(gz("cms.ui.description"), + type.getDescription().getValue(defaultLocale))); +// 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 LifecycleDefinition cycle = type.getDefaultLifecycle(); + + if (cycle == null) { + return lz("cms.ui.type.lifecycle.none"); + } else { + return cycle.getLabel().getValue(defaultLocale); + } + } + + private String getWorkflow(final ContentSection section, + final ContentType type) { + final KernelConfig kernelConfig = KernelConfig.getConfig(); + final Locale defaultLocale = kernelConfig.getDefaultLocale(); + + final WorkflowTemplate template = type.getDefaultWorkflow(); + + if (template == null) { + return lz("cms.ui.type.workflow.none"); + } else { + return template.getName().getValue(defaultLocale); + } + } + + 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/TypePermissionsTable.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java new file mode 100644 index 000000000..24d726a2f --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java @@ -0,0 +1,288 @@ +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.event.TableActionEvent; +import com.arsdigita.bebop.event.TableActionListener; +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.dispatcher.Utilities; +import com.arsdigita.cms.ui.ContentSectionRequestLocal; +import com.arsdigita.globalization.GlobalizedMessage; +import com.arsdigita.ui.admin.GlobalizationUtil; +import org.libreccm.security.Party; +import org.libreccm.security.Role; +import com.arsdigita.util.LockableImpl; +import java.awt.image.Kernel; +import java.util.List; +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.security.Permission; +import org.libreccm.security.RoleRepository; +import org.librecms.CmsConstants; +import sun.security.util.SecurityConstants; + +/** + * + * 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) { + PageState state = event.getPageState(); + + final TableColumn column = getColumnModel().get(event.getColumn()); + + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final RoleRepository roleRepo = cdiUtil.findBean(RoleRepository.class); + + if (TABLE_COL_ACTION.equals(column.getHeaderKey().toString())) { + final Role role = roleRepo.findById(Long.parseLong( + event.getRowKey().toString())); + ContentType contentType = getType().getContentType(state); +// ToDo +// ObjectPermissionCollection permissions +// = PermissionService. +// getDirectGrantedPermissions(contentType.getOID()); +// +// if ((permissions.size() == 0)) { +// role.grantPermission(contentType, +// PrivilegeDescriptor.get( +// com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); +// } else if (!role.checkPermission(contentType, PrivilegeDescriptor. +// get(com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { +// role.grantPermission(contentType, +// PrivilegeDescriptor.get( +// com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); +// } else { +// role.revokePermission(contentType, +// PrivilegeDescriptor.get( +// com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); +// } + } + } + + @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 Table table; + private List roles; + private ContentType contentType; + private List permissions; + + public TypePermissionsTableModel(final Table table, + final PageState state) { + this.table = table; + contentType + = ((TypePermissionsTable) table).getType().getContentType( + state); + + roles = CMS.getContext().getContentSection().getRoles(); + +// permissions +// = PermissionService. +// getDirectGrantedPermissions(contentType.getOID()); + } + + @Override + public int getColumnCount() { + if (roles == null) { + return 0; + } else { + return (int) roles.size(); + } + } + + @Override + public boolean nextRow() { + return false; +// if (roles == null) { +// return false; +// } else { +// return roles.next(); +// } + } + + @Override + public Object getElementAt(int columnIndex) { +// switch (columnIndex) { +// case 0: +// return roles.getRole().getName(); +// case 1: +// if (permissions.isEmpty()) { +// return "cms.ui.type.permissions.can_use.yes"; +// } else { +// if (roles.getRole().checkPermission(contentType, +// PrivilegeDescriptor. +// get( +// com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { +// return "cms.ui.type.permissions.can_use.yes"; +// } else { +// return "cms.ui.type.permissions.can_use.no"; +// } +// } +// case 2: +// if (permissions.size() == 0) { +// return "cms.ui.type.permissions.actions.restrict_to_this_role"; +// } else { +// if (roles.getRole().checkPermission(contentType, +// PrivilegeDescriptor. +// get( +// com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { +// return "cms.ui.type.permissions.actions.revoke"; +// } else { +// return "cms.ui.type.permissions.can_use.grant"; +// } +// } +// default: +// return null; +// } + return null; + } + + @Override + public Object getKeyAt(int columnIndex) { +// return roles.getRole().getID(); + return null; + } + } + + 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 Label(value.toString()); + } + } + + private class CanUseCellRenderer + extends LockableImpl + implements TableCellRenderer { + + @Override + public Component getComponent(Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int column) { + return new Label(GlobalizationUtil.globalize(value.toString())); + } + } + + private class ActionCellRenderer + extends LockableImpl + implements TableCellRenderer { + + public Component getComponent(Table table, + PageState state, + Object value, + boolean isSelected, + Object key, + int row, + int column) { +// com.arsdigita.cms.SecurityManager securityManager = Utilities. +// getSecurityManager(state); +// Party party = Kernel.getContext().getParty(); +// if (party == null) { +// party = Kernel.getPublicUser(); +// } +// if (securityManager.canAccess(party, +// SecurityConstants.CONTENT_TYPE_ADMIN)) { +// ControlLink link = new ControlLink((String) GlobalizationUtil. +// globalize( +// value.toString()).localize()); +// +// return link; +// } else { + return new Label(value.toString()); +// } + + } + } + + private ContentTypeRequestLocal getType() { + return type; + } +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java.off b/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java.off deleted file mode 100644 index 49c607734..000000000 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/type/TypePermissionsTable.java.off +++ /dev/null @@ -1,270 +0,0 @@ -package com.arsdigita.cms.ui.type; - -import com.arsdigita.bebop.Column; -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.event.TableActionEvent; -import com.arsdigita.bebop.event.TableActionListener; -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 com.arsdigita.cms.ContentType; -import com.arsdigita.cms.dispatcher.Utilities; -import com.arsdigita.cms.ui.ContentSectionRequestLocal; -import com.arsdigita.cms.util.GlobalizationUtil; -import com.arsdigita.cms.util.SecurityConstants; -import com.arsdigita.kernel.Kernel; -import com.arsdigita.kernel.Party; -import com.arsdigita.kernel.Role; -import com.arsdigita.kernel.RoleCollection; -import com.arsdigita.kernel.permissions.ObjectPermissionCollection; -import com.arsdigita.kernel.permissions.PermissionDescriptor; -import com.arsdigita.kernel.permissions.PermissionService; -import com.arsdigita.kernel.permissions.PrivilegeDescriptor; -import com.arsdigita.util.LockableImpl; -import java.math.BigDecimal; -import java.math.BigInteger; - -/** - * - * @author Jens Pelzetter - * @version $Id$ - */ -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(GlobalizationUtil.globalize( - "cms.ui.type.permissions.none"))); - - TableColumnModel columnModel = getColumnModel(); - - columnModel.add(new TableColumn( - 0, - GlobalizationUtil.globalize("cms.ui.type.permissions.role"). - localize(), - TABLE_COL_ROLE)); - - columnModel.add(new TableColumn( - 1, - GlobalizationUtil.globalize("cms.ui.type.permissions_can_use"). - localize(), - TABLE_COL_CAN_USE)); - - columnModel.add(new TableColumn( - 2, - GlobalizationUtil.globalize( - "cms.ui.type.permission.action").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); - } - - public void cellSelected(final TableActionEvent event) { - PageState state = event.getPageState(); - - TableColumn column = getColumnModel().get(event.getColumn().intValue()); - - if (TABLE_COL_ACTION.equals(column.getHeaderKey().toString())) { - Role role = new Role(new BigDecimal(event.getRowKey().toString())); - ContentType contentType = getType().getContentType(state); - ObjectPermissionCollection permissions = - PermissionService. - getDirectGrantedPermissions(contentType.getOID()); - - if ((permissions.size() == 0)) { - role.grantPermission(contentType, - PrivilegeDescriptor.get( - com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); - } else if (!role.checkPermission(contentType, PrivilegeDescriptor. - get(com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { - role.grantPermission(contentType, - PrivilegeDescriptor.get( - com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); - } else { - role.revokePermission(contentType, - PrivilegeDescriptor.get( - com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM)); - } - } - } - - public void headSelected(final TableActionEvent event) { - //Nothing to do - } - - private class TypePermissionsTableModelBuilder - extends LockableImpl - implements TableModelBuilder { - - public TypePermissionsTableModelBuilder() { - } - - public TableModel makeModel(Table table, PageState state) { - table.getRowSelectionModel().clearSelection(state); - return new TypePermissionsTableModel(table, state); - } - } - - private class TypePermissionsTableModel implements TableModel { - - private Table table; - private RoleCollection roles; - private ContentType contentType; - private ObjectPermissionCollection permissions; - - public TypePermissionsTableModel(Table table, PageState state) { - this.table = table; - contentType = - ((TypePermissionsTable) table).getType().getContentType( - state); - - roles = CMS.getContext().getContentSection().getStaffGroup(). - getRoles(); - - permissions = - PermissionService.getDirectGrantedPermissions(contentType.getOID()); - } - - public int getColumnCount() { - if (roles == null) { - return 0; - } else { - return (int) roles.size(); - } - } - - public boolean nextRow() { - if (roles == null) { - return false; - } else { - return roles.next(); - } - } - - public Object getElementAt(int columnIndex) { - switch (columnIndex) { - case 0: - return roles.getRole().getName(); - case 1: - if (permissions.size() == 0) { - return "cms.ui.type.permissions.can_use.yes"; - } else { - if (roles.getRole().checkPermission(contentType, - PrivilegeDescriptor. - get( - com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { - return "cms.ui.type.permissions.can_use.yes"; - } else { - return "cms.ui.type.permissions.can_use.no"; - } - } - case 2: - if (permissions.size() == 0) { - return "cms.ui.type.permissions.actions.restrict_to_this_role"; - } else { - if (roles.getRole().checkPermission(contentType, - PrivilegeDescriptor. - get( - com.arsdigita.cms.SecurityManager.CMS_NEW_ITEM))) { - return "cms.ui.type.permissions.actions.revoke"; - } else { - return "cms.ui.type.permissions.can_use.grant"; - } - } - default: - return null; - } - } - - public Object getKeyAt(int columnIndex) { - return roles.getRole().getID(); - } - } - - private class RoleCellRenderer - extends LockableImpl - implements TableCellRenderer { - - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { - return new Label(value.toString()); - } - } - - private class CanUseCellRenderer - extends LockableImpl - implements TableCellRenderer { - - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { - return new Label(GlobalizationUtil.globalize(value.toString())); - } - } - - private class ActionCellRenderer - extends LockableImpl - implements TableCellRenderer { - - public Component getComponent(Table table, - PageState state, - Object value, - boolean isSelected, - Object key, - int row, - int column) { - com.arsdigita.cms.SecurityManager securityManager = Utilities. - getSecurityManager(state); - Party party = Kernel.getContext().getParty(); - if (party == null) { - party = Kernel.getPublicUser(); - } - if (securityManager.canAccess(party, - SecurityConstants.CONTENT_TYPE_ADMIN)) { - ControlLink link = new ControlLink((String)GlobalizationUtil.globalize( - value.toString()).localize()); - - return link; - } else { - return new Label(value.toString()); - } - - - } - } - - private ContentTypeRequestLocal getType() { - return type; - } -} diff --git a/ccm-core/src/main/java/org/libreccm/security/PermissionManager.java b/ccm-core/src/main/java/org/libreccm/security/PermissionManager.java index 27655083c..aadb13862 100644 --- a/ccm-core/src/main/java/org/libreccm/security/PermissionManager.java +++ b/ccm-core/src/main/java/org/libreccm/security/PermissionManager.java @@ -31,8 +31,6 @@ import org.libreccm.core.CoreConstants; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Arrays; -import java.util.logging.Level; -import java.util.logging.Logger; import java.util.stream.Collectors; import javax.enterprise.context.RequestScoped;