From 55b2f6c6ba063bdeba4d4b9b47f087934f2bf9a0 Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Thu, 19 Jan 2023 19:46:01 +0100 Subject: [PATCH] Fixed problems with importing assets --- .../assets/AbstractAssetImExporter.java | 17 +++ .../assets/AbstractBinaryAssetImExporter.java | 9 +- .../assets/AbstractBookmarkImExporter.java | 9 ++ .../AbstractContactableEntityImExporter.java | 19 ++- .../librecms/assets/AudioAssetImExporter.java | 5 +- .../librecms/assets/BookmarkImExporter.java | 2 +- .../assets/ExternalAudioAssetImExporter.java | 2 +- .../assets/ExternalVideoAssetImExporter.java | 2 +- .../librecms/assets/FileAssetImExporter.java | 2 +- .../org/librecms/assets/ImageImExporter.java | 2 +- .../assets/LegalMetadataImExporter.java | 2 +- .../assets/PostalAddressImExporter.java | 2 +- .../assets/RelatedLinkImExporter.java | 2 +- .../librecms/assets/SideNoteImExporter.java | 2 +- .../librecms/assets/VideoAssetImExporter.java | 2 +- .../AbstractContentItemImExporter.java | 7 +- .../contentsection/AttachmentList.java | 66 ++++++---- .../AttachmentListImExporter.java | 117 ++++++++++++++++++ .../AttachmentListRepository.java | 16 +++ .../contentsection/FolderImExporter.java | 12 +- .../contentsection/ItemAttachment.java | 18 ++- .../ItemAttachmentImExporter.java | 92 ++++++++++++++ .../ItemAttachmentRepository.java | 79 ++++++++++++ 23 files changed, 422 insertions(+), 64 deletions(-) create mode 100644 ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListImExporter.java create mode 100644 ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentImExporter.java create mode 100644 ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentRepository.java diff --git a/ccm-cms/src/main/java/org/librecms/assets/AbstractAssetImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/AbstractAssetImExporter.java index ca9a4bb4f..af8fd2727 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractAssetImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractAssetImExporter.java @@ -21,10 +21,13 @@ package org.librecms.assets; import org.libreccm.imexport.AbstractEntityImExporter; import org.librecms.contentsection.Asset; import org.librecms.contentsection.AssetRepository; +import org.librecms.contentsection.ItemAttachmentImExporter; import java.util.Objects; import java.util.Optional; +import java.util.Set; +import javax.annotation.PostConstruct; import javax.inject.Inject; /** @@ -38,6 +41,20 @@ public abstract class AbstractAssetImExporter @Inject private AssetRepository assetRepo; + @Inject + private ItemAttachmentImExporter itemAttachmentImExporter; + + @PostConstruct + @Override + protected final void init() { + // ItemAttachmentImExporter requires that all assets to be imported + itemAttachmentImExporter.addRequiredEntities(Set.of(getEntityClass())); + + initAssetImExporter(); + } + + protected abstract void initAssetImExporter(); + @Override protected Optional findExistingEntity(final String uuid) { return assetRepo.findByUuidAndType(uuid, getEntityClass()); diff --git a/ccm-cms/src/main/java/org/librecms/assets/AbstractBinaryAssetImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/AbstractBinaryAssetImExporter.java index 27139b213..58d1cb43a 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractBinaryAssetImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractBinaryAssetImExporter.java @@ -29,6 +29,13 @@ import java.util.Objects; public abstract class AbstractBinaryAssetImExporter extends AbstractAssetImExporter { + @Override + protected final void initAssetImExporter() { + initBinaryAssetImExporter(); + } + + protected abstract void initBinaryAssetImExporter(); + @Override protected final void updateExistingAsset( final T existingAsset, @@ -68,7 +75,7 @@ public abstract class AbstractBinaryAssetImExporter if (existingAsset.getSize() != importedAsset.getSize()) { existingAsset.setSize(importedAsset.getSize()); } - + updateExistingBinaryAsset(existingAsset, importedAsset); } diff --git a/ccm-cms/src/main/java/org/librecms/assets/AbstractBookmarkImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/AbstractBookmarkImExporter.java index 2c7849129..bc1f8d7ad 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractBookmarkImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractBookmarkImExporter.java @@ -20,6 +20,7 @@ package org.librecms.assets; import java.util.Objects; + /** * * @author Jens Pelzetter @@ -28,6 +29,14 @@ import java.util.Objects; public abstract class AbstractBookmarkImExporter extends AbstractAssetImExporter { + + @Override + protected final void initAssetImExporter() { + initBookmarkImExporter(); + } + + protected abstract void initBookmarkImExporter(); + @Override protected final void updateExistingAsset( final T existingAsset, diff --git a/ccm-cms/src/main/java/org/librecms/assets/AbstractContactableEntityImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/AbstractContactableEntityImExporter.java index c759646d7..f03bc451e 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractContactableEntityImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractContactableEntityImExporter.java @@ -21,8 +21,6 @@ package org.librecms.assets; import java.util.Objects; import java.util.Set; -import javax.annotation.PostConstruct; - /** * * @author Jens Pelzetter @@ -31,12 +29,15 @@ import javax.annotation.PostConstruct; public abstract class AbstractContactableEntityImExporter extends AbstractAssetImExporter { - @PostConstruct @Override - protected final void init() { + protected final void initAssetImExporter() { addRequiredEntities(Set.of(PostalAddress.class)); + + initContactableEntityImExporter(); } + protected abstract void initContactableEntityImExporter(); + @Override protected final void updateExistingAsset( final T existingAsset, @@ -48,24 +49,20 @@ public abstract class AbstractContactableEntityImExporter { +public class AudioAssetImExporter + extends AbstractBinaryAssetImExporter { @Override public Class getEntityClass() { @@ -39,7 +40,7 @@ public class AudioAssetImExporter extends AbstractBinaryAssetImExporter { } @Override - protected void init() { + protected void initBinaryAssetImExporter() { addRequiredEntities(Set.of(LegalMetadata.class)); } diff --git a/ccm-cms/src/main/java/org/librecms/assets/LegalMetadataImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/LegalMetadataImExporter.java index 06d2d8603..c9e9a44af 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/LegalMetadataImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/LegalMetadataImExporter.java @@ -39,7 +39,7 @@ public class LegalMetadataImExporter } @Override - protected void init() { + protected void initAssetImExporter() { // Nothing } diff --git a/ccm-cms/src/main/java/org/librecms/assets/PostalAddressImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/PostalAddressImExporter.java index 09cb45e9a..ff51fb322 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/PostalAddressImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/PostalAddressImExporter.java @@ -33,7 +33,7 @@ public class PostalAddressImExporter } @Override - protected void init() { + protected void initAssetImExporter() { // Nothing } diff --git a/ccm-cms/src/main/java/org/librecms/assets/RelatedLinkImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/RelatedLinkImExporter.java index e251a761c..276cf7406 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/RelatedLinkImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/RelatedLinkImExporter.java @@ -39,7 +39,7 @@ public class RelatedLinkImExporter extends AbstractAssetImExporter } @Override - protected void init() { + protected void initAssetImExporter() { addRequiredEntities(Set.of(Bookmark.class)); } diff --git a/ccm-cms/src/main/java/org/librecms/assets/SideNoteImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/SideNoteImExporter.java index a6e4a2ce3..1221fcc0f 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/SideNoteImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/SideNoteImExporter.java @@ -38,7 +38,7 @@ public class SideNoteImExporter extends AbstractAssetImExporter { } @Override - protected void init() { + protected void initAssetImExporter() { // Nothing } diff --git a/ccm-cms/src/main/java/org/librecms/assets/VideoAssetImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/VideoAssetImExporter.java index 522211a14..31b777209 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/VideoAssetImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/VideoAssetImExporter.java @@ -40,7 +40,7 @@ public class VideoAssetImExporter } @Override - protected void init() { + protected void initBinaryAssetImExporter() { addRequiredEntities( Set.of(LegalMetadata.class) ); diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/AbstractContentItemImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/AbstractContentItemImExporter.java index f7814ee02..3a8588d73 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/AbstractContentItemImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/AbstractContentItemImExporter.java @@ -35,7 +35,6 @@ import java.util.Set; import javax.annotation.PostConstruct; import javax.enterprise.inject.Any; import javax.inject.Inject; -import javax.transaction.Transactional; /** * @@ -45,6 +44,9 @@ import javax.transaction.Transactional; public abstract class AbstractContentItemImExporter extends AbstractEntityImExporter { + @Inject + private AttachmentListImExporter attachmentListImExporter; + @Inject private ContentItemRepository itemRepository; @@ -80,6 +82,9 @@ public abstract class AbstractContentItemImExporter // get the target item. relatedLinkImExporter.addRequiredEntities(Set.of(getEntityClass())); + //AttachmentList import requiresw all content items to be imported + attachmentListImExporter.addRequiredEntities(Set.of(getEntityClass())); + initContentItemImExporter(); } diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentList.java b/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentList.java index 8e115194d..59533471f 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentList.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentList.java @@ -18,8 +18,10 @@ */ package org.librecms.contentsection; +import com.fasterxml.jackson.annotation.JsonIgnore; import org.hibernate.envers.Audited; import org.libreccm.core.Identifiable; +import org.libreccm.imexport.Exportable; import org.libreccm.l10n.LocalizedString; import org.libreccm.security.RecursivePermissions; import org.librecms.contentsection.privileges.AssetPrivileges; @@ -48,7 +50,6 @@ import javax.persistence.Table; import static org.librecms.CmsConstants.DB_SCHEMA; - /** * A list of assets attached a {@link ContentItem}. Each {@link ContentItem} may * have multiple lists of attachments. Each list can be identified by name which @@ -64,22 +65,23 @@ import static org.librecms.CmsConstants.DB_SCHEMA; @NamedQuery( name = "AttachmentList.findById", query = "SELECT l FROM AttachmentList l WHERE l.listId = :listId" - ) - , + ), + @NamedQuery( + name = "AttachmentList.findByUuid", + query = "SELECT l FROM AttachmentList l WHERE l.uuid = :uuid" + ), @NamedQuery( name = "AttachmentList.findForItemAndId", query = "SELECT l FROM AttachmentList l " - + "WHERE l.listId = :listId " - + "AND l.item = :item" - ) - , + + "WHERE l.listId = :listId " + + "AND l.item = :item" + ), @NamedQuery( name = "AttachmentList.findForItemAndUuid", query = "SELECT l FROM AttachmentList l " - + "WHERE l.uuid = :uuid " - + "AND l.item = :item" - ) - , + + "WHERE l.uuid = :uuid " + + "AND l.item = :item" + ), @NamedQuery( name = "AttachmentList.findForItemAndName", query = "SELECT l FROM AttachmentList l " @@ -89,6 +91,7 @@ import static org.librecms.CmsConstants.DB_SCHEMA; }) public class AttachmentList implements Comparable, Identifiable, + Exportable, Serializable { private static final long serialVersionUID = -7931234562247075541L; @@ -122,7 +125,7 @@ public class AttachmentList implements Comparable, /** * A listOrder index for ordering multiple attachment lists with the same - {@link #name}. + * {@link #name}. */ @Column(name = "LIST_ORDER") private long listOrder; @@ -133,11 +136,12 @@ public class AttachmentList implements Comparable, @Embedded @AssociationOverride( name = "values", - joinTable = @JoinTable(name = "ATTACHMENT_LIST_CAPTIONS", - schema = DB_SCHEMA, - joinColumns = { - @JoinColumn(name = "LIST_ID") - } + joinTable = @JoinTable( + name = "ATTACHMENT_LIST_CAPTIONS", + schema = DB_SCHEMA, + joinColumns = { + @JoinColumn(name = "LIST_ID") + } ) ) private LocalizedString title; @@ -148,18 +152,26 @@ public class AttachmentList implements Comparable, @Embedded @AssociationOverride( name = "values", - joinTable = @JoinTable(name = "ATTACHMENT_LIST_DESCRIPTIONS", - schema = DB_SCHEMA, - joinColumns = { - @JoinColumn(name = "LIST_ID") - })) + joinTable = @JoinTable( + name = "ATTACHMENT_LIST_DESCRIPTIONS", + schema = DB_SCHEMA, + joinColumns = { + @JoinColumn(name = "LIST_ID") + } + ) + ) private LocalizedString description; @OneToMany(mappedBy = "attachmentList") @OrderBy("sortKey ASC") - @RecursivePermissions(privileges = {AssetPrivileges.EDIT, - AssetPrivileges.DELETE, - AssetPrivileges.VIEW}) + @RecursivePermissions( + privileges = { + AssetPrivileges.EDIT, + AssetPrivileges.DELETE, + AssetPrivileges.VIEW + } + ) + @JsonIgnore private List> attachments; public AttachmentList() { @@ -167,7 +179,7 @@ public class AttachmentList implements Comparable, description = new LocalizedString(); attachments = new ArrayList<>(); } - + public long getListId() { return listId; } @@ -192,7 +204,7 @@ public class AttachmentList implements Comparable, protected void setItem(final ContentItem item) { this.item = item; } - + public String getName() { return name; } diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListImExporter.java new file mode 100644 index 000000000..5d396ec31 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListImExporter.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2023 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.contentsection; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Processes; + +import java.util.Objects; +import java.util.Optional; +import java.util.Set; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Processes(AttachmentList.class) +public class AttachmentListImExporter + extends AbstractEntityImExporter { + + @Inject + private AttachmentListRepository attachmentListRepo; + + @Override + public Class getEntityClass() { + return AttachmentList.class; + } + + @Override + protected void init() { + addRequiredEntities(Set.of(ItemAttachment.class)); + } + + @Override + protected Optional findExistingEntity(final String uuid) { + return attachmentListRepo.findByUuid(uuid); + } + + @Override + protected void saveImportedEntity(final AttachmentList entity) { + attachmentListRepo.save(entity); + } + + @Override + protected void updateExistingEntity( + final AttachmentList existingEntity, + final AttachmentList withImportedEntity + ) { + if (!Objects.equals( + existingEntity.getName(), + withImportedEntity.getName() + )) { + existingEntity.setName(withImportedEntity.getName()); + } + + if (existingEntity.getListOrder() != withImportedEntity.getListOrder()) { + existingEntity.setListOrder(withImportedEntity.getListOrder()); + } + + if (!Objects.equals( + existingEntity.getTitle(), + withImportedEntity.getTitle() + )) { + syncLocalizedStrings( + withImportedEntity.getTitle(), + existingEntity.getTitle() + ); + } + + if (!Objects.equals( + existingEntity.getDescription(), + withImportedEntity.getDescription() + )) { + syncLocalizedStrings( + withImportedEntity.getDescription(), + existingEntity.getDescription() + ); + } + + attachmentListRepo.save(existingEntity); + } + + @Override + protected AttachmentList reloadEntity(AttachmentList entity) { + return attachmentListRepo + .findById(Objects.requireNonNull(entity).getListId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + "AttachmentList entity %s does not exist in " + + "the database.,", + Objects.toString(entity) + ) + ) + ); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListRepository.java index ade33d4bc..52a134251 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListRepository.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/AttachmentListRepository.java @@ -36,6 +36,22 @@ public class AttachmentListRepository private static final long serialVersionUID = 1L; + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery( + "AttachmentList.findByUuid", + AttachmentList.class + ) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch (NoResultException ex) { + return Optional.empty(); + } + } + /** * Retrieves an attachment list for a specific item by the ID of the list. * diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java index ee4a45edf..39c8dbdc2 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/FolderImExporter.java @@ -65,6 +65,11 @@ public class FolderImExporter extends AbstractEntityImExporter { return Folder.class; } + @Override + protected Optional findExistingEntity(final String uuid) { + return folderRepo.findByUuid(uuid); + } + @Override protected void saveImportedEntity(final Folder entity) { folderRepo.save(entity); @@ -163,7 +168,7 @@ public class FolderImExporter extends AbstractEntityImExporter { if (existingEntity.isVisible() != withImportedEntity.isVisible()) { existingEntity.setVisible(withImportedEntity.isVisible()); } - + folderRepo.save(existingEntity); } @@ -181,9 +186,4 @@ public class FolderImExporter extends AbstractEntityImExporter { ); } - @Override - protected Optional findExistingEntity(String uuid) { - throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody - } - } diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachment.java b/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachment.java index 36e13e80c..bfc7ad5cb 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachment.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachment.java @@ -20,6 +20,7 @@ package org.librecms.contentsection; import org.hibernate.envers.Audited; import org.libreccm.core.Identifiable; +import org.libreccm.imexport.Exportable; import java.io.Serializable; import java.util.Objects; @@ -52,14 +53,16 @@ import static org.librecms.CmsConstants.*; @NamedQuery( name = "ItemAttachment.findById", query = "SELECT i FROM ItemAttachment i " - + "WHERE i.attachmentId = :attachmentId") - , + + "WHERE i.attachmentId = :attachmentId"), + @NamedQuery( + name = "ItemAttachment.findByUuid", + query = "SELECT i FROM ItemAttachment i WHERE i.uuid = :uuid" + ), @NamedQuery( name = "ItemAttachment.countByAssetIdAndList", query = "SELECT COUNT(i) FROM ItemAttachment i " + "WHERE i.asset = :asset " - + "AND i.attachmentList = :attachmentList") - , + + "AND i.attachmentList = :attachmentList"), @NamedQuery( name = "ItemAttachment.findByAssetByAndList", query = "SELECT i FROM ItemAttachment i " @@ -70,6 +73,7 @@ import static org.librecms.CmsConstants.*; public class ItemAttachment implements Comparable>, Identifiable, + Exportable, Serializable { private static final long serialVersionUID = -9005379413315191984L; @@ -99,8 +103,10 @@ public class ItemAttachment * The {@link Asset} which is linked by this attachment to the * {@link #attachmentList}. */ - @ManyToOne(targetEntity = Asset.class, - cascade = {CascadeType.PERSIST}) + @ManyToOne( + targetEntity = Asset.class, + cascade = {CascadeType.PERSIST} + ) @JoinColumn(name = "ASSET_ID") private T asset; diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentImExporter.java b/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentImExporter.java new file mode 100644 index 000000000..b9e7f285d --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentImExporter.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2023 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.contentsection; + +import org.libreccm.imexport.AbstractEntityImExporter; +import org.libreccm.imexport.Processes; + +import java.util.Objects; +import java.util.Optional; +import java.util.Set; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Processes(ItemAttachment.class) +@SuppressWarnings("rawtypes") +public class ItemAttachmentImExporter + extends AbstractEntityImExporter { + + @Inject + private ItemAttachmentRepository itemAttachmentRepo; + + @Override + public Class getEntityClass() { + return ItemAttachment.class; + } + + @Override + protected void init() { + addRequiredEntities(Set.of(AttachmentList.class)); + } + + @Override + protected Optional findExistingEntity(final String uuid) { + return itemAttachmentRepo.findByUuid(uuid); + } + + @Override + protected void saveImportedEntity(final ItemAttachment entity) { + itemAttachmentRepo.save(entity); + } + + @Override + protected void updateExistingEntity( + ItemAttachment existingEntity, + ItemAttachment withImportedEntity + ) { + if (existingEntity.getSortKey() != withImportedEntity.getSortKey()) { + existingEntity.setSortKey(withImportedEntity.getSortKey()); + } + + itemAttachmentRepo.save(existingEntity); + } + + @Override + protected ItemAttachment reloadEntity(ItemAttachment entity) { + return itemAttachmentRepo + .findById(Objects.requireNonNull(entity).getAttachmentId()) + .orElseThrow( + () -> new IllegalArgumentException( + String.format( + String.format( + "ItemAttachment %s does not exist in the database.", + Objects.toString(entity) + ) + ) + ) + ); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentRepository.java new file mode 100644 index 000000000..4a352b16f --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ItemAttachmentRepository.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2023 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.contentsection; + +import org.libreccm.core.AbstractEntityRepository; + +import java.util.Optional; +import java.util.UUID; + +import javax.enterprise.context.RequestScoped; +import javax.persistence.NoResultException; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@SuppressWarnings("rawtypes") +public class ItemAttachmentRepository + extends AbstractEntityRepository { + + @Override + public Class getEntityClass() { + return ItemAttachment.class; + } + + @Override + public String getIdAttributeName() { + return "attachmentId"; + } + + @Override + public Long getIdOfEntity(final ItemAttachment entity) { + return entity.getAttachmentId(); + } + + @Override + public boolean isNew(final ItemAttachment entity) { + return entity.getAttachmentId() == 0; + } + + @Override + protected void initNewEntity(final ItemAttachment entity) { + entity.setUuid(UUID.randomUUID().toString()); + } + + public Optional findByUuid(final String uuid) { + try { + return Optional.of( + getEntityManager() + .createNamedQuery( + "ItemAttachment.findByUuid", + ItemAttachment.class + ) + .setParameter("uuid", uuid) + .getSingleResult() + ); + } catch (NoResultException ex) { + return Optional.empty(); + } + } + +}