diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java index d3e2d6c39..7885f47a6 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItem.java @@ -130,6 +130,9 @@ public class ContentItem extends CcmObject implements Serializable, private static final long serialVersionUID = 5897287630227129653L; + @Column(name = "ITEM_UUID", nullable = false) + private String itemUuid; + /** * The name of the content item which is used to generate the URL of the * content item. We are using a {@link LocalizedString} here to make it @@ -225,7 +228,15 @@ public class ContentItem extends CcmObject implements Serializable, description = new LocalizedString(); attachments = new ArrayList<>(); } - + + public String getItemUuid() { + return itemUuid; + } + + protected void setItemUuid(final String itemUuid) { + this.itemUuid = itemUuid; + } + public LocalizedString getName() { return name; } @@ -332,6 +343,7 @@ public class ContentItem extends CcmObject implements Serializable, @Override public int hashCode() { int hash = super.hashCode(); + hash = 59 * hash + Objects.hashCode(itemUuid); hash = 59 * hash + Objects.hashCode(name); hash = 59 * hash + Objects.hashCode(contentType); hash = 59 * hash + Objects.hashCode(title); @@ -362,6 +374,10 @@ public class ContentItem extends CcmObject implements Serializable, return false; } + if (!Objects.equals(itemUuid, other.getItemUuid())) { + return false; + } + if (!Objects.equals(name, other.getName())) { return false; } @@ -393,7 +409,8 @@ public class ContentItem extends CcmObject implements Serializable, @Override public String toString(final String data) { - return super.toString(String.format(", name = %s, " + return super.toString(String.format(", itemUuid = %s, " + + "name = %s, " + "contentType = { %s }, " + "title = %s, " + "description = %s, " @@ -402,6 +419,7 @@ public class ContentItem extends CcmObject implements Serializable, + "lifecycle = { %s }, " + "workflow = { %s }" + "%s", + itemUuid, Objects.toString(name), Objects.toString(contentType), Objects.toString(title), diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemManager.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemManager.java index a769c121a..79d901825 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemManager.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemManager.java @@ -202,12 +202,14 @@ public class ContentItemManager { item.setVersion(ContentItemVersion.DRAFT); item.setContentType(contentType.get()); - + if (workflowTemplate != null) { final Workflow workflow = workflowManager.createWorkflow( workflowTemplate); item.setWorkflow(workflow); } + + contentItemRepo.save(item); categoryManager.addObjectToCategory( item, @@ -309,6 +311,8 @@ public class ContentItemManager { copy.setWorkflow(copyWorkflow); } + contentItemRepo.save(copy); + draftItem.getCategories().forEach(categorization -> categoryManager .addObjectToCategory(copy, categorization.getCategory())); diff --git a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java index 3068903c0..840ec86c0 100644 --- a/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java +++ b/ccm-cms/src/main/java/org/librecms/contentsection/ContentItemRepository.java @@ -25,6 +25,7 @@ import org.libreccm.core.CcmObjectRepository; import java.util.List; import java.util.Optional; +import java.util.UUID; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; @@ -56,6 +57,15 @@ public class ContentItemRepository public boolean isNew(final ContentItem item) { return ccmObjectRepo.isNew(item); } + + @Override + public void initNewEntity(final ContentItem item) { + final String uuid = UUID.randomUUID().toString(); + item.setUuid(uuid); + if (item.getItemUuid() == null || item.getItemUuid().isEmpty()) { + item.setItemUuid(uuid); + } + } /** * Finds a content item by is id. diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_6__add_item_uuid.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_6__add_item_uuid.sql new file mode 100644 index 000000000..7481e6f97 --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/h2/V7_0_0_6__add_item_uuid.sql @@ -0,0 +1,5 @@ +ALTER TABLE ccm_cms.content_items + ADD COLUMN item_uuid varchar(255) not null; + +ALTER TABLE ccm_cms.content_items_aud + ADD COLUMN item_uuid varchar(255) not null; diff --git a/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_6__add_item_uuid.sql b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_6__add_item_uuid.sql new file mode 100644 index 000000000..437c1a646 --- /dev/null +++ b/ccm-cms/src/main/resources/db/migrations/org/librecms/ccm_cms/pgsql/V7_0_0_6__add_item_uuid.sql @@ -0,0 +1,5 @@ +ALTER TABLE ccm_cms.content_items + ADD COLUMN item_uuid varchar(255) not null; + +ALTER TABLE ccm_cms.content_items_aud + ADD COLUMN item_uuid varchar(255) not null; \ No newline at end of file diff --git a/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemManagerTest.java b/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemManagerTest.java index d20428c01..7ee14aa38 100644 --- a/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemManagerTest.java +++ b/ccm-cms/src/test/java/org/librecms/contentsection/ContentItemManagerTest.java @@ -236,6 +236,7 @@ public class ContentItemManagerTest { "phase_id", "task_id", "uuid", + "item_uuid", "workflow_id" }) public void createContentItem() { @@ -338,6 +339,7 @@ public class ContentItemManagerTest { "phase_id", "task_id", "uuid", + "item_uuid", "workflow_id" }) public void createContentItemWithWorkflow() { @@ -523,6 +525,7 @@ public class ContentItemManagerTest { "phase_id", "task_id", "uuid", + "item_uuid", "workflow_id" }) public void copyToOtherFolder() { @@ -549,6 +552,7 @@ public class ContentItemManagerTest { "phase_id", "task_id", "uuid", + "item_uuid", "workflow_id" }) public void copyToSameFolder() { @@ -562,7 +566,7 @@ public class ContentItemManagerTest { } @Test(expected = IllegalArgumentException.class) - @InSequence(4100) + @InSequence(4300) @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemManagerTest/data.xml") @ShouldMatchDataSet( @@ -577,7 +581,7 @@ public class ContentItemManagerTest { } @Test(expected = IllegalArgumentException.class) - @InSequence(4100) + @InSequence(4400) @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemManagerTest/data.xml") @ShouldMatchDataSet( @@ -593,7 +597,7 @@ public class ContentItemManagerTest { // publish item (draft) @Test - @InSequence(4200) + @InSequence(5100) @UsingDataSet("datasets/org/librecms/contentsection/" + "ContentItemManagerTest/data.xml") @ShouldMatchDataSet( diff --git a/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql b/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql index d6f22fd72..1cf14742c 100644 --- a/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql +++ b/ccm-cms/src/test/resources-wildfly-remote-h2-mem/scripts/create_ccm_cms_schema.sql @@ -269,6 +269,7 @@ create table CCM_CMS.ARTICLE_LEADS ( create table CCM_CMS.CONTENT_ITEMS ( ANCESTORS varchar(1024), + ITEM_UUID varchar(255) not null, LAUNCH_DATE date, VERSION varchar(255), OBJECT_ID bigint not null, @@ -282,6 +283,7 @@ create table CCM_CMS.ARTICLE_LEADS ( OBJECT_ID bigint not null, REV integer not null, ANCESTORS varchar(1024), + ITEM_UUID varchar(255), LAUNCH_DATE date, VERSION varchar(255), CONTENT_TYPE_ID bigint, diff --git a/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql b/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql index d10765aa7..1e58087ce 100644 --- a/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql +++ b/ccm-cms/src/test/resources-wildfly-remote-pgsql/scripts/create_ccm_cms_schema.sql @@ -269,6 +269,7 @@ CREATE SCHEMA ccm_cms; create table CCM_CMS.CONTENT_ITEMS ( ANCESTORS varchar(1024), + ITEM_UUID varchar(255) not null, LAUNCH_DATE date, VERSION varchar(255), OBJECT_ID int8 not null, @@ -282,6 +283,7 @@ CREATE SCHEMA ccm_cms; OBJECT_ID int8 not null, REV int4 not null, ANCESTORS varchar(1024), + ITEM_UUID varchar(255), LAUNCH_DATE date, VERSION varchar(255), CONTENT_TYPE_ID int8, diff --git a/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql b/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql index 62b9c42b6..b6a8e4503 100644 --- a/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql +++ b/ccm-cms/src/test/resources/datasets/create_ccm_cms_schema.sql @@ -272,6 +272,7 @@ create table CCM_CMS.ARTICLE_LEADS ( LAUNCH_DATE date, VERSION varchar(255), OBJECT_ID bigint not null, + ITEM_UUID varchar(255) not null, CONTENT_TYPE_ID bigint, LIFECYCLE_ID bigint, WORKFLOW_ID bigint, @@ -282,6 +283,7 @@ create table CCM_CMS.ARTICLE_LEADS ( OBJECT_ID bigint not null, REV integer not null, ANCESTORS varchar(1024), + ITEM_UUID varchar(255), LAUNCH_DATE date, VERSION varchar(255), CONTENT_TYPE_ID bigint, diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-copy-to-other-folder.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-copy-to-other-folder.xml index aeec0ce82..c4a34c3b7 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-copy-to-other-folder.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-copy-to-other-folder.xml @@ -199,21 +199,27 @@ default_lifecycle_id="-200" /> @@ -233,8 +239,8 @@ locale="en" localized_value="article1" /> + locale="en" + localized_value="article2" /> diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem-with-workflow.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem-with-workflow.xml index 0dea48d4f..8249fbb7c 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem-with-workflow.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem-with-workflow.xml @@ -223,22 +223,28 @@ default_lifecycle_id="-200" /> diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem.xml index 82d3edd5a..44904a098 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-create-contentitem.xml @@ -236,22 +236,28 @@ default_lifecycle_id="-200" /> @@ -366,12 +372,12 @@ category_index="false" type="folder" /> + category_id="-2100" + object_id="-99200" + category_order="1" + object_order="2" + category_index="false" + type="folder" /> diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-move.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-move.xml index 6c8fe2b4e..d9b1ce907 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-move.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-move.xml @@ -196,18 +196,23 @@ default_lifecycle_id="-200" /> diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-publish.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-publish.xml index d4ca40a22..bdbb1b191 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-publish.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/after-publish.xml @@ -199,21 +199,27 @@ default_lifecycle_id="-200" /> diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/data.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/data.xml index 8a61312d4..d2d59e303 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/data.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemManagerTest/data.xml @@ -196,18 +196,23 @@ default_lifecycle_id="-200" /> diff --git a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml index 64f6c3143..aecf40d78 100644 --- a/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml +++ b/ccm-cms/src/test/resources/datasets/org/librecms/contentsection/ContentItemRepositoryTest/data.xml @@ -17,8 +17,8 @@ display_name="article3" uuid="f4b38abb-234b-4354-bc92-e36c068a1ebd" /> + display_name="article2" + uuid="acae860f-2ffa-450d-b486-054292f0dae6" /> @@ -74,15 +74,19 @@ content_section_id="-1100" />