From 4feb3c9ca2bc8485839948827411208e08933cae Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 25 Jul 2019 13:03:00 +0000 Subject: [PATCH] CCM NG: Refactorin of asset forms git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@6152 8810af33-2d31-482b-a856-94f89814c4df Former-commit-id: 4de5725f7c7488b457f3628643da57039f62ae44 --- .../cms/ui/assets/forms/AudioForm.java | 5 - .../assets/forms/ExternalAudioAssetForm.java | 89 +++++---------- .../assets/forms/ExternalVideoAssetForm.java | 91 ++++----------- .../ExternalVideoAssetFormController.java | 88 +++++++++++++++ .../cms/ui/assets/forms/FileAssetForm.java | 14 +-- .../assets/forms/FileAssetFormController.java | 41 +++++++ .../cms/ui/assets/forms/ImageForm.java | 103 +++++------------ .../ui/assets/forms/ImageFormController.java | 100 +++++++++++++++++ .../ui/assets/forms/LegalMetadataForm.java | 97 +++++----------- .../forms/LegalMetadataFormController.java | 99 +++++++++++++++++ .../cms/ui/assets/forms/OrganizationForm.java | 48 +++----- .../forms/OrganizationFormController.java | 70 ++++++++++++ .../cms/ui/assets/forms/SideNoteForm.java | 91 +++------------ .../assets/forms/SideNoteFormController.java | 72 ++++++++++++ .../cms/ui/assets/forms/VideoForm.java | 103 ++++++----------- .../ui/assets/forms/VideoFormController.java | 104 ++++++++++++++++++ 16 files changed, 752 insertions(+), 463 deletions(-) create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetFormController.java create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetFormController.java create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageFormController.java create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataFormController.java create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationFormController.java create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteFormController.java create mode 100644 ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoFormController.java diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/AudioForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/AudioForm.java index 403cd9da9..67288af40 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/AudioForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/AudioForm.java @@ -18,20 +18,15 @@ */ package com.arsdigita.cms.ui.assets.forms; -import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.Label; import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.cms.ui.assets.AssetPane; import com.arsdigita.cms.ui.assets.AssetSearchWidget; import com.arsdigita.globalization.GlobalizedMessage; -import org.libreccm.cdi.utils.CdiUtil; import org.librecms.CmsConstants; import org.librecms.assets.AudioAsset; import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; -import org.librecms.contentsection.AssetRepository; import java.util.Map; diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalAudioAssetForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalAudioAssetForm.java index a90806853..25f931406 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalAudioAssetForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalAudioAssetForm.java @@ -18,6 +18,7 @@ */ package com.arsdigita.cms.ui.assets.forms; +import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.Label; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.event.FormSectionEvent; @@ -25,23 +26,19 @@ import com.arsdigita.cms.ui.assets.AssetPane; import com.arsdigita.cms.ui.assets.AssetSearchWidget; import com.arsdigita.globalization.GlobalizedMessage; -import org.libreccm.cdi.utils.CdiUtil; import org.librecms.CmsConstants; -import org.librecms.assets.Bookmark; import org.librecms.assets.ExternalAudioAsset; import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; -import org.librecms.contentsection.AssetRepository; -import java.util.Objects; -import java.util.Optional; +import java.util.HashMap; +import java.util.Map; /** * * @author Jens Pelzetter * @author Yannick Bülter */ -public class ExternalAudioAssetForm +public class ExternalAudioAssetForm extends AbstractBookmarkForm { private AssetSearchWidget assetSearchWidget; @@ -64,17 +61,21 @@ public class ExternalAudioAssetForm @Override protected void initForm(final PageState state, - final Optional selectedAsset) { - super.initForm(state, selectedAsset); + final Map data) { - if (selectedAsset.isPresent()) { - final ExternalAudioAsset externalAudioAsset - = (ExternalAudioAsset) selectedAsset.get(); + super.initForm(state, data); - final LegalMetadata legalMetadata = externalAudioAsset - .getLegalMetadata(); - if (legalMetadata != null) { - assetSearchWidget.setValue(state, legalMetadata.getObjectId()); + final Long selectedAssetId = getSelectedAssetId(state); + + if (selectedAssetId != null) { + + if (data.containsKey( + ExternalAudioAssetFormController.LEGAL_METADATA_ID)) { + + final long legalMetadataId = (long) data + .get(ExternalAudioAssetFormController.LEGAL_METADATA_ID); + + assetSearchWidget.setValue(state, legalMetadataId); } } } @@ -84,60 +85,20 @@ public class ExternalAudioAssetForm return ExternalAudioAsset.class; } -// @Override -// protected Asset createAsset(final FormSectionEvent event) -// throws FormProcessException { -// -// Objects.requireNonNull(event); -// -// final PageState state = event.getPageState(); -// -// final ExternalAudioAsset externalAudioAsset = new ExternalAudioAsset(); -// -// updateData((Bookmark) externalAudioAsset, state); -// updateData(externalAudioAsset, state); -// -// return externalAudioAsset; -// } - protected void updateData(final ExternalAudioAsset externalAudioAsset, - final PageState state) { - - final Long legalMetadataId = (Long) assetSearchWidget.getValue(state); - if (legalMetadataId != null) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final AssetRepository assetRepo = cdiUtil.findBean( - AssetRepository.class); - final LegalMetadata legalMetadata = (LegalMetadata) assetRepo - .findById(legalMetadataId) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No LegalMetadata asset with ID %d in the database.", - legalMetadataId))); - - externalAudioAsset.setLegalMetadata(legalMetadata); - } - } - @Override - protected void updateAsset(final Asset asset, - final FormSectionEvent event) { - - Objects.requireNonNull(asset); - Objects.requireNonNull(event); + protected Map collectData(final FormSectionEvent event) + throws FormProcessException { final PageState state = event.getPageState(); - if (!(asset instanceof ExternalAudioAsset)) { - throw new IllegalArgumentException(String.format( - "Provided asset is not an instance of class (or sub class of) " - + "'%s' but is an instance of class '%s'", - ExternalAudioAsset.class.getName(), - asset.getClass().getName())); + final Map data = new HashMap<>(); + if (assetSearchWidget.getValue(state) != null) { + + data.put(ExternalAudioAssetFormController.LEGAL_METADATA_ID, + assetSearchWidget.getValue(state)); } - final ExternalAudioAsset ExternalAudioAsset = (ExternalAudioAsset) asset; - - updateData((Bookmark) ExternalAudioAsset, state); - updateData(ExternalAudioAsset, state); + return data; } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetForm.java index 8b5f3d26e..d0760b9ad 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetForm.java @@ -18,6 +18,7 @@ */ package com.arsdigita.cms.ui.assets.forms; +import com.arsdigita.bebop.FormProcessException; import com.arsdigita.bebop.Label; import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.event.FormSectionEvent; @@ -25,23 +26,19 @@ import com.arsdigita.cms.ui.assets.AssetPane; import com.arsdigita.cms.ui.assets.AssetSearchWidget; import com.arsdigita.globalization.GlobalizedMessage; -import org.libreccm.cdi.utils.CdiUtil; import org.librecms.CmsConstants; -import org.librecms.assets.Bookmark; - -import java.util.Objects; -import java.util.Optional; import org.librecms.assets.ExternalVideoAsset; import org.librecms.assets.LegalMetadata; -import org.librecms.contentsection.Asset; -import org.librecms.contentsection.AssetRepository; + +import java.util.HashMap; +import java.util.Map; /** * * @author Jens Pelzetter */ -public class ExternalVideoAssetForm +public class ExternalVideoAssetForm extends AbstractBookmarkForm { private AssetSearchWidget assetSearchWidget; @@ -64,18 +61,18 @@ public class ExternalVideoAssetForm @Override protected void initForm(final PageState state, - final Optional selectedAsset) { - super.initForm(state, selectedAsset); + final Map data) { - if (selectedAsset.isPresent()) { - final ExternalVideoAsset externalVideoAsset - = (ExternalVideoAsset) selectedAsset - .get(); + super.initForm(state, data); - final LegalMetadata legalMetadata = externalVideoAsset - .getLegalMetadata(); - if (legalMetadata != null) { - assetSearchWidget.setValue(state, legalMetadata.getObjectId()); + final Long selectedAssetId = getSelectedAssetId(state); + if (selectedAssetId != null) { + + if (data.containsKey( + ExternalVideoAssetFormController.LEGAL_METADATA_ID)) { + assetSearchWidget.setValue( + state, + data.get(ExternalVideoAssetFormController.LEGAL_METADATA_ID)); } } } @@ -84,62 +81,20 @@ public class ExternalVideoAssetForm protected Class getAssetClass() { return ExternalVideoAsset.class; } - -// @Override -// protected Asset createAsset(final FormSectionEvent event) -// throws FormProcessException { -// -// Objects.requireNonNull(event); -// -// final PageState state = event.getPageState(); -// -// final ExternalVideoAsset externalVideoAsset = new ExternalVideoAsset(); -// -// updateData((Bookmark) externalVideoAsset, state); -// updateData(externalVideoAsset, state); -// -// return externalVideoAsset; -// } - - protected void updateData(final ExternalVideoAsset externalVideoAsset, - final PageState state) { - - final Long legalMetadataId = (Long) assetSearchWidget.getValue(state); - if (legalMetadataId != null) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final AssetRepository assetRepo = cdiUtil.findBean( - AssetRepository.class); - final LegalMetadata legalMetadata = (LegalMetadata) assetRepo - .findById(legalMetadataId) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No LegalMetadata asset with ID %d in the database.", - legalMetadataId))); - - externalVideoAsset.setLegalMetadata(legalMetadata); - } - } @Override - protected void updateAsset(final Asset asset, - final FormSectionEvent event) { - - Objects.requireNonNull(asset); - Objects.requireNonNull(event); + protected Map collectData(final FormSectionEvent event) + throws FormProcessException { + final Map data = new HashMap<>(); final PageState state = event.getPageState(); - - if (!(asset instanceof ExternalVideoAsset)) { - throw new IllegalArgumentException(String.format( - "Provided asset is not an instance of class (or sub class of) " - + "'%s' but is an instance of class '%s'", - ExternalVideoAsset.class.getName(), - asset.getClass().getName())); + + if (assetSearchWidget.getValue(state) != null) { + data.put(ExternalAudioAssetFormController.LEGAL_METADATA_ID, + assetSearchWidget.getValue(state)); } - final ExternalVideoAsset externalVideoAsset = (ExternalVideoAsset) asset; - - updateData((Bookmark) externalVideoAsset, state); - updateData(externalVideoAsset, state); + return data; } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetFormController.java new file mode 100644 index 000000000..adaaf1654 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ExternalVideoAssetFormController.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2019 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets.forms; + +import com.arsdigita.cms.ui.assets.IsControllerForAssetType; + +import org.librecms.assets.ExternalVideoAsset; +import org.librecms.assets.LegalMetadata; +import org.librecms.contentsection.AssetRepository; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.transaction.Transactional; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@IsControllerForAssetType(ExternalVideoAsset.class) +public class ExternalVideoAssetFormController + extends AbstractBookmarkFormController { + + protected static final String LEGAL_METADATA_ID = "legalMetadataId"; + + @Inject + private AssetRepository assetRepository; + + @Override + public ExternalVideoAsset createAsset() { + return new ExternalVideoAsset(); + } + + @Transactional(Transactional.TxType.REQUIRED) + @Override + protected Map getAssetData(final ExternalVideoAsset asset, + final Locale selectedLocale) { + + final Map data = super.getAssetData(asset, + selectedLocale); + if (asset.getLegalMetadata() != null) { + + data.put(LEGAL_METADATA_ID, asset.getLegalMetadata().getObjectId()); + } + + return data; + } + + @Override + public void updateAssetProperties(final ExternalVideoAsset asset, + final Locale selectedLocale, + final Map data) { + + super.updateAssetProperties(asset, selectedLocale, data); + + if (data.containsKey(LEGAL_METADATA_ID)) { + + final long legalMetadataId = (long) data.get(LEGAL_METADATA_ID); + + final LegalMetadata legalMetadata = assetRepository + .findById(legalMetadataId, LegalMetadata.class) + .orElseThrow(() -> new IllegalArgumentException(String.format( + "No LegalMetadata with ID %d found.", legalMetadataId))); + + asset.setLegalMetadata(legalMetadata); + } + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetForm.java index a71a7317f..bc01566bb 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetForm.java @@ -18,9 +18,8 @@ */ package com.arsdigita.cms.ui.assets.forms; -import com.arsdigita.bebop.PageState; import com.arsdigita.cms.ui.assets.AssetPane; -import org.librecms.assets.BinaryAsset; + import org.librecms.assets.FileAsset; /** @@ -32,17 +31,10 @@ public class FileAssetForm extends AbstractBinaryAssetForm { public FileAssetForm(final AssetPane assetPane) { super(assetPane); } - + @Override protected Class getAssetClass() { return FileAsset.class; } - -// @Override -// protected BinaryAsset createBinaryAsset(final PageState state) { -// return new FileAsset(); -// } - - - + } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetFormController.java new file mode 100644 index 000000000..131086bde --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/FileAssetFormController.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2019 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets.forms; + +import com.arsdigita.cms.ui.assets.IsControllerForAssetType; + +import org.librecms.assets.FileAsset; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@IsControllerForAssetType(FileAsset.class) +public class FileAssetFormController extends AbstractBinaryAssetFormController { + + @Override + public FileAsset createAsset() { + + return new FileAsset(); + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageForm.java index 490b40171..2ff95c29f 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageForm.java @@ -29,13 +29,12 @@ import com.arsdigita.globalization.GlobalizedMessage; import org.libreccm.cdi.utils.CdiUtil; import org.librecms.CmsConstants; -import org.librecms.assets.BinaryAsset; import org.librecms.assets.Image; import org.librecms.assets.LegalMetadata; import org.librecms.contentsection.Asset; import org.librecms.contentsection.AssetRepository; -import java.util.Optional; +import java.util.Map; /** * @@ -83,24 +82,27 @@ public class ImageForm extends AbstractBinaryAssetForm { @Override protected void initForm(final PageState state, - final Optional selectedAsset) { + final Map data) { - super.initForm(state, selectedAsset); + super.initForm(state, data); - if (selectedAsset.isPresent()) { + if (getSelectedAssetId(state) != null) { - final Image image = selectedAsset.get(); + if (data.containsKey(ImageFormController.WIDTH)) { + final long widthValue = (long) data + .get(ImageFormController.WIDTH); + width.setValue(state, Long.toString(widthValue)); + } + if (data.containsKey(ImageFormController.HEIGHT)) { + final long heightValue = (long) data + .get(ImageFormController.HEIGHT); + height.setValue(state, Long.toString(heightValue)); + } - width.setValue(state, - Long.toString(image.getWidth())); - height.setValue(state, - Long.toString(image.getHeight())); - final LegalMetadata legalMetadata = image - .getLegalMetadata(); - if (legalMetadata == null) { - assetSearchWidget.setValue(state, null); - } else { - assetSearchWidget.setValue(state, legalMetadata.getObjectId()); + if (data.containsKey(ImageFormController.LEGAL_METADATA_ID)) { + assetSearchWidget + .setValue(state, + data.get(ImageFormController.LEGAL_METADATA_ID)); } } } @@ -110,75 +112,22 @@ public class ImageForm extends AbstractBinaryAssetForm { return Image.class; } -// @Override -// protected Asset createAsset(final FormSectionEvent event) -// throws FormProcessException { -// -// final Image image = (Image) super.createAsset(event); -// -// final PageState state = event.getPageState(); -// -// image.setDisplayName(getTitleValue(state) -// .toLowerCase() -// .replace(" ", "-")); -// -// if (height.getValue(state) != null) { -// image.setHeight(Long.parseLong((String) height.getValue(state))); -// } -// if (width.getValue(state) != null) { -// image.setWidth(Long.parseLong((String) width.getValue(state))); -// } -// updateData(image, state); -// -// return image; -// } @Override - protected void updateAsset(final Asset asset, - final FormSectionEvent event) + protected Map collectData(final FormSectionEvent event) throws FormProcessException { - super.updateAsset(asset, event); - + final Map data = super.collectData(event); final PageState state = event.getPageState(); - final Image image = (Image) asset; + data.put(ImageFormController.WIDTH, width.getValue(state)); + data.put(ImageFormController.HEIGHT, height.getValue(state)); - if (height.getValue(state) == null - || ((String) height.getValue(state)).trim().isEmpty()) { - image.setHeight(-1); - } else { - image.setHeight(Long.parseLong((String) height.getValue(state))); - } - if (width.getValue(state) == null - || ((String) width.getValue(state)).trim().isEmpty()) { - image.setWidth(-1); - } else { - image.setWidth(Long.parseLong((String) width.getValue(state))); + if (assetSearchWidget.getValue(state) != null) { + data.put(ImageFormController.LEGAL_METADATA_ID, + assetSearchWidget.getValue(state)); } - updateData(image, state); + return data; } - protected void updateData(final Image image, - final PageState state) { - - final Long legalMetadataId = (Long) assetSearchWidget.getValue(state); - if (legalMetadataId != null) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final AssetRepository assetRepo = cdiUtil.findBean( - AssetRepository.class); - final LegalMetadata legalMetadata = (LegalMetadata) assetRepo - .findById(legalMetadataId) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No LegalMetadata asset with ID %d in the database.", - legalMetadataId))); - - image.setLegalMetadata(legalMetadata); - } - } - -// @Override -// protected BinaryAsset createBinaryAsset(final PageState state) { -// return new Image(); -// } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageFormController.java new file mode 100644 index 000000000..0a66e5b1f --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/ImageFormController.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2019 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets.forms; + +import com.arsdigita.cms.ui.assets.IsControllerForAssetType; + +import org.librecms.assets.Image; +import org.librecms.assets.LegalMetadata; +import org.librecms.contentsection.AssetRepository; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@IsControllerForAssetType(Image.class) +public class ImageFormController + extends AbstractBinaryAssetFormController { + + protected static final String LEGAL_METADATA_ID = "legalMetadataId"; + protected static final String HEIGHT = "height"; + protected static final String WIDTH = "width"; + + @Inject + private AssetRepository assetRepository; + + @Override + public Image createAsset() { + return new Image(); + } + + @Override + protected Map getAssetData(final Image asset, + final Locale selectedLocale) { + + final Map data = super.getAssetData(asset, + selectedLocale); + + data.put(WIDTH, asset.getWidth()); + data.put(HEIGHT, asset.getHeight()); + + if (asset.getLegalMetadata() != null) { + data.put(LEGAL_METADATA_ID, + asset.getLegalMetadata().getObjectId()); + } + + return data; + } + + @Override + public void updateAssetProperties(final Image asset, + final Locale selectedLocale, + final Map data) { + + super.updateAssetProperties(asset, selectedLocale, data); + + if (data.containsKey(WIDTH)) { + asset.setWidth((long) data.get(WIDTH)); + } + + if (data.containsKey(HEIGHT)) { + asset.setHeight((long) data.get(HEIGHT)); + } + + if (data.containsKey(LEGAL_METADATA_ID)) { + final long legalMetadataId = (long) data.get(LEGAL_METADATA_ID); + + final LegalMetadata legalMetadata = assetRepository + .findById(legalMetadataId, LegalMetadata.class) + .orElseThrow(() -> new IllegalArgumentException(String.format( + "No LegalMetadata with ID %d found.", legalMetadataId))); + + asset.setLegalMetadata(legalMetadata); + } + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java index 2795282a6..4f6d4762d 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataForm.java @@ -32,6 +32,8 @@ import org.librecms.CmsConstants; import org.librecms.assets.LegalMetadata; import org.librecms.contentsection.Asset; +import java.util.HashMap; +import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -84,47 +86,36 @@ public class LegalMetadataForm extends AbstractAssetForm { @Override protected void initForm(final PageState state, - final Optional selectedAsset) { + final Map data) { - if (selectedAsset.isPresent()) { + if (getSelectedAssetId(state) != null) { - if (!(selectedAsset.get() instanceof LegalMetadata)) { - throw new IllegalArgumentException(String.format( - "The provided asset must be an instanceof of class '%s' or " - + "an subclass but is an instanceof of class '%s'.", - LegalMetadata.class.getName(), - selectedAsset.get().getClass().getName())); - } - - final LegalMetadata legalMetadata = selectedAsset.get(); - - rightsHolder.setValue(state, legalMetadata.getRightsHolder()); + rightsHolder.setValue( + state, + data.get(LegalMetadataFormController.RIGHTS_HOLDER)); rights.setValue(state, - legalMetadata - .getRights() - .getValue(getSelectedLocale(state))); - publisher.setValue(state, legalMetadata.getPublisher()); - creator.setValue(state, legalMetadata.getCreator()); + data.get(LegalMetadataFormController.RIGHTS)); + publisher.setValue(state, + data.get(LegalMetadataFormController.PUBLISHER)); + creator.setValue(state, + data.get(LegalMetadataFormController.CREATOR)); } } @Override protected void showLocale(final PageState state) { - final Optional selectedAsset = getSelectedAsset(state); + final Long selectedAssetId = getSelectedAssetId(state); - if (selectedAsset.isPresent()) { - if (!(getSelectedAsset(state).get() instanceof LegalMetadata)) { - throw new IllegalArgumentException( - "Selected asset is not a legal metadata"); - } + if (selectedAssetId != null) { - final LegalMetadata legalMetadata = selectedAsset.get(); + final Map data = getController() + .getAssetData(selectedAssetId, + LegalMetadata.class, + getSelectedLocale(state)); rights.setValue(state, - legalMetadata - .getRights() - .getValue(getSelectedLocale(state))); + data.get(LegalMetadataFormController.RIGHTS)); } } @@ -133,51 +124,21 @@ public class LegalMetadataForm extends AbstractAssetForm { return LegalMetadata.class; } -// @Override -// protected Asset createAsset(final FormSectionEvent event) -// throws FormProcessException { -// -// Objects.requireNonNull(event); -// -// final PageState state = event.getPageState(); -// -// final LegalMetadata legalMetadata = new LegalMetadata(); -// -// legalMetadata.setRightsHolder((String) rightsHolder.getValue(state)); -// legalMetadata.getRights().addValue(getSelectedLocale(state), -// (String) rights.getValue(state)); -// -// legalMetadata.setPublisher((String) publisher.getValue(state)); -// legalMetadata.setCreator((String) creator.getValue(state)); -// -// return legalMetadata; -// } @Override - protected void updateAsset(final Asset asset, - final FormSectionEvent event) + protected Map collectData(final FormSectionEvent event) throws FormProcessException { - Objects.requireNonNull(asset); - Objects.requireNonNull(event); - final PageState state = event.getPageState(); + final Map data = new HashMap<>(); - if (!(asset instanceof LegalMetadata)) { - throw new IllegalArgumentException(String.format( - "Provided asset is not an instance of '%s' (or a sub class) " - + "but is an instance of class '%s'.", - LegalMetadata.class.getName(), - asset.getClass().getName())); - } + data.put(LegalMetadataFormController.CREATOR, creator.getValue(state)); + data.put(LegalMetadataFormController.PUBLISHER, + publisher.getValue(state)); + data.put(LegalMetadataFormController.RIGHTS, + rights.getValue(state)); + data.put(LegalMetadataFormController.RIGHTS_HOLDER, + rightsHolder.getValue(state)); - final LegalMetadata legalMetadata = (LegalMetadata) asset; - - legalMetadata.setRightsHolder((String) rightsHolder.getValue(state)); - legalMetadata.getRights().addValue(getSelectedLocale(state), - (String) rights.getValue(state)); - - legalMetadata.setPublisher((String) publisher.getValue(state)); - legalMetadata.setCreator((String) creator.getValue(state)); + return data; } - } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataFormController.java new file mode 100644 index 000000000..d98278b47 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/LegalMetadataFormController.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2019 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets.forms; + +import com.arsdigita.cms.ui.assets.AbstractAssetFormController; +import com.arsdigita.cms.ui.assets.IsControllerForAssetType; + +import org.librecms.assets.LegalMetadata; + +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@IsControllerForAssetType(LegalMetadata.class) +public class LegalMetadataFormController + extends AbstractAssetFormController { + + protected static final String CONTRIBUTORS = "contributors"; + protected static final String CREATOR = "creator"; + protected static final String PUBLISHER = "publisher"; + protected static final String RIGHTS = "rights"; + protected static final String RIGHTS_HOLDER = "rightsHolder"; + + @Override + protected Map getAssetData(final LegalMetadata asset, + final Locale selectedLocale) { + + final Map data = new HashMap<>(); + + data.put(RIGHTS_HOLDER, asset.getRightsHolder()); + data.put(RIGHTS, asset.getRights().getValue(selectedLocale)); + data.put(PUBLISHER, asset.getPublisher()); + data.put(CREATOR, asset.getCreator()); + data.put(CONTRIBUTORS, asset.getContributors()); + + return data; + } + + @Override + public void updateAssetProperties(final LegalMetadata asset, + final Locale selectedLocale, + final Map data) { + + if (data.containsKey(RIGHTS_HOLDER)) { + asset.setRightsHolder((String) data.get(RIGHTS_HOLDER)); + } + + if (data.containsKey(RIGHTS)) { + asset.getRights().addValue(selectedLocale, + (String) data.get(RIGHTS)); + } + + if (data.containsKey(PUBLISHER)) { + asset.setPublisher((String) data.get(PUBLISHER)); + } + + if (data.containsKey(CREATOR)) { + asset.setCreator((String) data.get(CREATOR)); + } + + if (data.containsKey(CONTRIBUTORS)) { + @SuppressWarnings("unchecked") + final List contributors = (List) data + .get(CONTRIBUTORS); + asset.setContributors(contributors); + } + } + + @Override + public LegalMetadata createAsset() { + return new LegalMetadata(); + } + +} + \ No newline at end of file diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationForm.java index b99438ff9..fb6248a5f 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationForm.java @@ -28,10 +28,9 @@ import com.arsdigita.globalization.GlobalizedMessage; import org.librecms.CmsConstants; import org.librecms.assets.Organization; -import org.librecms.contentsection.Asset; -import java.util.Objects; -import java.util.Optional; +import java.util.HashMap; +import java.util.Map; /** * @@ -47,20 +46,19 @@ public class OrganizationForm extends AbstractContactableEntityForm selected = getSelectedAsset(state); - - if (selected.isPresent()) { - - organizationName.setValue(state, selected.get().getName()); + public void initForm(final PageState state, + final Map data) { + + super.initForm(state, data); + + if (getSelectedAssetId(state) != null) { + + organizationName.setValue( + state, + data.get(OrganizationFormController.ORGANIZATION_NAME)); } } - + @Override protected void addPropertyWidgets() { @@ -84,26 +82,16 @@ public class OrganizationForm extends AbstractContactableEntityForm collectData(final FormSectionEvent event) throws FormProcessException { - Objects.requireNonNull(asset); - Objects.requireNonNull(event); - final PageState state = event.getPageState(); - if (!(asset instanceof Organization)) { - throw new IllegalArgumentException(String.format( - "The provided asset is not an instance of \"%s\" " - + "or a subclass,but of %s.", - Organization.class.getName(), - asset.getClass().getName())); - } + final Map data = new HashMap<>(); + data.put(OrganizationFormController.ORGANIZATION_NAME, + organizationName.getValue(state)); - final Organization organization = (Organization) asset; - - organization.setName((String) organizationName.getValue(state)); + return data; } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationFormController.java new file mode 100644 index 000000000..a40cba1e1 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/OrganizationFormController.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2019 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets.forms; + +import com.arsdigita.cms.ui.assets.IsControllerForAssetType; + +import org.librecms.assets.Organization; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@IsControllerForAssetType(Organization.class) +public class OrganizationFormController + extends AbstractContactableEntityFormController { + + protected static final String ORGANIZATION_NAME = "organizationName"; + + @Override + protected Map getAssetData(final Organization asset, + final Locale selectedLocale) { + + final Map data = super.getAssetData(asset, + selectedLocale); + data.put(ORGANIZATION_NAME, asset.getName()); + + return data; + } + + @Override + public void updateAssetProperties(final Organization asset, + final Locale selectedLocale, + final Map data) { + + super.updateAssetProperties(asset, selectedLocale, data); + + if (data.containsKey(ORGANIZATION_NAME)) { + final String organizationName = (String) data.get(ORGANIZATION_NAME); + asset.setName(organizationName); + } + } + + @Override + public Organization createAsset() { + return new Organization(); + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteForm.java index 7887aa3ed..d24416cf9 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteForm.java @@ -27,12 +27,11 @@ import com.arsdigita.cms.ui.assets.AbstractAssetForm; import com.arsdigita.cms.ui.assets.AssetPane; import com.arsdigita.globalization.GlobalizedMessage; -import java.util.Objects; -import java.util.Optional; - import org.librecms.CmsConstants; import org.librecms.assets.SideNote; -import org.librecms.contentsection.Asset; + +import java.util.HashMap; +import java.util.Map; /** * @@ -57,23 +56,11 @@ public class SideNoteForm extends AbstractAssetForm { @Override protected void initForm(final PageState state, - final Optional selectedAsset) { + final Map data) { - if (selectedAsset.isPresent()) { - if (!(selectedAsset.get() instanceof SideNote)) { - throw new IllegalArgumentException(String.format( - "The provided asset must be an instance of '%s' or" - + "an subclass but is an instance of '%s'", - SideNote.class.getName(), - selectedAsset.get().getClass().getName())); - } + if (getSelectedAssetId(state) != null) { - final SideNote sideNote = selectedAsset.get(); - - text.setValue(state, - sideNote - .getText() - .getValue(getSelectedLocale(state))); + text.setValue(state, data.get(SideNoteFormController.TEXT)); } } @@ -81,23 +68,15 @@ public class SideNoteForm extends AbstractAssetForm { @Override protected void showLocale(final PageState state) { - final Optional selectedAsset = getSelectedAsset(state); + if (getSelectedAssetId(state) != null) { - if (selectedAsset.isPresent()) { - if (!(selectedAsset.get() instanceof SideNote)) { - throw new IllegalArgumentException(String.format( - "The provided asset must be an instance of '%s' or" - + "an subclass but is an instance of '%s'", - SideNote.class.getName(), - selectedAsset.get().getClass().getName())); - } + final Long selectedAssetId = getSelectedAssetId(state); + final Map data = getController() + .getAssetData(selectedAssetId, + SideNote.class, + getSelectedLocale(state)); - final SideNote sideNote =selectedAsset.get(); - - text.setValue(state, - sideNote - .getText() - .getValue(getSelectedLocale(state))); + text.setValue(state, data.get(SideNoteFormController.TEXT)); } } @@ -106,50 +85,16 @@ public class SideNoteForm extends AbstractAssetForm { return SideNote.class; } - - -// @Override -// protected Asset createAsset(final FormSectionEvent event) throws -// FormProcessException { -// -// Objects.requireNonNull(event); -// -// final PageState state = event.getPageState(); -// -// final SideNote sideNote = new SideNote(); -// -// sideNote -// .getText() -// .addValue(getSelectedLocale(state), -// (String) text.getValue(state)); -// -// return sideNote; -// } - @Override - protected void updateAsset(final Asset asset, - final FormSectionEvent event) - throws FormProcessException { + protected Map collectData(final FormSectionEvent event) + throws FormProcessException { - Objects.requireNonNull(asset); - Objects.requireNonNull(event); - + final Map data = new HashMap<>(); final PageState state = event.getPageState(); - if (!(asset instanceof SideNote)) { - throw new IllegalArgumentException(String.format( - "The provided asset must be an instance of '%s' or" - + "an subclass but is an instance of '%s'", - SideNote.class.getName(), - asset.getClass().getName())); - } + data.put(SideNoteFormController.TEXT, text.getValue(state)); - final SideNote sideNote = (SideNote) asset; - - sideNote - .getText() - .addValue(getSelectedLocale(state), - (String) text.getValue(state)); + return data; } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteFormController.java new file mode 100644 index 000000000..648087c23 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/SideNoteFormController.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2019 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets.forms; + +import com.arsdigita.cms.ui.assets.AbstractAssetFormController; +import com.arsdigita.cms.ui.assets.IsControllerForAssetType; + +import org.librecms.assets.SideNote; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@IsControllerForAssetType(SideNote.class) +public class SideNoteFormController + extends AbstractAssetFormController { + + protected static final String TEXT = "text"; + + @Override + protected Map getAssetData(final SideNote asset, + final Locale selectedLocale) { + + final Map data = new HashMap<>(); + + data.put(TEXT, asset.getText().getValue(selectedLocale)); + + return data; + } + + @Override + public void updateAssetProperties(final SideNote asset, + final Locale selectedLocale, + final Map data) { + + if (data.containsKey(TEXT)) { + + final String value = (String) data.get(TEXT); + asset.getText().addValue(selectedLocale, value); + } + + } + + @Override + public SideNote createAsset() { + return new SideNote(); + } + +} diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoForm.java index 7131d6c7e..daf93a7a1 100644 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoForm.java @@ -34,13 +34,13 @@ import org.librecms.assets.LegalMetadata; import org.librecms.contentsection.Asset; import org.librecms.contentsection.AssetRepository; -import java.util.Optional; +import java.util.Map; /** * * @author Yannick Bülter * @author Jens Pelzetter - * + * */ public class VideoForm extends AbstractBinaryAssetForm { @@ -57,45 +57,49 @@ public class VideoForm extends AbstractBinaryAssetForm { width = new TextField("width-text"); height = new TextField("height-text"); - assetSearchWidget = new AssetSearchWidget("legal-metadata", LegalMetadata.class); + assetSearchWidget = new AssetSearchWidget("legal-metadata", + LegalMetadata.class); add(new Label(new GlobalizedMessage( - "cms.ui.assets.video.width.label", - CmsConstants.CMS_BUNDLE + "cms.ui.assets.video.width.label", + CmsConstants.CMS_BUNDLE ))); add(width); add(new Label(new GlobalizedMessage( - "cms.ui.assets.video.height.label", - CmsConstants.CMS_BUNDLE + "cms.ui.assets.video.height.label", + CmsConstants.CMS_BUNDLE ))); add(height); add(new Label(new GlobalizedMessage( - "cms.ui.assets.video.legal_metadata.label", - CmsConstants.CMS_BUNDLE + "cms.ui.assets.video.legal_metadata.label", + CmsConstants.CMS_BUNDLE ))); add(assetSearchWidget); } @Override - protected void initForm(final PageState state, - final Optional selectedAsset) { + protected void initForm(final PageState state, + final Map data) { - super.initForm(state, selectedAsset); + super.initForm(state, data); - if (selectedAsset.isPresent()) { + if (getSelectedAssetId(state) != null) { - final VideoAsset video = selectedAsset.get(); + final long widthValue = (long) data.get(VideoFormController.WIDTH); + final long heightValue = (long) data + .get(VideoFormController.HEIGHT); + + width.setValue(state, Long.toString(widthValue)); + height.setValue(state, Long.toString(heightValue)); + + if (data.containsKey(VideoFormController.LEGAL_METADATA_ID)) { + + assetSearchWidget.setValue( + state, + data.containsKey(VideoFormController.LEGAL_METADATA_ID)); - width.setValue(state, - Long.toString(video.getWidth())); - height.setValue(state, - Long.toString(video.getHeight())); - final LegalMetadata legalMetadata = video - .getLegalMetadata(); - if (legalMetadata != null) { - assetSearchWidget.setValue(state, legalMetadata.getObjectId()); } } } @@ -105,60 +109,25 @@ public class VideoForm extends AbstractBinaryAssetForm { return VideoAsset.class; } - - -// @Override -// protected Asset createAsset(final FormSectionEvent event) -// throws FormProcessException { -// -// final VideoAsset video = (VideoAsset) super.createAsset(event); -// -// final PageState state = event.getPageState(); -// -// video.setHeight(Long.parseLong((String) height.getValue(state))); -// video.setWidth(Long.parseLong((String) width.getValue(state))); -// updateData(video, state); -// -// return video; -// } - @Override - protected void updateAsset(final Asset asset, - final FormSectionEvent event) - throws FormProcessException { - - super.updateAsset(asset, event); + protected Map collectData(final FormSectionEvent event) + throws FormProcessException { final PageState state = event.getPageState(); - final VideoAsset video = (VideoAsset) asset; + final Map data = super.collectData(event); - video.setHeight(Long.parseLong((String) height.getValue(state))); - video.setWidth(Long.parseLong((String) width.getValue(state))); + data.put(VideoFormController.WIDTH, width.getValue(state)); + data.put(VideoFormController.HEIGHT, height.getValue(state)); - updateData(video, state); - } + if (assetSearchWidget.getValue(state) != null) { - protected void updateData(final VideoAsset video, - final PageState state) { + data.put(VideoFormController.LEGAL_METADATA_ID, + assetSearchWidget.getValue(state)); - final Long legalMetadataId = (Long) assetSearchWidget.getValue(state); - if (legalMetadataId != null) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final AssetRepository assetRepo = cdiUtil.findBean( - AssetRepository.class); - final LegalMetadata legalMetadata = (LegalMetadata) assetRepo - .findById(legalMetadataId) - .orElseThrow(() -> new IllegalArgumentException(String.format( - "No LegalMetadata asset with ID %d in the database.", - legalMetadataId))); - - video.setLegalMetadata(legalMetadata); } + + return data; } -// @Override -// protected BinaryAsset createBinaryAsset(final PageState state) { -// return new VideoAsset(); -// } } diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoFormController.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoFormController.java new file mode 100644 index 000000000..4103999d7 --- /dev/null +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/assets/forms/VideoFormController.java @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2019 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package com.arsdigita.cms.ui.assets.forms; + +import com.arsdigita.cms.ui.assets.IsControllerForAssetType; +import com.arsdigita.cms.ui.assets.forms.AbstractBinaryAssetFormController; + +import org.librecms.contentsection.AssetRepository; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +import org.librecms.assets.LegalMetadata; +import org.librecms.assets.VideoAsset; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@IsControllerForAssetType(VideoAsset.class) +public class VideoFormController + extends AbstractBinaryAssetFormController { + + protected static final String LEGAL_METADATA_ID = "legalMetadataId"; + protected static final String HEIGHT = "height"; + protected static final String WIDTH = "width"; + + @Inject + private AssetRepository assetRepository; + + @Override + protected Map getAssetData(final VideoAsset asset, + final Locale selectedLocale) { + + final Map data = super.getAssetData(asset, + selectedLocale); + + data.put(WIDTH, asset.getWidth()); + data.put(HEIGHT, asset.getHeight()); + + if (asset.getLegalMetadata() != null) { + final long legalMetadataId = asset.getLegalMetadata().getObjectId(); + data.put(LEGAL_METADATA_ID, legalMetadataId); + } + + return data; + } + + @Override + public void updateAssetProperties(final VideoAsset asset, + final Locale selectedLocale, + final Map data) { + + super.updateAssetProperties(asset, selectedLocale, data); + + if (data.containsKey(WIDTH)) { + final long width = (long) data.get(WIDTH); + asset.setWidth(width); + } + + if (data.containsKey(HEIGHT)) { + final long height = (long) data.get(HEIGHT); + asset.setHeight(height); + } + + if (data.containsKey(LEGAL_METADATA_ID)) { + + final LegalMetadata legalMetadata = assetRepository + .findById((long) data.get(LEGAL_METADATA_ID), + LegalMetadata.class) + .orElseThrow(() -> new IllegalArgumentException(String.format( + "No LegalMetadata with ID %d found", + data.get(LEGAL_METADATA_ID) + ))); + asset.setLegalMetadata(legalMetadata); + } + } + + @Override + public VideoAsset createAsset() { + return new VideoAsset(); + } + +}