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" />