diff --git a/ccm-cms/src/main/java/org/librecms/assets/AudioAsset.java b/ccm-cms/src/main/java/org/librecms/assets/AudioAsset.java index 7bcf8003b..9b28bc83b 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AudioAsset.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AudioAsset.java @@ -19,7 +19,7 @@ package org.librecms.assets; import com.arsdigita.cms.ui.assets.forms.AudioForm; -import com.arsdigita.cms.ui.assets.forms.ExternalVideoAssetForm; + import org.hibernate.envers.Audited; import java.io.Serializable; diff --git a/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java b/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java index ef20797c2..f5f9624ee 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java +++ b/ccm-cms/src/main/java/org/librecms/assets/BinaryAsset.java @@ -35,12 +35,10 @@ import javax.persistence.Lob; import javax.persistence.Table; import org.hibernate.envers.Audited; -import org.hibernate.validator.constraints.NotEmpty; import org.libreccm.jpa.utils.MimeTypeConverter; import org.libreccm.l10n.LocalizedString; import javax.persistence.Convert; -import javax.validation.constraints.NotNull; import static org.librecms.CmsConstants.*; diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AbstractAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AbstractAssetRenderer.java new file mode 100644 index 000000000..fb275ae78 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AbstractAssetRenderer.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.contentsection.Asset; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * + * @author Jens Pelzetter + */ +public abstract class AbstractAssetRenderer { + + public Map render(final Asset asset, + final Locale language) { + + final Map result = new HashMap<>(); + + result.put("objectId", asset.getObjectId()); + result.put("uuid", asset.getUuid()); + result.put("displayName", asset.getDisplayName()); + result.put("title", asset.getTitle().getValue(language)); + + renderAsset(asset, language, result); + + return result; + } + + protected abstract void renderAsset(final Asset asset, + final Locale language, + final Map result); + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderer.java new file mode 100644 index 000000000..3298784e3 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderer.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.contentsection.Asset; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.inject.Qualifier; + +/** + * + * @author Jens Pelzetter + */ +@Qualifier +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.METHOD, + ElementType.FIELD, + ElementType.PARAMETER, + ElementType.TYPE}) +public @interface AssetRenderer { + + Class renders(); + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderers.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderers.java new file mode 100644 index 000000000..3dce23d81 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AssetRenderers.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.enterprise.inject.Instance; +import javax.enterprise.util.AnnotationLiteral; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +public class AssetRenderers { + + private static final Logger LOGGER = LogManager + .getLogger(AssetRenderers.class); + + @Inject + private Instance renderers; + + public AbstractAssetRenderer findRenderer( + final Class assetType) { + + LOGGER.debug("Trying to find renderer for asset type \"{}\"...", + assetType.getName()); + + final AssetRendererLiteral literal = new AssetRendererLiteral(assetType); + + final Instance instance = renderers + .select(literal); + + if (instance.isUnsatisfied()) { + + LOGGER.warn("No renderer for asset type \"{}\". " + + "Returning default renderer.", + assetType.getName()); + + return new AbstractAssetRenderer() { + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + //Nothing here. + } + + }; + } else { + return instance.iterator().next(); + } + } + + private class AssetRendererLiteral + extends AnnotationLiteral + implements AssetRenderer { + + private static final long serialVersionUID = 2635180159989399554L; + + private final Class renders; + + public AssetRendererLiteral(final Class renders) { + this.renders = renders; + } + + @Override + public Class renders() { + return renders; + } + + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AudioAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AudioAssetRenderer.java new file mode 100644 index 000000000..bbd24f63a --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/AudioAssetRenderer.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.AudioAsset; +import org.librecms.assets.LegalMetadata; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = AudioAsset.class) +public class AudioAssetRenderer extends BinaryAssetRenderer { + + @Inject + @AssetRenderer(renders = LegalMetadata.class) + private AbstractAssetRenderer legalMetadataRenderer; + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + super.renderAsset(asset, language, result); + + final AudioAsset audioAsset; + if (asset instanceof AudioAsset) { + audioAsset = (AudioAsset) asset; + } else { + return; + } + + result.put("legalMetadata", + legalMetadataRenderer.render(audioAsset.getLegalMetadata(), language)); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BinaryAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BinaryAssetRenderer.java new file mode 100644 index 000000000..dbcf89623 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BinaryAssetRenderer.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.BinaryAsset; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; +import java.util.Objects; + +/** + * + * @author Jens Pelzetter + */ +public class BinaryAssetRenderer extends AbstractAssetRenderer { + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + final BinaryAsset binaryAsset; + if (asset instanceof BinaryAsset) { + binaryAsset = (BinaryAsset) asset; + } else { + return; + } + + result.put("description", + binaryAsset.getDescription().getValue(language)); + result.put("fileName", binaryAsset.getFileName()); + result.put("mimeType", Objects.toString(binaryAsset.getMimeType())); + result.put("size", binaryAsset.getSize()); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BookmarkRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BookmarkRenderer.java new file mode 100644 index 000000000..76583e7bf --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/BookmarkRenderer.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.contentsection.Asset; +import org.librecms.pagemodel.assets.AbstractAssetRenderer; +import org.librecms.pagemodel.assets.AssetRenderer; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +import org.librecms.assets.Bookmark; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = Bookmark.class) +public class BookmarkRenderer extends AbstractAssetRenderer { + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + final Bookmark bookmark; + if (asset instanceof Bookmark) { + bookmark = (Bookmark) asset; + } else { + return; + } + + result.put("description", bookmark.getDescription().getValue(language)); + result.put("url", bookmark.getUrl()); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalAudioAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalAudioAssetRenderer.java new file mode 100644 index 000000000..2a0cc783c --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalAudioAssetRenderer.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.ExternalAudioAsset; +import org.librecms.assets.LegalMetadata; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = ExternalAudioAsset.class) +public class ExternalAudioAssetRenderer extends BookmarkRenderer { + + @Inject + @AssetRenderer(renders = LegalMetadata.class) + private AbstractAssetRenderer legalMetadataRenderer; + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + super.renderAsset(asset, language, result); + + final ExternalAudioAsset externalAudioAsset; + if (asset instanceof ExternalAudioAsset) { + externalAudioAsset = (ExternalAudioAsset) asset; + } else { + return; + } + + result.put("legalMetadata", + legalMetadataRenderer + .render(externalAudioAsset.getLegalMetadata(), + language)); + + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalVideoAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalVideoAssetRenderer.java new file mode 100644 index 000000000..aedac5cd3 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ExternalVideoAssetRenderer.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.ExternalVideoAsset; +import org.librecms.assets.LegalMetadata; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = ExternalVideoAsset.class) +public class ExternalVideoAssetRenderer extends BookmarkRenderer { + + @Inject + @AssetRenderer(renders = LegalMetadata.class) + private AbstractAssetRenderer legalMetadataRenderer; + + @Override + protected void renderAsset(final Asset asset, + final Locale locale, + final Map result) { + + super.renderAsset(asset, locale, result); + + final ExternalVideoAsset externalVideoAsset; + if (asset instanceof ExternalVideoAsset) { + externalVideoAsset = (ExternalVideoAsset) asset; + } else { + return; + } + + result.put("legalMetadata", + legalMetadataRenderer + .render(externalVideoAsset.getLegalMetadata(), locale)); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/FileAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/FileAssetRenderer.java new file mode 100644 index 000000000..842b6f3aa --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/FileAssetRenderer.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.FileAsset; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = FileAsset.class) +public class FileAssetRenderer extends BinaryAssetRenderer { + + @Override + protected void renderAsset(final Asset asset, + final Locale locale, + final Map result) { + + super.renderAsset(asset, locale, result); + + //Nothing more yet + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ImageRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ImageRenderer.java new file mode 100644 index 000000000..36cb43aae --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/ImageRenderer.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.Image; +import org.librecms.assets.LegalMetadata; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@AssetRenderer(renders = Image.class) +@RequestScoped +public class ImageRenderer extends BinaryAssetRenderer { + + @Inject + @AssetRenderer(renders = LegalMetadata.class) + private AbstractAssetRenderer legalMetadataRenderer; + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + super.renderAsset(asset, language, result); + + final Image image; + if (asset instanceof Image) { + image = (Image) asset; + } else { + return; + } + + result.put("width", image.getWidth()); + result.put("height", image.getHeight()); + result.put("legalMetadata", + legalMetadataRenderer.render(image.getLegalMetadata(), + language)); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/LegalMetadataRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/LegalMetadataRenderer.java new file mode 100644 index 000000000..6e1025f47 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/LegalMetadataRenderer.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.LegalMetadata; +import org.librecms.contentsection.Asset; + +import java.util.ArrayList; +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = LegalMetadata.class) +public class LegalMetadataRenderer extends AbstractAssetRenderer { + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + final LegalMetadata legalMetadata; + if (asset instanceof LegalMetadata) { + legalMetadata = (LegalMetadata) asset; + } else { + return; + } + + result.put("rightsHolder", legalMetadata.getRightsHolder()); + result.put("rights", legalMetadata.getRights().getValue(language)); + result.put("publisher", legalMetadata.getPublisher()); + result.put("creator", legalMetadata.getCreator()); + result.put("contributors", + new ArrayList<>(legalMetadata.getContributors())); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/RelatedLinkRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/RelatedLinkRenderer.java new file mode 100644 index 000000000..c838fa720 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/RelatedLinkRenderer.java @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.Bookmark; +import org.librecms.assets.RelatedLink; +import org.librecms.contentsection.Asset; +import org.librecms.contentsection.ContentItem; + +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = RelatedLink.class) +public class RelatedLinkRenderer extends AbstractAssetRenderer { + + @Inject + @AssetRenderer(renders = Bookmark.class) + private AbstractAssetRenderer bookmarkRenderer; + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + final RelatedLink relatedLink; + if (asset instanceof RelatedLink) { + relatedLink = (RelatedLink) asset; + } else { + return; + } + + if (relatedLink.getTargetItem() != null) { + result.put("targetItem", + renderTargetItem(relatedLink.getTargetItem(), + language)); + } + + if (relatedLink.getBookmark() != null) { + result.put("bookmark", + bookmarkRenderer.render(relatedLink.getBookmark(), + language)); + } + } + + protected Map renderTargetItem(final ContentItem targetItem, + final Locale language) { + + final Map result = new HashMap<>(); + + result.put("objectId", targetItem.getObjectId()); + result.put("itemUuid", targetItem.getItemUuid()); + result.put("displayName", targetItem.getDisplayName()); + result.put("name", targetItem.getName().getValue(language)); + result.put("title", targetItem.getTitle().getValue(language)); + result.put("description", + targetItem.getDescription().getValue(language)); + + return result; + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/SideNoteRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/SideNoteRenderer.java new file mode 100644 index 000000000..bd020e5bb --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/SideNoteRenderer.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.SideNote; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = SideNote.class) +public class SideNoteRenderer extends AbstractAssetRenderer { + + @Override + protected void renderAsset(final Asset asset, + final Locale language, + final Map result) { + + final SideNote siteNote; + if (asset instanceof SideNote) { + siteNote = (SideNote) asset; + } else { + return; + } + + result.put("text", siteNote.getText().getValue(language)); + } + + + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/assets/VideoAssetRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/VideoAssetRenderer.java new file mode 100644 index 000000000..a826a4619 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/assets/VideoAssetRenderer.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2017 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 org.librecms.pagemodel.assets; + +import org.librecms.assets.LegalMetadata; +import org.librecms.assets.VideoAsset; +import org.librecms.contentsection.Asset; + +import java.util.Locale; +import java.util.Map; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@AssetRenderer(renders = VideoAsset.class) +public class VideoAssetRenderer extends BinaryAssetRenderer { + + @Inject + @AssetRenderer(renders = LegalMetadata.class) + private AbstractAssetRenderer legalMetadataRenderer; + + @Override + protected void renderAsset(final Asset asset, + final Locale locale, + final Map result) { + + super.renderAsset(asset, locale, result); + + final VideoAsset videoAsset; + if (asset instanceof VideoAsset) { + videoAsset = (VideoAsset) asset; + } else { + return; + } + + result.put("width", videoAsset.getWidth()); + result.put("height", videoAsset.getHeight()); + result.put("legalMetadata", + legalMetadataRenderer.render(videoAsset.getLegalMetadata(), + locale)); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java index 44afd0ec5..21b1e2564 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/AbstractContentItemRenderer.java @@ -18,12 +18,19 @@ */ package org.librecms.pagemodel.contentitems; +import org.librecms.pagemodel.assets.AbstractAssetRenderer; +import org.librecms.contentsection.AttachmentList; import org.librecms.contentsection.ContentItem; import org.librecms.contentsection.ContentType; +import org.librecms.contentsection.ItemAttachment; +import org.librecms.pagemodel.assets.AssetRenderers; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import java.util.stream.Collectors; + +import javax.inject.Inject; /** * @@ -31,7 +38,10 @@ import java.util.Map; */ public abstract class AbstractContentItemRenderer { - public Map render(final ContentItem item, + @Inject + private AssetRenderers assetRenderers; + + public Map render(final ContentItem item, final Locale language) { final Map result = new HashMap<>(); @@ -49,15 +59,21 @@ public abstract class AbstractContentItemRenderer { result.put("lastModified", item.getLastModified()); result.put("creationUserName", item.getCreationUserName()); result.put("lastModifyingUserName", item.getLastModifyingUserName()); + result.put("attachments", + item + .getAttachments() + .stream() + .map(list -> renderAttachmentList(list, language)) + .collect(Collectors.toList())); renderItem(item, language, result); - + return result; } protected abstract void renderItem(final ContentItem item, - final Locale language, - final Map result); + final Locale language, + final Map result); protected Map renderContentType( final ContentType contentType, final Locale language) { @@ -72,4 +88,45 @@ public abstract class AbstractContentItemRenderer { return result; } + protected Map renderAttachmentList( + final AttachmentList attachmentList, + final Locale language) { + + final Map result = new HashMap<>(); + + result.put("listId", attachmentList.getListId()); + result.put("uuid", attachmentList.getUuid()); + result.put("name", attachmentList.getName()); + result.put("order", attachmentList.getOrder()); + result.put("title", attachmentList.getTitle().getValue(language)); + result.put("description", + attachmentList.getDescription().getValue(language)); + + result.put("attachments", + attachmentList + .getAttachments() + .stream() + .map(attachment -> renderAttachment(attachment, language)) + .collect(Collectors.toList())); + + return result; + } + + protected Map renderAttachment( + final ItemAttachment attachment, + final Locale language) { + + final Map result = new HashMap<>(); + + result.put("attachmentId", attachment.getAttachmentId()); + result.put("uuid", attachment.getUuid()); + result.put("sortKey", attachment.getSortKey()); + + final AbstractAssetRenderer renderer = assetRenderers + .findRenderer(attachment.getAsset().getClass()); + result.put("asset", renderer.render(attachment.getAsset(), language)); + + return result; + } + } diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java index f15fd4726..50591c054 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderer.java @@ -35,7 +35,10 @@ import javax.inject.Qualifier; */ @Qualifier @Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) +@Target({ElementType.METHOD, + ElementType.FIELD, + ElementType.PARAMETER, + ElementType.TYPE}) public @interface ContentItemRenderer { /** diff --git a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java index fee237a07..d39ed9705 100644 --- a/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java +++ b/ccm-cms/src/main/java/org/librecms/pagemodel/contentitems/ContentItemRenderers.java @@ -91,14 +91,7 @@ public class ContentItemRenderers { return findRenderer(itemType); } } else { - final AbstractContentItemRenderer renderer = instance - .iterator() - .next(); - - @SuppressWarnings("unchecked") - final AbstractContentItemRenderer result - = renderer; - return result; + return instance.iterator().next(); } } diff --git a/ccm-cms/src/main/java/org/librecms/ui/ContentItemEditor.java b/ccm-cms/src/main/java/org/librecms/ui/ContentItemEditor.java index fb496aff7..c63f8cd65 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/ContentItemEditor.java +++ b/ccm-cms/src/main/java/org/librecms/ui/ContentItemEditor.java @@ -38,14 +38,14 @@ import java.util.ResourceBundle; * * @author Jens Pelzetter */ -public class ContentItemEditor extends Window { +public class ContentItemEditor extends Window { private static final long serialVersionUID = 3341827053652019616L; private List authoringsSteps; public ContentItemEditor(final ContentSectionViewController controller, - final ContentItem item) { + final T item) { super(); @@ -101,7 +101,7 @@ public class ContentItemEditor extends Window { private Component createAuthoringStep( final ContentSectionViewController controller, - final ContentItem item, + final T item, final String componentClassName) { try { @@ -111,7 +111,7 @@ public class ContentItemEditor extends Window { return stepClass .getDeclaredConstructor(ContentSectionViewController.class, - ContentItem.class) + item.getClass()) .newInstance(controller, item); } catch (ClassNotFoundException | NoSuchMethodException diff --git a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionViewController.java b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionViewController.java index db86a7d93..b99583dfc 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/ContentSectionViewController.java +++ b/ccm-cms/src/main/java/org/librecms/ui/ContentSectionViewController.java @@ -21,6 +21,7 @@ package org.librecms.ui; import com.vaadin.cdi.ViewScoped; import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.security.PermissionChecker; +import org.libreccm.ui.LocalizedStringWidgetController; import org.librecms.contentsection.ContentSectionRepository; import org.librecms.contentsection.FolderRepository; import org.librecms.contenttypes.ContentTypesManager; @@ -49,6 +50,9 @@ public class ContentSectionViewController { @Inject private GlobalizationHelper globalizationHelper; + @Inject + private LocalizedStringWidgetController localizedStringWidgetController; + @Inject private PermissionChecker permissionChecker; @@ -62,27 +66,31 @@ public class ContentSectionViewController { return browseDocumentsDataProvider; } - protected FolderBrowserFolderTreeDataProvider getFolderTreeDataProvider() { + public FolderBrowserFolderTreeDataProvider getFolderTreeDataProvider() { return folderTreeDataProvider; } - protected ContentTypesManager getContentTypesManager() { + public ContentTypesManager getContentTypesManager() { return contentTypesManager; } - protected FolderRepository getFolderRepository() { + public FolderRepository getFolderRepository() { return folderRepository; } - protected GlobalizationHelper getGlobalizationHelper() { + public GlobalizationHelper getGlobalizationHelper() { return globalizationHelper; } - protected PermissionChecker getPermissionChecker() { + public LocalizedStringWidgetController getLocalizedStringWidgetController() { + return localizedStringWidgetController; + } + + public PermissionChecker getPermissionChecker() { return permissionChecker; } - protected ContentSectionRepository getSectionRepository() { + public ContentSectionRepository getSectionRepository() { return sectionRepository; }