CCM NG/ccm-cms: Creating MPA, editing basic properties of an MPA now works.

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4841 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2017-07-05 09:25:08 +00:00
parent 5fa68b9570
commit 069bf78fb4
5 changed files with 137 additions and 68 deletions

View File

@ -585,11 +585,9 @@ public class EventPropertyForm
if (!eventConfig.isHideLinkToMap()) { if (!eventConfig.isHideLinkToMap()) {
item.setMapLink((String) data.get(MAP_LINK)); item.setMapLink((String) data.get(MAP_LINK));
} }
item item.getLocation().addValue(selectedLocale,
.getLocation().addValue(selectedLocale,
(String) data.get(LOCATION)); (String) data.get(LOCATION));
item item.getDescription().addValue(selectedLocale,
.getDescription().addValue(selectedLocale,
(String) data.get(LEAD)); (String) data.get(LEAD));
if (!eventConfig.isHideCost()) { if (!eventConfig.isHideCost()) {
item.getCost().addValue(selectedLocale, item.getCost().addValue(selectedLocale,

View File

@ -28,19 +28,20 @@ import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.event.FormSubmissionListener;
import com.arsdigita.bebop.event.FormValidationListener; import com.arsdigita.bebop.event.FormValidationListener;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.ApplyWorkflowFormSection; import com.arsdigita.cms.ui.authoring.ApplyWorkflowFormSection;
import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.ui.authoring.CreationComponent; import com.arsdigita.cms.ui.authoring.CreationComponent;
import com.arsdigita.cms.ui.authoring.CreationSelector; import com.arsdigita.cms.ui.authoring.CreationSelector;
import com.arsdigita.cms.ui.authoring.LanguageWidget; import com.arsdigita.cms.ui.authoring.LanguageWidget;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig;
import java.util.Date; import java.util.Date;
import org.arsdigita.cms.CMSConfig; import org.arsdigita.cms.CMSConfig;
import org.libreccm.cdi.utils.CdiUtil;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.ContentSection; import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.Folder; import org.librecms.contentsection.Folder;
import org.librecms.contenttypes.MultiPartArticle; import org.librecms.contenttypes.MultiPartArticle;
@ -64,9 +65,15 @@ public class MultiPartArticleCreateForm
private final CreationSelector creationSelector; private final CreationSelector creationSelector;
private ApplyWorkflowFormSection workflowSection; private ApplyWorkflowFormSection workflowSection;
public MultiPartArticleCreateForm(final ItemSelectionModel itemSelectionModel, public MultiPartArticleCreateForm(
final CreationSelector creationSelector) { final ItemSelectionModel itemSelectionModel,
super("MultiPartArticleCreate", itemSelectionModel); final CreationSelector creationSelector,
final StringParameter selectedLanguageParam) {
super("MultiPartArticleCreate",
itemSelectionModel,
selectedLanguageParam);
this.creationSelector = creationSelector; this.creationSelector = creationSelector;
workflowSection.setCreationSelector(creationSelector); workflowSection.setCreationSelector(creationSelector);
workflowSection.setContentType(itemSelectionModel.getContentType()); workflowSection.setContentType(itemSelectionModel.getContentType());
@ -138,32 +145,37 @@ public class MultiPartArticleCreateForm
} }
@Override @Override
public void process(final FormSectionEvent event) throws FormProcessException { public void process(final FormSectionEvent event)
throws FormProcessException {
final FormData data = event.getFormData(); final FormData data = event.getFormData();
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final ContentSection section = creationSelector.getContentSection(state); final ContentSection section = creationSelector.getContentSection(state);
final Folder folder = creationSelector.getFolder(state); final Folder folder = creationSelector.getFolder(state);
final Locale locale = new Locale((String) data final Locale locale = new Locale((String) data.get(LANGUAGE));
.get(BasicItemForm.LANGUAGE));
final MultiPartArticle article = createArticle(state, final MultiPartArticle article = createArticle(state,
(String) data.get(NAME), (String) data.get(NAME),
section, section,
folder, folder,
locale); locale);
article.getTitle().addValue(KernelConfig.getConfig().getDefaultLocale(), article.getTitle().addValue(locale, (String) data.get(TITLE));
(String) data.get(TITLE));
if (!CMSConfig.getConfig().isHideLaunchDate()) { if (!CMSConfig.getConfig().isHideLaunchDate()) {
article.setLaunchDate((Date) data.get(LAUNCH_DATE)); article.setLaunchDate((Date) data.get(LAUNCH_DATE));
} }
article article
.getSummary() .getSummary()
.addValue(KernelConfig.getConfig().getDefaultLocale(), .addValue(locale, (String) data.get(SUMMARY));
(String) data.get(SUMMARY));
workflowSection.applyWorkflow(state, article); workflowSection.applyWorkflow(state, article);
final CdiUtil cdiUtil =CdiUtil.createCdiUtil();
final ContentItemRepository itemRepo = cdiUtil
.findBean(ContentItemRepository.class);
itemRepo.save(article);
creationSelector.editItem(state, article); creationSelector.editItem(state, article);
} }
} }

View File

@ -19,14 +19,11 @@
package com.arsdigita.cms.contenttypes.ui.mparticle; package com.arsdigita.cms.contenttypes.ui.mparticle;
import com.arsdigita.bebop.Component; import com.arsdigita.bebop.Component;
import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.parameters.StringParameter;
import org.librecms.contentsection.ContentSection;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import org.librecms.contenttypes.MultiPartArticle;
import com.arsdigita.toolbox.ui.DomainObjectPropertySheet; import com.arsdigita.toolbox.ui.DomainObjectPropertySheet;
import com.arsdigita.cms.ui.authoring.AuthoringKitWizard; import com.arsdigita.cms.ui.authoring.AuthoringKitWizard;
@ -39,7 +36,6 @@ import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.ConfigurationManager;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
import java.text.DateFormat;
/** /**
* A MultiPartArticle editing component. * A MultiPartArticle editing component.
@ -49,6 +45,7 @@ import java.text.DateFormat;
*/ */
public class MultiPartArticleEdit extends SimpleEditStep { public class MultiPartArticleEdit extends SimpleEditStep {
/** /**
* Constructor. * Constructor.
* *
@ -64,7 +61,10 @@ public class MultiPartArticleEdit extends SimpleEditStep {
super(itemSelectionModel, authoringKitWizard, selectedLanguageParam); super(itemSelectionModel, authoringKitWizard, selectedLanguageParam);
setDefaultEditKey("edit"); setDefaultEditKey("edit");
MultiPartArticleForm form = getForm(itemSelectionModel); final MultiPartArticleForm form = new MultiPartArticleEditForm(
itemSelectionModel,
this,
selectedLanguageParam);
add("edit", add("edit",
new GlobalizedMessage("cms.ui.edit", new GlobalizedMessage("cms.ui.edit",
CmsConstants.CMS_BUNDLE), CmsConstants.CMS_BUNDLE),
@ -77,12 +77,6 @@ public class MultiPartArticleEdit extends SimpleEditStep {
selectedLanguageParam)); selectedLanguageParam));
} }
protected MultiPartArticleForm getForm(
final ItemSelectionModel itemSelectionModel) {
return new MultiPartArticleEditForm(itemSelectionModel, this);
}
public Component getMultiPartArticlePropertiesSheet( public Component getMultiPartArticlePropertiesSheet(
final ItemSelectionModel itemSelectionModel, final ItemSelectionModel itemSelectionModel,
final StringParameter selectedLanguageParam) { final StringParameter selectedLanguageParam) {

View File

@ -23,25 +23,27 @@ import com.arsdigita.bebop.FormProcessException;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.bebop.event.FormSubmissionListener; import com.arsdigita.bebop.event.FormSubmissionListener;
import com.arsdigita.bebop.parameters.StringParameter;
import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.Folder; import org.librecms.contentsection.Folder;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
import com.arsdigita.cms.ui.authoring.BasicPageForm;
import org.librecms.contenttypes.MultiPartArticle; import org.librecms.contenttypes.MultiPartArticle;
import com.arsdigita.cms.ui.authoring.SimpleEditStep; import com.arsdigita.cms.ui.authoring.SimpleEditStep;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig; import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.util.Assert;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.librecms.CmsConstants; import org.librecms.CmsConstants;
import org.librecms.contentsection.ContentItemManager; import org.librecms.contentsection.ContentItemManager;
import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.FolderManager; import org.librecms.contentsection.FolderManager;
import org.librecms.contentsection.FolderRepository; import org.librecms.contentsection.FolderRepository;
import java.util.Locale;
import java.util.Optional; import java.util.Optional;
/** /**
@ -53,20 +55,27 @@ public class MultiPartArticleEditForm extends MultiPartArticleForm
private final ItemSelectionModel itemSelectionModel; private final ItemSelectionModel itemSelectionModel;
private final SimpleEditStep editStep; private final SimpleEditStep editStep;
private final StringParameter selectedLanguageParam;
/** /**
* Constructor. * Constructor.
* *
* @param itemSelectionModel * @param itemSelectionModel
* @param editStep * @param editStep
* @param selectedLanguageParam
*/ */
public MultiPartArticleEditForm(final ItemSelectionModel itemSelectionModel, public MultiPartArticleEditForm(final ItemSelectionModel itemSelectionModel,
final SimpleEditStep editStep) { final SimpleEditStep editStep,
final StringParameter selectedLanguageParam) {
super("MultiPartArticleEditForm",
itemSelectionModel,
selectedLanguageParam);
super("MultiPartArticleEditForm", itemSelectionModel);
addSubmissionListener(this); addSubmissionListener(this);
this.itemSelectionModel = itemSelectionModel; this.itemSelectionModel = itemSelectionModel;
this.editStep = editStep; this.editStep = editStep;
this.selectedLanguageParam = selectedLanguageParam;
} }
@Override @Override
@ -90,14 +99,27 @@ public class MultiPartArticleEditForm extends MultiPartArticleForm
} }
@Override @Override
public void process(final FormSectionEvent event) throws public void process(final FormSectionEvent event)
FormProcessException { throws FormProcessException {
final MultiPartArticle article = super.processBasicWidgets(event);
final PageState state = event.getPageState();
// final MultiPartArticle article = (MultiPartArticle) itemSelectionModel
// .getSelectedObject(state);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ContentItemRepository itemRepo = cdiUtil
.findBean(ContentItemRepository.class);
itemRepo.save(article);
editStep.maybeForwardToNextStep(event.getPageState()); editStep.maybeForwardToNextStep(event.getPageState());
} }
@Override @Override
public void validate(final FormSectionEvent event) throws public void validate(final FormSectionEvent event)
FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final FormData data = event.getFormData(); final FormData data = event.getFormData();
@ -105,17 +127,31 @@ public class MultiPartArticleEditForm extends MultiPartArticleForm
final MultiPartArticle article = (MultiPartArticle) itemSelectionModel final MultiPartArticle article = (MultiPartArticle) itemSelectionModel
.getSelectedObject(state); .getSelectedObject(state);
final Locale selectedLocale;
final String selectedLanguage = (String) state
.getValue(selectedLanguageParam);
if (selectedLanguage == null) {
selectedLocale = KernelConfig.getConfig().getDefaultLocale();
} else {
selectedLocale = new Locale(selectedLanguage);
}
final String newName = (String) data.get(MultiPartArticleForm.NAME); final String newName = (String) data.get(MultiPartArticleForm.NAME);
final String oldName = article final String oldName = article.getName().getValue(selectedLocale);
.getName()
.getValue(KernelConfig.getConfig().getDefaultLocale());
final boolean valid; final boolean valid;
if (newName.equalsIgnoreCase(oldName)) { if (newName.equalsIgnoreCase(oldName)) {
valid = true; valid = true;
} else { } else {
final Folder parent = getParentFolder(article); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
valid = validateNameUniqueness(parent, event); final MultiPartArticleFormController controller = cdiUtil
.findBean(MultiPartArticleFormController.class);
final Optional<Folder> folder = controller.getArticleFolder(article);
if (folder.isPresent()) {
valid = validateNameUniqueness(folder.get(), event);
} else {
valid = true;
}
} }
if (!valid) { if (!valid) {

View File

@ -1,4 +1,4 @@
/* /*
* Copyright (C) 2017 LibreCCM Foundation. * Copyright (C) 2017 LibreCCM Foundation.
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -35,6 +35,7 @@ import com.arsdigita.bebop.parameters.DateParameter;
import com.arsdigita.bebop.parameters.NotEmptyValidationListener; import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
import com.arsdigita.bebop.parameters.NotNullValidationListener; import com.arsdigita.bebop.parameters.NotNullValidationListener;
import com.arsdigita.bebop.parameters.ParameterModel; import com.arsdigita.bebop.parameters.ParameterModel;
import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.bebop.parameters.TrimmedStringParameter; import com.arsdigita.bebop.parameters.TrimmedStringParameter;
import com.arsdigita.bebop.parameters.URLTokenValidationListener; import com.arsdigita.bebop.parameters.URLTokenValidationListener;
import com.arsdigita.cms.ItemSelectionModel; import com.arsdigita.cms.ItemSelectionModel;
@ -42,9 +43,12 @@ import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig; import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.web.Web; import com.arsdigita.web.Web;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.arsdigita.cms.CMSConfig; import org.arsdigita.cms.CMSConfig;
@ -68,7 +72,8 @@ public abstract class MultiPartArticleForm
FormProcessListener, FormProcessListener,
FormValidationListener { FormValidationListener {
private ItemSelectionModel itemSelectionModel; private final ItemSelectionModel itemSelectionModel;
private final StringParameter selectedLanguageParam;
private SaveCancelSection saveCancelSection; private SaveCancelSection saveCancelSection;
/** /**
* Constant property, placeholder for a JavaScript element. * Constant property, placeholder for a JavaScript element.
@ -91,11 +96,13 @@ public abstract class MultiPartArticleForm
MultiPartArticleForm.class); MultiPartArticleForm.class);
public MultiPartArticleForm(final String formName, public MultiPartArticleForm(final String formName,
final ItemSelectionModel itemSelectionModel) { final ItemSelectionModel itemSelectionModel,
final StringParameter selectedLanguageParam) {
super(new ColumnPanel(2)); super(new ColumnPanel(2));
this.itemSelectionModel = itemSelectionModel; this.itemSelectionModel = itemSelectionModel;
this.selectedLanguageParam = selectedLanguageParam;
ColumnPanel panel = (ColumnPanel) getPanel(); ColumnPanel panel = (ColumnPanel) getPanel();
panel.setBorder(false); panel.setBorder(false);
@ -126,7 +133,8 @@ public abstract class MultiPartArticleForm
// add(new Label(GlobalizationUtil // add(new Label(GlobalizationUtil
// .globalize("cms.contenttypes.ui.title"))); // .globalize("cms.contenttypes.ui.title")));
TextField titleWidget = new TextField(new TrimmedStringParameter(TITLE)); final TextField titleWidget = new TextField(new TrimmedStringParameter(
TITLE));
titleWidget.setLabel(new GlobalizedMessage("cms.contenttypes.ui.title", titleWidget.setLabel(new GlobalizedMessage("cms.contenttypes.ui.title",
CmsConstants.CMS_BUNDLE)); CmsConstants.CMS_BUNDLE));
titleWidget.addValidationListener(new NotNullValidationListener()); titleWidget.addValidationListener(new NotNullValidationListener());
@ -141,7 +149,8 @@ public abstract class MultiPartArticleForm
//add(new Label(GlobalizationUtil //add(new Label(GlobalizationUtil
// .globalize("cms.contenttypes.ui.name"))); // .globalize("cms.contenttypes.ui.name")));
TextField nameWidget = new TextField(new TrimmedStringParameter(NAME)); final TextField nameWidget = new TextField(new TrimmedStringParameter(
NAME));
nameWidget.setLabel(new GlobalizedMessage("cms.contenttypes.ui.name", nameWidget.setLabel(new GlobalizedMessage("cms.contenttypes.ui.name",
CmsConstants.CMS_BUNDLE)); CmsConstants.CMS_BUNDLE));
nameWidget.addValidationListener(new NotNullValidationListener()); nameWidget.addValidationListener(new NotNullValidationListener());
@ -157,7 +166,8 @@ public abstract class MultiPartArticleForm
if (!CMSConfig.getConfig().isHideLaunchDate()) { if (!CMSConfig.getConfig().isHideLaunchDate()) {
//add(new Label(GlobalizationUtil //add(new Label(GlobalizationUtil
// .globalize("cms.ui.authoring.page_launch_date"))); // .globalize("cms.ui.authoring.page_launch_date")));
final ParameterModel launchDateParam = new DateParameter(LAUNCH_DATE); final ParameterModel launchDateParam
= new DateParameter(LAUNCH_DATE);
com.arsdigita.bebop.form.Date launchDate com.arsdigita.bebop.form.Date launchDate
= new com.arsdigita.bebop.form.Date( = new com.arsdigita.bebop.form.Date(
launchDateParam); launchDateParam);
@ -213,6 +223,7 @@ public abstract class MultiPartArticleForm
* Utility method to initialise the name/title/summary widgets. * Utility method to initialise the name/title/summary widgets.
* *
* @param event * @param event
*
* @return * @return
*/ */
public MultiPartArticle initBasicWidgets(final FormSectionEvent event) { public MultiPartArticle initBasicWidgets(final FormSectionEvent event) {
@ -222,13 +233,22 @@ public abstract class MultiPartArticleForm
final MultiPartArticle article = (MultiPartArticle) itemSelectionModel final MultiPartArticle article = (MultiPartArticle) itemSelectionModel
.getSelectedObject(state); .getSelectedObject(state);
final String selectedLanguage = (String) state
.getValue(selectedLanguageParam);
final Locale selectedLocale;
if (selectedLanguage == null) {
selectedLocale = KernelConfig.getConfig().getDefaultLocale();
} else {
selectedLocale = new Locale(selectedLanguage);
}
if (article != null) { if (article != null) {
data.put(NAME, article.getName()); data.put(NAME, article.getName().getValue(selectedLocale));
data.put(TITLE, article.getTitle()); data.put(TITLE, article.getTitle().getValue(selectedLocale));
if (!CMSConfig.getConfig().isHideLaunchDate()) { if (!CMSConfig.getConfig().isHideLaunchDate()) {
data.put(LAUNCH_DATE, article.getLaunchDate()); data.put(LAUNCH_DATE, article.getLaunchDate());
} }
data.put(SUMMARY, article.getSummary()); data.put(SUMMARY, article.getSummary().getValue(selectedLocale));
} }
return article; return article;
@ -238,6 +258,7 @@ public abstract class MultiPartArticleForm
* Utility method to process the name/title/summary widgets. * Utility method to process the name/title/summary widgets.
* *
* @param event * @param event
*
* @return * @return
*/ */
public MultiPartArticle processBasicWidgets(final FormSectionEvent event) { public MultiPartArticle processBasicWidgets(final FormSectionEvent event) {
@ -248,16 +269,23 @@ public abstract class MultiPartArticleForm
.getSelectedObject(state); .getSelectedObject(state);
if (article != null) { if (article != null) {
final Locale defaultLocale = KernelConfig.getConfig(). final String selectedLanguage = (String) state
getDefaultLocale(); .getValue(selectedLanguageParam);
article.getName().addValue(defaultLocale, final Locale selectedLocale;
if (selectedLanguage == null) {
selectedLocale = KernelConfig.getConfig().getDefaultLocale();
} else {
selectedLocale = new Locale(selectedLanguage);
}
article.getName().addValue(selectedLocale,
(String) data.get(NAME)); (String) data.get(NAME));
article.getTitle().addValue(defaultLocale, article.getTitle().addValue(selectedLocale,
(String) data.get(TITLE)); (String) data.get(TITLE));
if (!CMSConfig.getConfig().isHideLaunchDate()) { if (!CMSConfig.getConfig().isHideLaunchDate()) {
article.setLaunchDate((Date) data.get(LAUNCH_DATE)); article.setLaunchDate((Date) data.get(LAUNCH_DATE));
} }
article.getSummary().addValue(defaultLocale, article.getSummary().addValue(selectedLocale,
(String) data.get(SUMMARY)); (String) data.get(SUMMARY));
} }
@ -304,6 +332,7 @@ public abstract class MultiPartArticleForm
* @param locale Initial locale of the article. * @param locale Initial locale of the article.
* *
* @return the new content item (or a proper subclass) * @return the new content item (or a proper subclass)
*
* @throws com.arsdigita.bebop.FormProcessException * @throws com.arsdigita.bebop.FormProcessException
*/ */
public MultiPartArticle createArticle(final PageState state, public MultiPartArticle createArticle(final PageState state,