From b67ca2c7a47e9824a46995bb4c2f172b8528aea1 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 6 Jul 2017 09:52:43 +0000 Subject: [PATCH] CCM NG/ccm-cms: EditStep for editing the text of a news git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4847 8810af33-2d31-482b-a856-94f89814c4df Former-commit-id: a571525e62c12968bbd8f372f82edb172caec7b1 --- .../cms/ui/authoring/ArticleTextBody.java | 3 - .../cms/ui/authoring/NewsTextBody.java | 116 ++++++++++++++++++ .../java/org/librecms/contenttypes/News.java | 10 ++ 3 files changed, 126 insertions(+), 3 deletions(-) create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewsTextBody.java diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ArticleTextBody.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ArticleTextBody.java index 8202dcfdf..9f5361c1c 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ArticleTextBody.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/ArticleTextBody.java @@ -20,10 +20,8 @@ package com.arsdigita.cms.ui.authoring; import com.arsdigita.bebop.Component; import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.RequestLocal; import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.SingleSelect; -import com.arsdigita.bebop.parameters.LongParameter; import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.cms.ItemSelectionModel; @@ -33,7 +31,6 @@ import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; import com.arsdigita.kernel.KernelConfig; import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.l10n.LocalizedString; import org.librecms.contentsection.ContentItemRepository; import java.util.Locale; diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewsTextBody.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewsTextBody.java new file mode 100644 index 000000000..962e8d482 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/authoring/NewsTextBody.java @@ -0,0 +1,116 @@ +package com.arsdigita.cms.ui.authoring; + +import com.arsdigita.bebop.Component; +import com.arsdigita.bebop.PageState; +import com.arsdigita.bebop.form.Option; +import com.arsdigita.bebop.form.SingleSelect; +import com.arsdigita.bebop.parameters.StringParameter; +import com.arsdigita.cms.ItemSelectionModel; +import com.arsdigita.cms.ui.workflow.WorkflowLockedComponentAccess; +import com.arsdigita.kernel.KernelConfig; + +import org.libreccm.cdi.utils.CdiUtil; +import org.librecms.contentsection.ContentItemRepository; +import org.librecms.contenttypes.News; + +import java.util.Locale; + +import static com.arsdigita.cms.ui.authoring.TextBody.*; + +/** + * + * @author Jens Pelzetter + */ +public class NewsTextBody extends TextBody { + + private final ItemSelectionModel itemSelectionModel; + private final StringParameter selectedLanguageParam; + + public NewsTextBody(final ItemSelectionModel itemSelectionModel, + final AuthoringKitWizard authoringKitWizard, + final StringParameter selectedLanguageParam) { + + super(itemSelectionModel, selectedLanguageParam); + + this.itemSelectionModel = itemSelectionModel; + this.selectedLanguageParam = selectedLanguageParam; + + // Rest the component when it is hidden + authoringKitWizard + .getList() + .addActionListener(event -> reset(event.getPageState())); + + // Set the right component access on the forms + final Component uploadComponent = getComponent(FILE_UPLOAD); + if (uploadComponent != null) { + setComponentAccess(FILE_UPLOAD, + new WorkflowLockedComponentAccess( + uploadComponent, itemSelectionModel)); + } + final Component textEntryComponent = getComponent(TEXT_ENTRY); + setComponentAccess(TEXT_ENTRY, + new WorkflowLockedComponentAccess( + textEntryComponent, itemSelectionModel)); + + } + + /** + * Adds the options for the mime type select widget of + * GenericArticleForm and sets the default mime type. + * + * @param mimeSelect + */ + @Override + protected void setMimeTypeOptions(final SingleSelect mimeSelect) { + mimeSelect.addOption(new Option("text/html", "HTML Text")); + mimeSelect.setOptionSelected("text/html"); + } + + protected News getSelectedNews(final PageState state) { + + return (News) itemSelectionModel.getSelectedItem(state); + } + + @Override + protected String getTextPropertyName() { + return "text"; + } + + @Override + public String getText(final PageState state) { + + final News news = getSelectedNews(state); + + final String selectedLanguage = (String) state + .getValue(selectedLanguageParam); + final Locale selectedLocale; + if (selectedLanguage == null) { + selectedLocale = KernelConfig.getConfig().getDefaultLocale(); + } else { + selectedLocale = new Locale(selectedLanguage); + } + + return news.getText().getValue(selectedLocale); + } + + @Override + protected void updateText(final PageState state, final String text) { + + final News news = getSelectedNews(state); + final String selectedLanguage = (String) state.getValue( + selectedLanguageParam); + final Locale selectedLocale; + if (selectedLanguage == null) { + selectedLocale = KernelConfig.getConfig().getDefaultLocale(); + } else { + selectedLocale = new Locale(selectedLanguage); + } + + news.getText().addValue(selectedLocale, text); + final ContentItemRepository itemRepo = CdiUtil + .createCdiUtil() + .findBean(ContentItemRepository.class); + itemRepo.save(news); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/contenttypes/News.java b/ccm-cms/src/main/java/org/librecms/contenttypes/News.java index f5fb3972f..5aba581a9 100644 --- a/ccm-cms/src/main/java/org/librecms/contenttypes/News.java +++ b/ccm-cms/src/main/java/org/librecms/contenttypes/News.java @@ -19,6 +19,7 @@ package org.librecms.contenttypes; import com.arsdigita.cms.contenttypes.ui.NewsPropertiesStep; +import com.arsdigita.cms.ui.authoring.NewsTextBody; import com.arsdigita.cms.ui.contenttypes.NewsCreateForm; import org.hibernate.envers.Audited; @@ -62,6 +63,15 @@ import static org.librecms.CmsConstants.*; descriptionKey = "cms.contenttypes.shared.basic_properties" + ".description", order = 1) + , + @AuthoringStep( + component = NewsTextBody.class, + labelBundle = "org.librecms.CmsResources", + labelKey = "cms.contenttypes.shared.body_text.title", + descriptionBundle = "org.librecms.CmsResources", + descriptionKey = "cms.contenttypes.shared.body_text.description", + order = 2 + ) }) public class News extends ContentItem implements Serializable {