diff --git a/ccm-cms/package-lock.json b/ccm-cms/package-lock.json index 367c02bef..0caf817ca 100644 --- a/ccm-cms/package-lock.json +++ b/ccm-cms/package-lock.json @@ -1,12 +1,12 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-12-01T192513", + "version": "7.0.0-SNAPSHOT.2022-12-24T130950", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-12-01T192513", + "version": "7.0.0-SNAPSHOT.2022-12-24T130950", "license": "LGPL-3.0-or-later", "dependencies": { "@tiptap/core": "^2.0.0-beta.127", diff --git a/ccm-cms/package.json b/ccm-cms/package.json index e2725f386..e5a0d14b5 100644 --- a/ccm-cms/package.json +++ b/ccm-cms/package.json @@ -1,6 +1,6 @@ { "name": "@librecms/ccm-cms", - "version": "7.0.0-SNAPSHOT.2022-12-01T192513", + "version": "7.0.0-SNAPSHOT.2022-12-24T130950", "description": "JavaScript stuff for ccm-cms", "main": "target/generated-resources/assets/@content-sections/cms-admin.js", "types": "target/generated-resources/assets/@content-sections/cms-admin.d.ts", 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 69aef32bd..ca9a4bb4f 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractAssetImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractAssetImExporter.java @@ -23,6 +23,7 @@ import org.librecms.contentsection.Asset; import org.librecms.contentsection.AssetRepository; import java.util.Objects; +import java.util.Optional; import javax.inject.Inject; @@ -37,11 +38,59 @@ public abstract class AbstractAssetImExporter @Inject private AssetRepository assetRepo; + @Override + protected Optional findExistingEntity(final String uuid) { + return assetRepo.findByUuidAndType(uuid, getEntityClass()); + } + @Override protected void saveImportedEntity(T asset) { assetRepo.save(asset); } + @Override + protected final void updateExistingEntity( + final T existingEntity, final T importedEntity + ) { + if (!Objects.equals( + existingEntity.getTitle(), + importedEntity.getTitle() + )) { + syncLocalizedStrings( + importedEntity.getTitle(), + existingEntity.getTitle() + ); + } + + updateExistingAsset(existingEntity, importedEntity); + + assetRepo.save(existingEntity); + } + + /** + * Updates an existing entity. Called by the implementation of + * {@link #updateExistingEntity(org.librecms.contentsection.Asset, org.librecms.contentsection.Asset)} + * in {@link AbstractAssetImExporter}. The same rules as for implementations + * of + * AbstractEntityImExporter#updateExistingEntity(org.libreccm.imexport.Exportable, + * org.libreccm.imexport.Exportable) apply to implementations of this + * method. Implementations should not save the updated + * asset. The calling method + * {@link AbstractAssetImExporter#updateExistingAsset(org.librecms.contentsection.Asset, org.librecms.contentsection.Asset)} + * is taking care of saving the updated, existing asset. + * + * @param exisitingAsset The existing asset. + * @param importedAsset The imported asset. + * + * @see + * AbstractEntityImExporter#updateExistingEntity(org.libreccm.imexport.Exportable, + * org.libreccm.imexport.Exportable) + */ + protected abstract void updateExistingAsset( + final T exisitingAsset, + final T importedAsset + ); + @Override protected T reloadEntity(T asset) { return assetRepo 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 9cbd2cc27..27139b213 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractBinaryAssetImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractBinaryAssetImExporter.java @@ -18,6 +18,9 @@ */ package org.librecms.assets; +import java.util.Objects; + + /** * * @author Jens Pelzetter @@ -26,4 +29,62 @@ package org.librecms.assets; public abstract class AbstractBinaryAssetImExporter extends AbstractAssetImExporter { + @Override + protected final void updateExistingAsset( + final T existingAsset, + final T importedAsset + ) { + if (!Objects.equals( + existingAsset.getDescription(), + importedAsset.getDescription() + )) { + syncLocalizedStrings( + importedAsset.getDescription(), + existingAsset.getDescription() + ); + } + + if (!Objects.equals( + existingAsset.getFileName(), + importedAsset.getFileName() + )) { + existingAsset.setFileName(importedAsset.getFileName()); + } + + if (!Objects.equals( + existingAsset.getMimeType(), + importedAsset.getMimeType() + )) { + existingAsset.setMimeType(importedAsset.getMimeType()); + } + + if (!Objects.equals( + existingAsset.getData(), + importedAsset.getData() + )) { + existingAsset.setData(importedAsset.getData()); + } + + if (existingAsset.getSize() != importedAsset.getSize()) { + existingAsset.setSize(importedAsset.getSize()); + } + + updateExistingBinaryAsset(existingAsset, importedAsset); + } + + /** + * Updates a existing binary asset. + * + * @param existingAsset The existing asset. + * @param importedAsset The imported asset. + * + * @see + * AbstractAssetImExporter#updateExistingAsset(org.librecms.contentsection.Asset, + * org.librecms.contentsection.Asset) + */ + protected abstract void updateExistingBinaryAsset( + final T existingAsset, + final T 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 49634594a..2c7849129 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractBookmarkImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractBookmarkImExporter.java @@ -18,6 +18,8 @@ */ package org.librecms.assets; +import java.util.Objects; + /** * * @author Jens Pelzetter @@ -26,4 +28,34 @@ package org.librecms.assets; public abstract class AbstractBookmarkImExporter extends AbstractAssetImExporter { + @Override + protected final void updateExistingAsset( + final T existingAsset, + final T importedAsset + ) { + if (!Objects.equals( + existingAsset.getDescription(), + importedAsset.getDescription() + )) { + syncLocalizedStrings( + importedAsset.getDescription(), + existingAsset.getDescription() + ); + } + + if (!Objects.equals( + existingAsset.getUrl(), + importedAsset.getUrl() + )) { + existingAsset.setUrl(importedAsset.getUrl()); + } + + updateExistingBookmark(existingAsset, importedAsset); + } + + protected abstract void updateExistingBookmark( + final T existingBookmark, + final T importedBookmark + ); + } 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 e5364faae..c759646d7 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/AbstractContactableEntityImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/AbstractContactableEntityImExporter.java @@ -18,6 +18,7 @@ */ package org.librecms.assets; +import java.util.Objects; import java.util.Set; import javax.annotation.PostConstruct; @@ -36,6 +37,35 @@ public abstract class AbstractContactableEntityImExporter { addRequiredEntities(Set.of(LegalMetadata.class)); } + @Override + protected void updateExistingBinaryAsset( + final Image existingAsset, + final Image importedAsset + ) { + if (!Objects.equals( + existingAsset.getLegalMetadata(), + importedAsset.getLegalMetadata() + )) { + existingAsset.setLegalMetadata(importedAsset.getLegalMetadata()); + } + + if (existingAsset.getWidth() != importedAsset.getWidth()) { + existingAsset.setWidth(importedAsset.getWidth()); + } + + if (existingAsset.getHeight() != importedAsset.getHeight()) { + existingAsset.setHeight(importedAsset.getHeight()); + } + } + } 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 771c7f387..06d2d8603 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/LegalMetadataImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/LegalMetadataImExporter.java @@ -20,6 +20,8 @@ package org.librecms.assets; import org.libreccm.imexport.Processes; +import java.util.Objects; + import javax.enterprise.context.RequestScoped; /** @@ -41,4 +43,49 @@ public class LegalMetadataImExporter // Nothing } + @Override + protected void updateExistingAsset( + final LegalMetadata exisitingAsset, + final LegalMetadata importedAsset + ) { + if (!Objects.equals( + exisitingAsset.getRightsHolder(), + importedAsset.getRightsHolder() + )) { + exisitingAsset.setRightsHolder(importedAsset.getRightsHolder()); + } + + if (!Objects.equals( + exisitingAsset.getRights(), + importedAsset.getRights() + )) { + syncLocalizedStrings( + importedAsset.getRights(), + exisitingAsset.getRights() + ); + } + + if (!Objects.equals( + exisitingAsset.getPublisher(), + importedAsset.getPublisher() + )) { + exisitingAsset.setPublisher(importedAsset.getPublisher()); + } + + if (!Objects.equals( + exisitingAsset.getCreator(), + importedAsset.getCreator() + )) { + exisitingAsset.setCreator(importedAsset.getCreator()); + } + + if (!Objects.equals( + exisitingAsset.getContributors(), + importedAsset.getContributors() + )) { + exisitingAsset.setContributors(importedAsset.getContributors()); + } + + } + } diff --git a/ccm-cms/src/main/java/org/librecms/assets/OrganizationImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/OrganizationImExporter.java index ea86f8fad..e2428eed6 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/OrganizationImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/OrganizationImExporter.java @@ -20,6 +20,8 @@ package org.librecms.assets; import org.libreccm.imexport.Processes; +import java.util.Objects; + import javax.enterprise.context.RequestScoped; /** @@ -41,4 +43,17 @@ public class OrganizationImExporter // Nothing } + @Override + protected void updateExistingContactable( + final Organization existingContactable, + final Organization importedContactable + ) { + if (!Objects.equals( + existingContactable.getName(), + importedContactable.getName() + )) { + existingContactable.setName(importedContactable.getName()); + } + } + } diff --git a/ccm-cms/src/main/java/org/librecms/assets/PersonImExporter.java b/ccm-cms/src/main/java/org/librecms/assets/PersonImExporter.java index 42a6e9c37..9e8a93e72 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/PersonImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/PersonImExporter.java @@ -18,6 +18,8 @@ */ package org.librecms.assets; +import java.util.Objects; + /** * * @author Jens Pelzetter @@ -35,4 +37,28 @@ public class PersonImExporter // Nothing } + @Override + protected void updateExistingContactable( + final Person existingContactable, + final Person importedContactable + ) { + if (!Objects.equals( + existingContactable.getPersonNames(), + importedContactable.getPersonNames() + )) { + existingContactable.setPersonNames( + importedContactable.getPersonNames() + ); + } + + if (!Objects.equals( + existingContactable.getBirthdate(), + importedContactable.getBirthdate() + )) { + existingContactable.setBirthdate( + importedContactable.getBirthdate() + ); + } + } + } 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 6522ecffb..09cb45e9a 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/PostalAddressImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/PostalAddressImExporter.java @@ -18,7 +18,7 @@ */ package org.librecms.assets; -import org.librecms.contentsection.Asset; +import java.util.Objects; /** * @@ -37,4 +37,47 @@ public class PostalAddressImExporter // Nothing } + @Override + protected void updateExistingAsset( + final PostalAddress exisitingAsset, + final PostalAddress importedAsset + ) { + if (!Objects.equals( + exisitingAsset.getAddress(), + importedAsset.getAddress() + )) { + exisitingAsset.setAddress(importedAsset.getAddress()); + } + + if (!Objects.equals( + exisitingAsset.getPostalCode(), + importedAsset.getPostalCode() + )) { + exisitingAsset.setPostalCode(importedAsset.getPostalCode()); + } + + if (!Objects.equals( + exisitingAsset.getCity(), + importedAsset.getCity() + )) { + exisitingAsset.setCity(importedAsset.getCity()); + } + + if (!Objects.equals( + exisitingAsset.getState(), + importedAsset.getState() + )) { + exisitingAsset.setState(importedAsset.getState()); + } + + if (!Objects.equals( + exisitingAsset.getIsoCountryCode(), + importedAsset.getIsoCountryCode() + )) { + exisitingAsset.setIsoCountryCode( + importedAsset.getIsoCountryCode() + ); + } + } + } diff --git a/ccm-cms/src/main/java/org/librecms/assets/RelatedLink.java b/ccm-cms/src/main/java/org/librecms/assets/RelatedLink.java index 67ef31a4e..db1c93624 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/RelatedLink.java +++ b/ccm-cms/src/main/java/org/librecms/assets/RelatedLink.java @@ -20,7 +20,6 @@ package org.librecms.assets; import com.fasterxml.jackson.annotation.JsonIdentityReference; -import com.fasterxml.jackson.annotation.JsonIgnore; import org.librecms.contentsection.Asset; import org.hibernate.envers.Audited; import org.librecms.contentsection.ContentItem; 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 57cc06759..e251a761c 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/RelatedLinkImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/RelatedLinkImExporter.java @@ -20,6 +20,7 @@ package org.librecms.assets; import org.libreccm.imexport.Processes; +import java.util.Objects; import java.util.Set; import javax.enterprise.context.RequestScoped; @@ -41,7 +42,25 @@ public class RelatedLinkImExporter extends AbstractAssetImExporter protected void init() { addRequiredEntities(Set.of(Bookmark.class)); } - - - + + @Override + protected void updateExistingAsset( + final RelatedLink exisitingAsset, + final RelatedLink importedAsset + ) { + if (!Objects.equals( + exisitingAsset.getTargetItem(), + importedAsset.getTargetItem() + )) { + exisitingAsset.setTargetItem(importedAsset.getTargetItem()); + } + + if (!Objects.equals( + exisitingAsset.getBookmark(), + importedAsset.getBookmark() + )) { + exisitingAsset.setBookmark(importedAsset.getBookmark()); + } + } + } 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 23bcbb2db..a6e4a2ce3 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/SideNoteImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/SideNoteImExporter.java @@ -20,6 +20,8 @@ package org.librecms.assets; import org.libreccm.imexport.Processes; +import java.util.Objects; + import javax.enterprise.context.RequestScoped; /** @@ -28,7 +30,7 @@ import javax.enterprise.context.RequestScoped; */ @RequestScoped @Processes(SideNote.class) -public class SideNoteImExporter extends AbstractAssetImExporter{ +public class SideNoteImExporter extends AbstractAssetImExporter { @Override public Class getEntityClass() { @@ -39,7 +41,18 @@ public class SideNoteImExporter extends AbstractAssetImExporter{ protected void init() { // Nothing } - - - + + @Override + protected void updateExistingAsset( + final SideNote exisitingAsset, + final SideNote importedAsset + ) { + if (!Objects.equals( + exisitingAsset.getText(), + importedAsset.getText() + )) { + exisitingAsset.setText(importedAsset.getText()); + } + } + } 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 1e64560b1..522211a14 100644 --- a/ccm-cms/src/main/java/org/librecms/assets/VideoAssetImExporter.java +++ b/ccm-cms/src/main/java/org/librecms/assets/VideoAssetImExporter.java @@ -20,6 +20,7 @@ package org.librecms.assets; import org.libreccm.imexport.Processes; +import java.util.Objects; import java.util.Set; import javax.enterprise.context.RequestScoped; @@ -45,4 +46,17 @@ public class VideoAssetImExporter ); } + @Override + protected void updateExistingBinaryAsset( + final VideoAsset existingAsset, + final VideoAsset importedAsset + ) { + if (!Objects.equals( + existingAsset.getLegalMetadata(), + importedAsset.getLegalMetadata() + )) { + existingAsset.setLegalMetadata(importedAsset.getLegalMetadata()); + } + } + }