CCM NG/ccm-cms: Content Types Tab
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4635 8810af33-2d31-482b-a856-94f89814c4dfpull/2/head
parent
759c493d04
commit
eca7700088
|
|
@ -20,12 +20,14 @@ 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.cms.CMS;
|
||||
|
||||
|
|
@ -41,6 +43,7 @@ import com.arsdigita.globalization.GlobalizedMessage;
|
|||
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;
|
||||
|
|
@ -48,6 +51,9 @@ 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 java.util.List;
|
||||
|
||||
/**
|
||||
* This class contains the split pane for the ContentType administration
|
||||
|
|
@ -59,11 +65,11 @@ import org.librecms.contentsection.ContentTypeManager;
|
|||
* @author Justin Ross <jross@redhat.com>
|
||||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
public final class ContentTypeAdminPane extends BaseAdminPane {
|
||||
public final class ContentTypeAdminPane extends BaseAdminPane<String> {
|
||||
|
||||
private static final Logger LOGGER = LogManager.getLogger(
|
||||
ContentTypeAdminPane.class);
|
||||
|
||||
|
||||
private final ACSObjectSelectionModel m_model;
|
||||
private final ContentTypeRequestLocal m_type;
|
||||
|
||||
|
|
@ -85,10 +91,11 @@ public final class ContentTypeAdminPane extends BaseAdminPane {
|
|||
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);
|
||||
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));
|
||||
|
||||
|
|
@ -303,4 +310,53 @@ public final class ContentTypeAdminPane extends BaseAdminPane {
|
|||
|
||||
}
|
||||
|
||||
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<ContentTypeInfo> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,15 +18,21 @@
|
|||
*/
|
||||
package com.arsdigita.cms.ui.type;
|
||||
|
||||
import com.arsdigita.kernel.KernelConfig;
|
||||
|
||||
import org.libreccm.configuration.ConfigurationManager;
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.libreccm.workflow.WorkflowTemplate;
|
||||
import org.librecms.contentsection.ContentSection;
|
||||
import org.librecms.contentsection.ContentSectionRepository;
|
||||
import org.librecms.contentsection.ContentType;
|
||||
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.Optional;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
|
|
@ -42,16 +48,16 @@ import javax.transaction.Transactional;
|
|||
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
|
||||
*/
|
||||
@RequestScoped
|
||||
public class ContentTypeAdminPaneController {
|
||||
class ContentTypeAdminPaneController {
|
||||
|
||||
@Inject
|
||||
private ContentTypeRepository typeRepo;
|
||||
|
||||
@Inject
|
||||
private GlobalizationHelper globalizationHelper;
|
||||
private ContentTypesManager typesManager;
|
||||
|
||||
@Inject
|
||||
private ConfigurationManager confManager;
|
||||
private ContentSectionRepository sectionRepo;
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public List<String[]> getTypeList(final ContentSection section) {
|
||||
|
|
@ -65,19 +71,116 @@ public class ContentTypeAdminPaneController {
|
|||
private String[] generateListEntry(final ContentType type) {
|
||||
final String[] entry = new String[2];
|
||||
|
||||
final KernelConfig kernelConfig = confManager.findConfiguration(
|
||||
KernelConfig.class);
|
||||
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);
|
||||
|
||||
entry[0] = type.getUuid();
|
||||
// Enable if admin UI has fields for editing localised labels...
|
||||
// if (type.getLabel().hasValue(globalizationHelper.getNegotiatedLocale())) {
|
||||
// entry[1] = type.getLabel().getValue(globalizationHelper
|
||||
// .getNegotiatedLocale());
|
||||
// } else {
|
||||
entry[1] = type.getLabel().getValue(kernelConfig.getDefaultLocale());
|
||||
// }
|
||||
|
||||
return entry;
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public List<ContentTypeInfo> getNotAssociatedContentTypes(
|
||||
final ContentSection section) {
|
||||
|
||||
final List<ContentTypeInfo> availableTypes = typesManager
|
||||
.getAvailableContentTypes();
|
||||
final List<ContentTypeInfo> 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)
|
||||
public 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)
|
||||
public Optional<String> 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)
|
||||
public WorkflowTemplate 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)
|
||||
public Optional<String> getWorkflowTemplateName(final ContentType type,
|
||||
final Locale locale) {
|
||||
|
||||
final WorkflowTemplate workflowTemplate = getWorkflowTemplate(type);
|
||||
|
||||
if (workflowTemplate == null) {
|
||||
return Optional.empty();
|
||||
} else {
|
||||
return Optional.of(workflowTemplate.getName().getValue(locale));
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public List<LifecycleDefinition> 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)
|
||||
public List<WorkflowTemplate> 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,19 +30,23 @@ 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.libreccm.workflow.WorkflowTemplate;
|
||||
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:
|
||||
* This component displays basic attributes of a content type including:
|
||||
*
|
||||
* label, description, default lifecycle definition, default workflow
|
||||
* template
|
||||
* label, description, default lifecycle definition, default workflow template
|
||||
*
|
||||
* @author Michael Pih
|
||||
* @author <a href="mailto:jross@redhat.com">Justin Ross</a>
|
||||
|
|
@ -60,16 +64,26 @@ class ContentTypePropertyList extends PropertyList {
|
|||
protected final List<Property> properties(final PageState state) {
|
||||
final List<Property> props = super.properties(state);
|
||||
final ContentType type = m_type.getContentType(state);
|
||||
final ContentSection section =
|
||||
CMS.getContext().getContentSection();
|
||||
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"),
|
||||
type.getLabel().getValue(defaultLocale)));
|
||||
labelBundle.getString(typeInfo.getLabelKey())));
|
||||
props.add(new Property(gz("cms.ui.description"),
|
||||
type.getDescription().getValue(defaultLocale)));
|
||||
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"),
|
||||
|
|
@ -84,27 +98,37 @@ class ContentTypePropertyList extends PropertyList {
|
|||
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");
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final ContentTypeAdminPaneController controller = cdiUtil
|
||||
.findBean(ContentTypeAdminPaneController.class);
|
||||
|
||||
final Optional<String> label = controller
|
||||
.getLifecycleDefinitionLabel(type, defaultLocale);
|
||||
|
||||
if (label.isPresent()) {
|
||||
return label.get();
|
||||
} else {
|
||||
return cycle.getLabel().getValue(defaultLocale);
|
||||
return lz("cms.ui.type.lifecycle.none");
|
||||
}
|
||||
}
|
||||
|
||||
private String getWorkflow(final ContentSection section,
|
||||
final ContentType type) {
|
||||
final KernelConfig kernelConfig = KernelConfig.getConfig();
|
||||
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");
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final ContentTypeAdminPaneController controller = cdiUtil
|
||||
.findBean(ContentTypeAdminPaneController.class);
|
||||
|
||||
final Optional<String> name = controller
|
||||
.getWorkflowTemplateName(type, defaultLocale);
|
||||
|
||||
if (name.isPresent()) {
|
||||
return name.get();
|
||||
} else {
|
||||
return template.getName().getValue(defaultLocale);
|
||||
return lz("cms.ui.type.workflow.none");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -115,4 +139,5 @@ class ContentTypePropertyList extends PropertyList {
|
|||
private static String lz(final String key) {
|
||||
return (String) gz(key).localize();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ 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;
|
||||
|
|
@ -34,12 +35,8 @@ 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.form.TextArea;
|
||||
import com.arsdigita.bebop.form.TextField;
|
||||
import com.arsdigita.bebop.parameters.BigDecimalParameter;
|
||||
import com.arsdigita.bebop.parameters.LongParameter;
|
||||
import com.arsdigita.bebop.parameters.NotNullValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringLengthValidationListener;
|
||||
import com.arsdigita.bebop.parameters.StringParameter;
|
||||
import com.arsdigita.cms.CMS;
|
||||
|
||||
import org.librecms.contentsection.ContentSection;
|
||||
|
|
@ -48,6 +45,7 @@ import org.librecms.lifecycle.LifecycleDefinition;
|
|||
import org.libreccm.workflow.WorkflowTemplate;
|
||||
|
||||
import com.arsdigita.cms.ui.CMSForm;
|
||||
import com.arsdigita.cms.ui.GlobalNavigation;
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
import com.arsdigita.kernel.KernelConfig;
|
||||
import com.arsdigita.util.UncheckedWrapperException;
|
||||
|
|
@ -66,8 +64,6 @@ import java.util.Locale;
|
|||
import java.util.Optional;
|
||||
import java.util.TooManyListenersException;
|
||||
|
||||
import javax.persistence.NoResultException;
|
||||
|
||||
/**
|
||||
* This class contains a form component to edit a content type
|
||||
*
|
||||
|
|
@ -80,12 +76,12 @@ public class EditType extends CMSForm
|
|||
|
||||
private static final Logger LOGGER = LogManager.getLogger(EditType.class);
|
||||
|
||||
private final SingleSelectionModel<ContentType> m_types;
|
||||
private final SingleSelectionModel<String> m_types;
|
||||
|
||||
// Form widgets
|
||||
private Hidden m_id;
|
||||
private TextField m_label;
|
||||
private TextArea m_description;
|
||||
// private TextField m_label;
|
||||
// private TextArea m_description;
|
||||
private SingleSelect m_lcSelect;
|
||||
private SingleSelect m_wfSelect;
|
||||
private Submit m_submit;
|
||||
|
|
@ -95,36 +91,35 @@ public class EditType extends CMSForm
|
|||
* @param model The content type selection model. This tells the form which
|
||||
* content type is selected.
|
||||
*/
|
||||
public EditType(final SingleSelectionModel<ContentType> model) {
|
||||
public EditType(final SingleSelectionModel<String> model) {
|
||||
super("EditContentType");
|
||||
|
||||
m_types = model;
|
||||
|
||||
m_id = new Hidden(new BigDecimalParameter("id"));
|
||||
m_id = new Hidden(new LongParameter("id"));
|
||||
m_id.addValidationListener(new NotNullValidationListener());
|
||||
add(m_id);
|
||||
|
||||
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);
|
||||
|
||||
// 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);
|
||||
add(new Label(new GlobalizedMessage("cms.ui.type.lifecycle",
|
||||
CmsConstants.CMS_BUNDLE)));
|
||||
m_lcSelect = new SingleSelect(new BigDecimalParameter("lifecycle"));
|
||||
m_lcSelect = new SingleSelect(new LongParameter("lifecycle"));
|
||||
try {
|
||||
m_lcSelect.addPrintListener(new SelectLifecyclePrintListener());
|
||||
} catch (TooManyListenersException e) {
|
||||
|
|
@ -135,7 +130,7 @@ public class EditType extends CMSForm
|
|||
|
||||
add(new Label(new GlobalizedMessage("cms.ui.type.workflow",
|
||||
CmsConstants.CMS_BUNDLE)));
|
||||
m_wfSelect = new SingleSelect(new BigDecimalParameter("workflow"));
|
||||
m_wfSelect = new SingleSelect(new LongParameter("workflow"));
|
||||
try {
|
||||
m_wfSelect.addPrintListener(new SelectWorkflowPrintListener());
|
||||
} catch (TooManyListenersException e) {
|
||||
|
|
@ -195,14 +190,14 @@ public class EditType extends CMSForm
|
|||
|
||||
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());
|
||||
// final String label = type.getLabel().getValue(kernelConfig
|
||||
// .getDefaultLocale());
|
||||
// final String description = type.getDescription().getValue(kernelConfig
|
||||
// .getDefaultLocale());
|
||||
|
||||
data.put(m_id.getName(), typeId);
|
||||
data.put(m_label.getName(), label);
|
||||
data.put(m_description.getName(), description);
|
||||
// data.put(m_label.getName(), label);
|
||||
// data.put(m_description.getName(), description);
|
||||
|
||||
final LifecycleDefinition cycle = type.getDefaultLifecycle();
|
||||
if (cycle != null) {
|
||||
|
|
@ -220,7 +215,7 @@ public class EditType extends CMSForm
|
|||
* model.
|
||||
*/
|
||||
private ContentType getContentType(final PageState state) {
|
||||
final String key = m_types.getSelectedKey(state).toString();
|
||||
final String key = (String) m_types.getSelectedKey(state);
|
||||
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final ContentTypeRepository typeRepo = cdiUtil.findBean(
|
||||
|
|
@ -231,10 +226,10 @@ public class EditType extends CMSForm
|
|||
result = typeRepo.findById(Long.parseLong(key));
|
||||
} catch (NumberFormatException ex) {
|
||||
throw new UncheckedWrapperException(String.format(
|
||||
"The provided key \"%s\" is not a long.", key),
|
||||
ex);
|
||||
"The provided key \"%d\" is not a long.", key),
|
||||
ex);
|
||||
}
|
||||
|
||||
|
||||
if (result.isPresent()) {
|
||||
return result.get();
|
||||
} else {
|
||||
|
|
@ -260,8 +255,8 @@ public class EditType extends CMSForm
|
|||
|
||||
// Read form variables.
|
||||
final Long key = (Long) data.get(m_id.getName());
|
||||
final String label = (String) data.get(m_label.getName());
|
||||
final String description = (String) data.get(m_description.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(m_lcSelect.getName());
|
||||
final Long workflowId = (Long) data.get(m_wfSelect.getName());
|
||||
|
||||
|
|
@ -284,19 +279,26 @@ public class EditType extends CMSForm
|
|||
new Object[]{key}));
|
||||
}
|
||||
|
||||
final KernelConfig kernelConfig = KernelConfig.getConfig();
|
||||
|
||||
type.get().getLabel().addValue(kernelConfig.getDefaultLocale(), label);
|
||||
type.get().getDescription().addValue(kernelConfig.getDefaultLocale(),
|
||||
description);
|
||||
|
||||
// final KernelConfig kernelConfig = KernelConfig.getConfig();
|
||||
// type.get().getLabel().addValue(kernelConfig.getDefaultLocale(), label);
|
||||
// type.get().getDescription().addValue(kernelConfig.getDefaultLocale(),
|
||||
// description);
|
||||
typeRepo.save(type.get());
|
||||
|
||||
// Handle default lifecycle and workflow.
|
||||
final LifecycleDefinition defaultLifecycle = lifecycleDefRepo.findById(
|
||||
lifecycleId).get();
|
||||
final WorkflowTemplate defaultWorkflow = workflowTemplateRepo.findById(
|
||||
workflowId).get();
|
||||
final LifecycleDefinition defaultLifecycle;
|
||||
if (lifecycleId == 0) {
|
||||
defaultLifecycle = null;
|
||||
} else {
|
||||
defaultLifecycle = lifecycleDefRepo.findById(lifecycleId).get();
|
||||
}
|
||||
final WorkflowTemplate defaultWorkflow;
|
||||
if (workflowId == 0) {
|
||||
defaultWorkflow = null;
|
||||
} else {
|
||||
defaultWorkflow = workflowTemplateRepo.findById(workflowId).get();
|
||||
}
|
||||
|
||||
|
||||
typeManager.setDefaultLifecycle(type.get(), defaultLifecycle);
|
||||
typeManager.setDefaultWorkflow(type.get(), defaultWorkflow);
|
||||
|
|
@ -316,19 +318,26 @@ public class EditType extends CMSForm
|
|||
.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("", "-- select --"));
|
||||
lifecycleSelect.addOption(new Option(
|
||||
"0",
|
||||
new Label(new GlobalizedMessage("cms.ui.type.lifecycle.select",
|
||||
CmsConstants.CMS_BUNDLE))));
|
||||
|
||||
final List<LifecycleDefinition> cycles = section
|
||||
.getLifecycleDefinitions();
|
||||
final List<LifecycleDefinition> cycles = controller
|
||||
.getLifecycleDefinitions(section);
|
||||
final Locale defaultLocale = KernelConfig.getConfig()
|
||||
.getDefaultLocale();
|
||||
cycles.forEach(cycle -> {
|
||||
lifecycleSelect.addOption(
|
||||
new Option(Long.toString(cycle.getDefinitionId()),
|
||||
cycle.getLabel().getValue(defaultLocale)));
|
||||
new Text(cycle.getLabel().getValue(defaultLocale))));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -349,10 +358,17 @@ public class EditType extends CMSForm
|
|||
// Get the current content section
|
||||
ContentSection section = CMS.getContext().getContentSection();
|
||||
|
||||
workflowSelect.addOption(new Option("", "-- select --"));
|
||||
workflowSelect.addOption(new Option(
|
||||
"0",
|
||||
new Label(new GlobalizedMessage("cms.ui.type.workflow.select",
|
||||
CmsConstants.CMS_BUNDLE))));
|
||||
|
||||
final List<WorkflowTemplate> templates = section
|
||||
.getWorkflowTemplates();
|
||||
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
|
||||
final ContentTypeAdminPaneController controller = cdiUtil
|
||||
.findBean(ContentTypeAdminPaneController.class);
|
||||
|
||||
final List<WorkflowTemplate> templates = controller
|
||||
.getWorkflowTemplates(section);
|
||||
final Locale defaultLocale = KernelConfig.getConfig()
|
||||
.getDefaultLocale();
|
||||
templates.forEach(template -> {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ 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;
|
||||
|
||||
|
|
@ -49,6 +50,9 @@ public class TypePermissionsTableController {
|
|||
@Inject
|
||||
private PermissionManager permissionManager;
|
||||
|
||||
@Inject
|
||||
private ContentSectionRepository sectionRepo;
|
||||
|
||||
@Inject
|
||||
private ContentTypeRepository typeRepo;
|
||||
|
||||
|
|
@ -63,9 +67,16 @@ public class TypePermissionsTableController {
|
|||
@Transactional(Transactional.TxType.REQUIRED)
|
||||
public List<RowData<Long>> retrieveTypePermissions(
|
||||
final long typeId, final ContentSection section) {
|
||||
final ContentType type = typeRepo.findById(typeId).get();
|
||||
|
||||
final List<Role> roles = section.getRoles();
|
||||
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<Role> roles = contentSection.getRoles();
|
||||
|
||||
return roles.stream()
|
||||
.map(role -> retrievePermissionsForRole(type, role))
|
||||
|
|
@ -88,7 +99,7 @@ public class TypePermissionsTableController {
|
|||
}
|
||||
|
||||
public void toggleTypeUsePermission(final ContentType type,
|
||||
final Role role) {
|
||||
final Role role) {
|
||||
if (permissionChecker.isPermitted(TypePrivileges.USE_TYPE, type, role)) {
|
||||
permissionManager.revokePrivilege(TypePrivileges.USE_TYPE,
|
||||
role,
|
||||
|
|
|
|||
|
|
@ -42,6 +42,7 @@ import org.librecms.dispatcher.MultilingualItemResolver;
|
|||
import java.util.Arrays;
|
||||
|
||||
import org.librecms.contentsection.privileges.TypePrivileges;
|
||||
import org.librecms.contenttypes.ContentTypeDescription;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
|
|
@ -348,6 +349,7 @@ public class ContentSectionSetup extends AbstractCcmApplicationSetup {
|
|||
final ContentType type = new ContentType();
|
||||
type.setContentSection(section);
|
||||
type.setUuid(UUID.randomUUID().toString());
|
||||
type.setDisplayName(clazz.getSimpleName());
|
||||
type.setContentItemClass(clazz.getName());
|
||||
getEntityManager().persist(type);
|
||||
section.addContentType(type);
|
||||
|
|
|
|||
|
|
@ -18,9 +18,6 @@
|
|||
*/
|
||||
package org.librecms.contentsection;
|
||||
|
||||
import com.arsdigita.globalization.GlobalizedMessage;
|
||||
|
||||
import org.libreccm.l10n.GlobalizationHelper;
|
||||
import org.librecms.contentsection.privileges.TypePrivileges;
|
||||
|
||||
import org.libreccm.security.AuthorizationRequired;
|
||||
|
|
@ -29,12 +26,8 @@ import org.libreccm.security.RequiresPrivilege;
|
|||
import org.libreccm.security.Role;
|
||||
import org.libreccm.workflow.WorkflowTemplate;
|
||||
import org.librecms.contentsection.privileges.AdminPrivileges;
|
||||
import org.librecms.contenttypes.Article;
|
||||
import org.librecms.lifecycle.LifecycleDefinition;
|
||||
|
||||
import java.util.Objects;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import javax.enterprise.context.RequestScoped;
|
||||
import javax.inject.Inject;
|
||||
import javax.transaction.Transactional;
|
||||
|
|
|
|||
|
|
@ -221,3 +221,26 @@ cms.ui.lifecycle.phase.edit_submit=Save
|
|||
cms.ui.lifecycle.phase.edit_cancel=Cancel
|
||||
cms.ui.lifecycle.phase.delete_submit=Delete
|
||||
cms.ui.lifecycle.phase.delete_cancel=Cancel
|
||||
cms.ui.type.intro=Select a content type or create a new one
|
||||
cms.ui.type.add=Add content type
|
||||
cms.ui.types=Content types
|
||||
cms.ui.type.details=Content Type Details
|
||||
cms.ui.name=Name
|
||||
cms.ui.description=Description
|
||||
cms.ui.type.lifecycle=Default lifecycle
|
||||
cms.ui.type.workflow=Standard workflow
|
||||
cms.ui.type.lifecycle.none=No default lifecycle
|
||||
cms.ui.type.workflow.none=No default workflow
|
||||
cms.ui.type.templates=Templates
|
||||
cms.ui.type.template.add=Add template
|
||||
cms.ui.type.edit=Edit
|
||||
cms.ui.type.delete=Delete
|
||||
cms.ui.type.permissions=Permissions
|
||||
cms.ui.type.permissions.role=Role
|
||||
cms.ui.type.permissions_can_use=Can use
|
||||
cms.ui.type.permission.action=Revoke permission
|
||||
cms.ui.type.permissions.actions.revoke=Revoke permission
|
||||
cms.ui.type.lifecycle.select=Select the default lifecycle
|
||||
cms.ui.type.workflow.select=Select default workflow
|
||||
cms.ui.type.select=Select Content Type
|
||||
cms.ui.type.select.none=There are no available content types to select
|
||||
|
|
|
|||
|
|
@ -220,3 +220,26 @@ cms.ui.lifecycle.phase.edit_submit=Speichern
|
|||
cms.ui.lifecycle.phase.edit_cancel=Abbrechen
|
||||
cms.ui.lifecycle.phase.delete_submit=L\u00f6schen
|
||||
cms.ui.lifecycle.phase.delete_cancel=Abbrechen
|
||||
cms.ui.type.intro=W\u00e4hlen Sie einen Dokumenttyp oder erstellen Sie einen neuen
|
||||
cms.ui.type.add=Dokumenttyp hinzuf\u00fcgen
|
||||
cms.ui.types=Dokumenttypen
|
||||
cms.ui.type.details=Dokumententyp Details
|
||||
cms.ui.name=Name
|
||||
cms.ui.description=Beschreibung
|
||||
cms.ui.type.lifecycle=Voreingestellter Ver\u00f6ffentlichungszyklus
|
||||
cms.ui.type.workflow=Voreingestellter Arbeitsablauf
|
||||
cms.ui.type.lifecycle.none=Kein voreingestellter Ver\u00f6ffentlichungszyklus
|
||||
cms.ui.type.workflow.none=Kein voreingestellter Arbeitsablauf
|
||||
cms.ui.type.templates=Vorlagen
|
||||
cms.ui.type.template.add=Vorlage hinzuf\u00fcgen
|
||||
cms.ui.type.edit=Bearbeiten
|
||||
cms.ui.type.delete=L\u00f6schen
|
||||
cms.ui.type.permissions=Berechtigungen
|
||||
cms.ui.type.permissions.role=Rolle
|
||||
cms.ui.type.permissions_can_use=Darf Dokumenttype verwenden?
|
||||
cms.ui.type.permission.action=Berechtigung entziehen
|
||||
cms.ui.type.permissions.actions.revoke=Berechtigung entziehen
|
||||
cms.ui.type.lifecycle.select=Voreingestellten Ver\u00f6ffentlichungszyklus ausw\u00e4hlen
|
||||
cms.ui.type.workflow.select=Voreingestellten Arbeitsablauf ausw\u00e4hlen
|
||||
cms.ui.type.select=Dolkumententype ausw\u00e4hlen
|
||||
cms.ui.type.select.none=Keine verf\u00fcgbaren Dokumententypen
|
||||
|
|
|
|||
|
|
@ -179,3 +179,26 @@ cms.ui.lifecycle.phase.edit_submit=Save
|
|||
cms.ui.lifecycle.phase.edit_cancel=Cancel
|
||||
cms.ui.lifecycle.phase.delete_submit=Delete
|
||||
cms.ui.lifecycle.phase.delete_cancel=Cancel
|
||||
cms.ui.type.intro=Select a content type or create a new one
|
||||
cms.ui.type.add=Add content type
|
||||
cms.ui.types=Content types
|
||||
cms.ui.type.details=Content Type Details
|
||||
cms.ui.name=Name
|
||||
cms.ui.description=Description
|
||||
cms.ui.type.lifecycle=Default lifecycle
|
||||
cms.ui.type.workflow=Standard workflow
|
||||
cms.ui.type.lifecycle.none=No default lifecycle
|
||||
cms.ui.type.workflow.none=No default workflow
|
||||
cms.ui.type.templates=Templates
|
||||
cms.ui.type.template.add=Add template
|
||||
cms.ui.type.edit=Edit
|
||||
cms.ui.type.delete=Delete
|
||||
cms.ui.type.permissions=Permissions
|
||||
cms.ui.type.permissions.role=Role
|
||||
cms.ui.type.permissions_can_use=Can use content type?
|
||||
cms.ui.type.permission.action=Revoke permission
|
||||
cms.ui.type.permissions.actions.revoke=Revoke permission
|
||||
cms.ui.type.lifecycle.select=Select the default lifecycle
|
||||
cms.ui.type.workflow.select=Select default workflow
|
||||
cms.ui.type.select=Select Content Type
|
||||
cms.ui.type.select.none=There are no available content types to select
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ import com.arsdigita.bebop.PageState;
|
|||
* explicitly.
|
||||
*
|
||||
* @author David Lutterkort
|
||||
* @version $Id$ */
|
||||
*/
|
||||
public class DefaultListCellRenderer implements ListCellRenderer {
|
||||
|
||||
/**
|
||||
|
|
@ -40,15 +40,21 @@ public class DefaultListCellRenderer implements ListCellRenderer {
|
|||
* <code>isSelected</code> is not true, returns a
|
||||
* <code>ControlLink</code> labelled with
|
||||
* <code>value.toString()</code>. When the user clicks on the link, that
|
||||
* item becomes selected. */
|
||||
public Component getComponent(List list, PageState state, Object value,
|
||||
String key, int index, boolean isSelected)
|
||||
* item becomes selected.
|
||||
*/
|
||||
@Override
|
||||
public Component getComponent(final List list,
|
||||
final PageState state,
|
||||
final Object value,
|
||||
final String key,
|
||||
final int index,
|
||||
final boolean isSelected)
|
||||
{
|
||||
Label l = new Label(value.toString());
|
||||
final Label label = new Label(value.toString());
|
||||
if (isSelected) {
|
||||
l.setFontWeight(Label.BOLD);
|
||||
return l;
|
||||
label.setFontWeight(Label.BOLD);
|
||||
return label;
|
||||
}
|
||||
return new ControlLink(l);
|
||||
return new ControlLink(label);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,10 +37,10 @@ public class RowData<K> {
|
|||
|
||||
private K rowKey;
|
||||
|
||||
private final List<String> cols;
|
||||
private final String[] cols;
|
||||
|
||||
public RowData(final int numCols) {
|
||||
cols = new ArrayList<>(numCols);
|
||||
cols = new String[numCols];
|
||||
}
|
||||
|
||||
public K getRowKey() {
|
||||
|
|
@ -52,11 +52,11 @@ public class RowData<K> {
|
|||
}
|
||||
|
||||
public String getColData(final int colIndex) {
|
||||
return cols.get(colIndex);
|
||||
return cols[colIndex];
|
||||
}
|
||||
|
||||
public void setColData(final int colIndex, final String data) {
|
||||
cols.set(colIndex, data);
|
||||
cols[colIndex] = data;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue