From 069bf78fb435f977bc93c960137f05e784ea2361 Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 5 Jul 2017 09:25:08 +0000 Subject: [PATCH] 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 --- .../contenttypes/ui/EventPropertyForm.java | 20 +++--- .../mparticle/MultiPartArticleCreateForm.java | 40 +++++++---- .../ui/mparticle/MultiPartArticleEdit.java | 16 ++--- .../mparticle/MultiPartArticleEditForm.java | 62 +++++++++++++---- .../ui/mparticle/MultiPartArticleForm.java | 67 +++++++++++++------ 5 files changed, 137 insertions(+), 68 deletions(-) diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/EventPropertyForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/EventPropertyForm.java index b58b602b1..f7fe41f6e 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/EventPropertyForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/EventPropertyForm.java @@ -522,7 +522,7 @@ public class EventPropertyForm .get(START_TIME); final java.util.Date endDate = (java.util.Date) data.get(END_DATE); final java.util.Date endTime = (java.util.Date) data.get(END_TIME); - + final Calendar startDateCal = Calendar.getInstance(); final Calendar startTimeCal = Calendar.getInstance(); final Calendar endDateCal = Calendar.getInstance(); @@ -531,34 +531,34 @@ public class EventPropertyForm startTimeCal.setTime(startTime); endDateCal.setTime(endDate); endTimeCal.setTime(endTime); - + final int startYear = startDateCal.get(Calendar.YEAR); final int startMonth = startDateCal.get(Calendar.MONTH); final int startDay = startDateCal.get(Calendar.DAY_OF_MONTH); final int startHour = startTimeCal.get(Calendar.HOUR_OF_DAY); final int startMinute = startTimeCal.get(Calendar.MINUTE); - + final int endYear = endDateCal.get(Calendar.YEAR); final int endMonth = endDateCal.get(Calendar.MONTH); final int endDay = endDateCal.get(Calendar.DAY_OF_MONTH); final int endHour = endTimeCal.get(Calendar.HOUR_OF_DAY); final int endMinute = endTimeCal.get(Calendar.MINUTE); - + final Calendar startDateTimeCal = Calendar.getInstance(); final Calendar endDateTimeCal = Calendar.getInstance(); - + startDateTimeCal.set(Calendar.YEAR, startYear); startDateTimeCal.set(Calendar.MONTH, startMonth); startDateTimeCal.set(Calendar.DAY_OF_MONTH, startDay); startDateTimeCal.set(Calendar.HOUR_OF_DAY, startHour); startDateTimeCal.set(Calendar.MINUTE, startMinute); - + endDateTimeCal.set(Calendar.YEAR, endYear); endDateTimeCal.set(Calendar.MONTH, endMonth); endDateTimeCal.set(Calendar.DAY_OF_MONTH, endDay); endDateTimeCal.set(Calendar.HOUR_OF_DAY, endHour); endDateTimeCal.set(Calendar.MINUTE, endMinute); - + final java.util.Date startDateTime = startDateTimeCal.getTime(); final java.util.Date endDateTime = endDateTimeCal.getTime(); @@ -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, diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleCreateForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleCreateForm.java index ae8c02336..cd03a7233 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleCreateForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleCreateForm.java @@ -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()); @@ -92,7 +99,7 @@ public class MultiPartArticleCreateForm * CreationComponent. * * @return the ApplyWorkflowFormSection associated with this - * CreationComponent. + * CreationComponent. */ @Override public ApplyWorkflowFormSection getWorkflowSection() { @@ -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); } + } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEdit.java b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEdit.java index ab2122688..7cd49a9a1 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEdit.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEdit.java @@ -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) { diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEditForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEditForm.java index a3b0b1bce..fdc365945 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEditForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleEditForm.java @@ -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 = controller.getArticleFolder(article); + if (folder.isPresent()) { + valid = validateNameUniqueness(folder.get(), event); + } else { + valid = true; + } } if (!valid) { diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleForm.java index 471cd4b2b..1c869bd70 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/contenttypes/ui/mparticle/MultiPartArticleForm.java @@ -1,4 +1,4 @@ - /* +/* * Copyright (C) 2017 LibreCCM Foundation. * * 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.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,9 +166,10 @@ 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( + = new com.arsdigita.bebop.form.Date( launchDateParam); if (CMSConfig.getConfig().isRequireLaunchDate()) { launchDate.addValidationListener(new NotNullValidationListener( @@ -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)); } @@ -268,8 +296,8 @@ public abstract class MultiPartArticleForm * Ensure that the name of an item is unique within a folder. * * @param folder the folder in which to check - * @param event the FormSectionEvent which was passed to the validation - * listener + * @param event the FormSectionEvent which was passed to the validation + * listener * * @return true if the name is not null and unique, false otherwise */ @@ -297,13 +325,14 @@ public abstract class MultiPartArticleForm * Utility method to create a new MultiPartArticle and update the selected * model. This can be called in the process method of a ProcessListener. * - * @param state the current page state + * @param state the current page state * @param name * @param section * @param folder - * @param locale Initial locale of the article. + * @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,