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

View File

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

View File

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

View File

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