diff --git a/data-upgrade-news/src/main/java/org/exoplatform/news/upgrade/ContentArticlePropertiesUpgrade.java b/data-upgrade-news/src/main/java/org/exoplatform/news/upgrade/ContentArticlePropertiesUpgrade.java deleted file mode 100644 index 631a68471..000000000 --- a/data-upgrade-news/src/main/java/org/exoplatform/news/upgrade/ContentArticlePropertiesUpgrade.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2024 eXo Platform SAS. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program 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 Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ -package org.exoplatform.news.upgrade; - -import io.meeds.notes.model.NoteMetadataObject; -import org.apache.commons.collections4.MapUtils; -import org.exoplatform.commons.api.settings.SettingService; -import org.exoplatform.commons.api.settings.SettingValue; -import org.exoplatform.commons.api.settings.data.Context; -import org.exoplatform.commons.api.settings.data.Scope; -import org.exoplatform.commons.upgrade.UpgradeProductPlugin; -import org.exoplatform.container.xml.InitParams; -import org.exoplatform.portal.config.UserACL; -import org.exoplatform.services.log.ExoLogger; -import org.exoplatform.services.log.Log; -import org.exoplatform.social.core.manager.IdentityManager; -import org.exoplatform.social.core.space.model.Space; -import org.exoplatform.social.core.space.spi.SpaceService; -import org.exoplatform.social.metadata.MetadataFilter; -import org.exoplatform.social.metadata.MetadataService; -import org.exoplatform.social.metadata.model.MetadataItem; -import org.exoplatform.social.metadata.model.MetadataKey; -import org.exoplatform.wiki.model.Page; -import org.exoplatform.wiki.model.PageVersion; -import org.exoplatform.wiki.service.NoteService; -import org.exoplatform.wiki.utils.Utils; - -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -public class ContentArticlePropertiesUpgrade extends UpgradeProductPlugin { - - private static final Log LOG = - ExoLogger.getLogger(ContentArticlePropertiesUpgrade.class); - - private final NoteService noteService; - - private final MetadataService metadataService; - - private final IdentityManager identityManager; - - private final SpaceService spaceService; - - private final UserACL userACL; - - private final SettingService settingService; - - private static final MetadataKey NOTES_METADATA_KEY = - new MetadataKey("notes", Utils.NOTES_METADATA_OBJECT_TYPE, 0); - - public static final String NEWS_METADATA_NAME = "news"; - - public static final String NEWS_METADATA_DRAFT_OBJECT_TYPE = "newsDraftPage"; - - public static final String NOTE_METADATA_PAGE_OBJECT_TYPE = "notePage"; - - public static final String NOTE_METADATA_DRAFT_PAGE_OBJECT_TYPE = "noteDraftPage"; - - public static final String NEWS_METADATA_PAGE_VERSION_OBJECT_TYPE = "newsPageVersion"; - - public static final String NEWS_METADATA_LATEST_DRAFT_OBJECT_TYPE = "newsLatestDraftPage"; - - public static final String CONTENT_ILLUSTRATION_ID = "illustrationId"; - - public static final String SUMMARY = "summary"; - - public static final String FEATURED_IMAGE_ID = "featuredImageId"; - - private static final String FEATURED_IMAGE_UPDATED_DATE = "featuredImageUpdatedDate"; - - private static final String ARTICLES_UPGRADE_PLUGIN_NAME = "NewsArticlesUpgradePlugin"; - - private static final String ARTICLES_UPGRADE_EXECUTED_KEY = "articlesUpgradeExecuted"; - - public ContentArticlePropertiesUpgrade(InitParams initParams, - NoteService noteService, - MetadataService metadataService, - IdentityManager identityManager, - SpaceService spaceService, - UserACL userACL, - SettingService settingService) { - super(initParams); - this.noteService = noteService; - this.metadataService = metadataService; - this.identityManager = identityManager; - this.spaceService = spaceService; - this.userACL = userACL; - this.settingService = settingService; - } - - @Override - public void processUpgrade(String oldVersion, String newVersion) { - long startupTime = System.currentTimeMillis(); - LOG.info("Start upgrade of content page properties"); - int notMigratedContentPagesPropertiesCount; - int processedContentPagesPropertiesCount = 0; - int totalContentPagesPropertiesCount = 0; - int ignoredContentPagesPropertiesCount = 0; - try { - MetadataFilter metadataFilter = getMetadataFilter(); - metadataFilter.setMetadataObjectTypes(List.of(NEWS_METADATA_PAGE_VERSION_OBJECT_TYPE, - NEWS_METADATA_DRAFT_OBJECT_TYPE, - NEWS_METADATA_LATEST_DRAFT_OBJECT_TYPE)); - List metadataItems = metadataService.getMetadataItemsByFilter(metadataFilter, 0, 0); - totalContentPagesPropertiesCount = metadataItems.size(); - for (MetadataItem metadataItem : metadataItems) { - if (metadataItem != null && !MapUtils.isEmpty(metadataItem.getProperties())) { - Map contentProperties = metadataItem.getProperties(); - Page page = null; - String objectType = NOTE_METADATA_PAGE_OBJECT_TYPE; - if (metadataItem.getObjectType().equals(NEWS_METADATA_PAGE_VERSION_OBJECT_TYPE)) { - PageVersion pageVersion = noteService.getPageVersionById(Long.valueOf(metadataItem.getObjectId())); - if (pageVersion != null && pageVersion.getParent() != null) { - page = pageVersion.getParent(); - } - } else { - page = noteService.getDraftNoteById(metadataItem.getObjectId(), userACL.getSuperUser()); - objectType = NOTE_METADATA_DRAFT_PAGE_OBJECT_TYPE; - } - if (page != null && page.getAuthor() != null) { - NoteMetadataObject noteMetadataObject = buildNoteMetadataObject(page, null, objectType); - MetadataItem noteMetadataItem = getNoteMetadataItem(page, null, objectType); - - if (noteMetadataItem != null) { - LOG.info("ContentArticlePropertiesUpgrade: Ignore : Content page properties already migrated"); - ignoredContentPagesPropertiesCount++; - } else { - Map noteProperties = new HashMap<>(); - long creatorId = Long.parseLong(identityManager.getOrCreateUserIdentity(page.getAuthor()).getId()); - - if (contentProperties.getOrDefault(CONTENT_ILLUSTRATION_ID, null) != null) { - noteProperties.put(FEATURED_IMAGE_ID, contentProperties.get(CONTENT_ILLUSTRATION_ID)); - noteProperties.put(FEATURED_IMAGE_UPDATED_DATE, String.valueOf(new Date().getTime())); - } - noteProperties.put(SUMMARY, contentProperties.get(SUMMARY)); - metadataService.createMetadataItem(noteMetadataObject, NOTES_METADATA_KEY, noteProperties, creatorId); - processedContentPagesPropertiesCount++; - LOG.info("ContentArticlePropertiesUpgrade: Processed content page properties: {}/{}", - processedContentPagesPropertiesCount, - totalContentPagesPropertiesCount); - } - } else { - ignoredContentPagesPropertiesCount++; - LOG.warn("ContentArticlePropertiesUpgrade: Content page properties ignored due to data inconsistency: " - + "page exists: {}, page name: {}", - "ObjectType: {}", - "Page Id: {}", - "Page author: {}", - page != null, - page != null ? page.getName() : null, - objectType, - page != null ? page.getId() : null, - null); - } - } else { - LOG.info("ContentArticlePropertiesUpgrade: Ignore : Content page properties are empty"); - ignoredContentPagesPropertiesCount++; - } - } - } catch (Exception e) { - LOG.error("An error occurred while Migrating content pages properties:", e); - } - notMigratedContentPagesPropertiesCount = totalContentPagesPropertiesCount - - (processedContentPagesPropertiesCount + ignoredContentPagesPropertiesCount); - if (notMigratedContentPagesPropertiesCount == 0) { - LOG.info("End ContentArticlePropertiesUpgrade successful migration: total={} processed={} ignored={} error={}. It took {} ms.", - totalContentPagesPropertiesCount, - processedContentPagesPropertiesCount, - ignoredContentPagesPropertiesCount, - notMigratedContentPagesPropertiesCount, - (System.currentTimeMillis() - startupTime)); - } else { - LOG.warn("End ContentArticlePropertiesUpgrade with some errors: total={} processed={} ignored={} error={}. It took {} ms." - + " The not migrated news articles will be processed again next startup.", - totalContentPagesPropertiesCount, - processedContentPagesPropertiesCount, - ignoredContentPagesPropertiesCount, - notMigratedContentPagesPropertiesCount, - (System.currentTimeMillis() - startupTime)); - throw new IllegalStateException("Some content page properties weren't migrated successfully. It will be re-attempted next startup"); - } - } - - @Override - public boolean shouldProceedToUpgrade(String newVersion, String previousGroupVersion) { - SettingValue settingValue = settingService.get(Context.GLOBAL.id(ARTICLES_UPGRADE_PLUGIN_NAME), - Scope.APPLICATION.id(ARTICLES_UPGRADE_PLUGIN_NAME), - ARTICLES_UPGRADE_EXECUTED_KEY); - if (settingValue == null || settingValue.getValue().equals("false")) { - return false; - } - return super.shouldProceedToUpgrade(newVersion, previousGroupVersion); - } - - private MetadataFilter getMetadataFilter() { - MetadataFilter metadataFilter = new MetadataFilter(); - metadataFilter.setMetadataName(NEWS_METADATA_NAME); - metadataFilter.setMetadataTypeName(NEWS_METADATA_NAME); - return metadataFilter; - } - - private NoteMetadataObject buildNoteMetadataObject(Page note, String lang, String objectType) { - Space space = spaceService.getSpaceByGroupId(note.getWikiOwner()); - long spaceId = space != null ? Long.parseLong(space.getId()) : 0L; - String noteId = String.valueOf(note.getId()); - noteId = lang != null ? noteId + "-" + lang : noteId; - return new NoteMetadataObject(objectType, noteId, note.getParentPageId(), spaceId); - } - - private MetadataItem getNoteMetadataItem(Page note, String lang, String objectType) { - NoteMetadataObject noteMetadataObject = buildNoteMetadataObject(note, lang, objectType); - return metadataService.getMetadataItemsByMetadataAndObject(NOTES_METADATA_KEY, noteMetadataObject) - .stream() - .findFirst() - .orElse(null); - } - -} diff --git a/data-upgrade-news/src/main/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgrade.java b/data-upgrade-news/src/main/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgrade.java index 804cb77f4..e2957325f 100644 --- a/data-upgrade-news/src/main/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgrade.java +++ b/data-upgrade-news/src/main/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgrade.java @@ -36,18 +36,11 @@ import javax.jcr.query.Query; import javax.jcr.query.QueryManager; -import io.meeds.notes.model.NotePageProperties; import org.apache.commons.collections4.ListUtils; -import org.apache.commons.collections4.MapUtils; -import org.exoplatform.commons.api.settings.SettingService; -import org.exoplatform.commons.api.settings.SettingValue; -import org.exoplatform.commons.api.settings.data.Context; -import org.exoplatform.commons.api.settings.data.Scope; import org.exoplatform.commons.file.model.FileItem; import org.exoplatform.commons.file.services.FileService; import org.exoplatform.commons.search.index.IndexingService; -import org.exoplatform.commons.upgrade.UpgradePluginExecutionContext; import org.exoplatform.commons.upgrade.UpgradeProductPlugin; import org.exoplatform.commons.utils.CommonsUtils; import org.exoplatform.commons.utils.HTMLSanitizer; @@ -63,7 +56,6 @@ import org.exoplatform.services.wcm.publication.lifecycle.stageversion.StageAndVersionPublicationConstant; import org.exoplatform.social.core.activity.model.ExoSocialActivity; import org.exoplatform.social.core.manager.ActivityManager; -import org.exoplatform.social.core.manager.IdentityManager; import org.exoplatform.social.core.space.model.Space; import org.exoplatform.social.core.space.spi.SpaceService; import org.exoplatform.social.core.utils.MentionUtils; @@ -72,7 +64,6 @@ import org.exoplatform.social.metadata.model.MetadataKey; import org.exoplatform.social.metadata.model.MetadataObject; import org.exoplatform.social.metadata.model.MetadataType; -import org.exoplatform.wiki.model.DraftPage; import org.exoplatform.wiki.model.Page; import org.exoplatform.wiki.model.PageVersion; import org.exoplatform.wiki.service.NoteService; @@ -82,7 +73,6 @@ import io.meeds.news.search.NewsIndexingServiceConnector; import io.meeds.news.service.NewsService; import io.meeds.news.utils.NewsUtils; -import org.exoplatform.wiki.utils.Utils; public class NewsArticlesUpgrade extends UpgradeProductPlugin { @@ -106,10 +96,6 @@ public class NewsArticlesUpgrade extends UpgradeProductPlugin { private IndexingService indexingService; - private IdentityManager identityManager; - - private SettingService settingService; - private int migratedNewsArticlesCount = 0; public static final MetadataType NEWS_METADATA_TYPE = new MetadataType(1000, "news"); @@ -119,14 +105,6 @@ public class NewsArticlesUpgrade extends UpgradeProductPlugin { private static final MetadataKey NEWS_METADATA_KEY = new MetadataKey(NEWS_METADATA_TYPE.getName(), NEWS_METADATA_NAME, 0); - private static final MetadataKey NOTES_METADATA_KEY = new MetadataKey("notes", Utils.NOTES_METADATA_OBJECT_TYPE, 0); - - private static final String PLUGIN_NAME = "NewsArticlesUpgradePlugin"; - - private static final String PLUGIN_EXECUTED_KEY = "articlesUpgradeExecuted"; - - private boolean upgradeFailed = false; - public NewsArticlesUpgrade(InitParams initParams, RepositoryService repositoryService, SessionProviderService sessionProviderService, @@ -136,9 +114,7 @@ public NewsArticlesUpgrade(InitParams initParams, MetadataService metadataService, FileService fileService, NoteService noteService, - IdentityManager identityManager, - IndexingService indexingService, - SettingService settingService) { + IndexingService indexingService) { super(initParams); this.repositoryService = repositoryService; this.sessionProviderService = sessionProviderService; @@ -148,9 +124,7 @@ public NewsArticlesUpgrade(InitParams initParams, this.metadataService = metadataService; this.fileService = fileService; this.noteService = noteService; - this.identityManager = identityManager; this.indexingService = indexingService; - this.settingService = settingService; } @Override @@ -222,36 +196,10 @@ public void processUpgrade(String oldVersion, String newVersion) { migratedNewsArticlesCount, notMigratedNewsArticlesCount, (System.currentTimeMillis() - startupTime)); - this.upgradeFailed = true; throw new IllegalStateException("Some news articles wasn't executed successfully. It will be re-attempted next startup"); } } - @Override - public void afterUpgrade() { - if (!upgradeFailed) { - settingService.set(Context.GLOBAL.id(PLUGIN_NAME), - Scope.APPLICATION.id(PLUGIN_NAME), - PLUGIN_EXECUTED_KEY, - SettingValue.create(true)); - } - } - - @Override - public boolean shouldProceedToUpgrade(String newVersion, String previousGroupVersion, UpgradePluginExecutionContext upgradePluginExecutionContext) { - SettingValue settingValue = settingService.get(Context.GLOBAL.id(PLUGIN_NAME), - Scope.APPLICATION.id(PLUGIN_NAME), - PLUGIN_EXECUTED_KEY); - boolean shouldUpgrade = super.shouldProceedToUpgrade(newVersion, previousGroupVersion, upgradePluginExecutionContext); - if (!shouldUpgrade && settingValue == null) { - settingService.set(Context.GLOBAL.id(PLUGIN_NAME), - Scope.APPLICATION.id(PLUGIN_NAME), - PLUGIN_EXECUTED_KEY, - SettingValue.create(true)); - } - return shouldUpgrade; - } - public int manageNewsArticles(List newsArticlesNodes, Session session) throws Exception { int notMigratedNewsArticlesCount = 0; for (Node newsArticleNode : newsArticlesNodes) { @@ -260,7 +208,6 @@ public int manageNewsArticles(List newsArticlesNodes, Session session) thr News draftArticle = null; try { News news = convertNewsNodeToNewEntity(newsArticleNode, null); - NotePageProperties properties = news.getProperties(); LOG.info("Migrating news article with id '{}' and title '{}'", newsArticleNode.getUUID(), news.getTitle()); Space space = spaceService.getSpaceById(news.getSpaceId()); @@ -269,14 +216,8 @@ public int manageNewsArticles(List newsArticlesNodes, Session session) thr || getStringProperty(newsArticleNode, "publication:currentState").equals("published")) { article = newsService.createNewsArticlePage(news, news.getAuthor()); - properties.setNoteId(Long.parseLong(article.getId())); - if (news.getAuthor() != null) { - noteService.saveNoteMetadata(properties, - article.getLang(), - Long.valueOf(identityManager.getOrCreateUserIdentity(news.getAuthor()).getId())); - } PageVersion pageVersion = noteService.getPublishedVersionByPageIdAndLang(Long.parseLong(article.getId()), null); - setArticleIllustration(pageVersion.getParent(), article.getSpaceId(), newsArticleNode, "notePage"); + setArticleIllustration(pageVersion.getId(), article.getSpaceId(), newsArticleNode, "newsPageVersion"); setArticleAttachments(pageVersion.getId(), article.getSpaceId(), newsArticleNode, "newsPageVersion"); /* upgrade news id for news targets and favorite metadatata items */ setArticleMetadatasItems(article.getId(), newsArticleNode.getUUID()); @@ -300,15 +241,7 @@ public int manageNewsArticles(List newsArticlesNodes, Session session) thr space.getGroupId(), news.getAuthor(), news.getCreationDate().getTime()); - DraftPage draftPage = noteService.getDraftNoteById(draftArticle.getId(), draftArticle.getAuthor()); - properties.setNoteId(Long.parseLong(draftPage.getId())); - properties.setDraft(true); - if (news.getAuthor() != null) { - noteService.saveNoteMetadata(properties, - draftPage.getLang(), - Long.valueOf(identityManager.getOrCreateUserIdentity(news.getAuthor()).getId())); - } - setArticleIllustration(draftPage, draftArticle.getSpaceId(), newsArticleNode, "noteDraftPage"); + setArticleIllustration(draftArticle.getId(), draftArticle.getSpaceId(), newsArticleNode, "newsDraftPage"); } else {// drafts of existing articles // upgrade existing articles @@ -316,17 +249,10 @@ public int manageNewsArticles(List newsArticlesNodes, Session session) thr Node versionNode = newsArticleNode.getVersionHistory().getSession().getNodeByUUID(versionNodeUUID); Node publishedNode = versionNode.getNode("jcr:frozenNode"); News publishedNews = convertNewsNodeToNewEntity(newsArticleNode, publishedNode); + article = newsService.createNewsArticlePage(publishedNews, publishedNews.getAuthor()); - properties = publishedNews.getProperties(); - properties.setNoteId(Long.parseLong(article.getId())); - if (publishedNews.getAuthor() != null) { - properties = noteService.saveNoteMetadata(properties, - article.getLang(), - Long.valueOf(identityManager.getOrCreateUserIdentity(publishedNews.getAuthor()) - .getId())); - } PageVersion pageVersion = noteService.getPublishedVersionByPageIdAndLang(Long.parseLong(article.getId()), null); - setArticleIllustration(pageVersion.getParent(), article.getSpaceId(), publishedNode, "notePage"); + setArticleIllustration(pageVersion.getId(), article.getSpaceId(), publishedNode, "newsPageVersion"); setArticleAttachments(pageVersion.getId(), article.getSpaceId(), publishedNode, "newsPageVersion"); /* upgrade news id for news targets and favorite metadatata items */ setArticleMetadatasItems(article.getId(), newsArticleNode.getUUID()); @@ -336,15 +262,14 @@ public int manageNewsArticles(List newsArticlesNodes, Session session) thr // upgrade the drafts of existing articles /* attachments will not be migrated for drafts */ - properties.setDraft(true); - news.setProperties(properties); News draftForExistingArticle = newsService.createDraftForExistingPage(news, news.getAuthor(), publishedPage, news.getCreationDate().getTime()); - DraftPage draftPage = noteService.getDraftNoteById(draftForExistingArticle.getId(), - draftForExistingArticle.getAuthor()); - setArticleIllustration(draftPage, draftForExistingArticle.getSpaceId(), newsArticleNode, "noteDraftPage"); + setArticleIllustration(draftForExistingArticle.getId(), + draftForExistingArticle.getSpaceId(), + newsArticleNode, + "newsLatestDraftPage"); // set the update and the created date setArticleCreateAndUpdateDate(article.getId(), article.getSpaceId(), newsArticleNode); } @@ -357,7 +282,7 @@ public int manageNewsArticles(List newsArticlesNodes, Session session) thr newsService.deleteArticle(article, article.getAuthor()); setArticleMetadatasItems(newsArticleNode.getUUID(), article.getId()); } else if (draftArticle != null) { - newsService.deleteDraftArticle(draftArticle.getId(), draftArticle.getAuthor()); + newsService.deleteDraftArticle(draftArticle.getId(), draftArticle.getAuthor(), true); } notMigratedNewsArticlesCount++; } @@ -370,9 +295,7 @@ private News convertNewsNodeToNewEntity(Node newsNode, Node newsVersionNode) thr String portalOwner = CommonsUtils.getCurrentPortalOwner(); news.setTitle(getStringProperty(newsVersionNode != null ? newsVersionNode : newsNode, "exo:title")); news.setName(news.getTitle() + "_" + newsNode.getUUID()); - NotePageProperties properties = new NotePageProperties(); - properties.setSummary(getStringProperty(newsVersionNode != null ? newsVersionNode : newsNode, "exo:summary")); - news.setProperties(properties); + news.setSummary(getStringProperty(newsVersionNode != null ? newsVersionNode : newsNode, "exo:summary")); String body = getStringProperty(newsVersionNode != null ? newsVersionNode : newsNode, "exo:body"); String sanitizedBody = HTMLSanitizer.sanitize(body); sanitizedBody = sanitizedBody.replaceAll("@", "@"); @@ -427,7 +350,7 @@ private Long saveArticleIllustration(InputStream articleIllustrationFileInputStr FileItem articleIllustrationFileItem = new FileItem(null, fileName, mimeType, - "wiki", + "news", uploadSize, new Date(), IdentityConstants.SYSTEM, @@ -441,10 +364,10 @@ private Long saveArticleIllustration(InputStream articleIllustrationFileInputStr } } - private void setArticleIllustration(Page article, + private void setArticleIllustration(String articleId, String spaceId, Node newsNode, - String articleObjectType) throws Exception { + String articleObjectType) throws RepositoryException { if (newsNode.hasNode("illustration")) { Node illustrationNode = newsNode.getNode("illustration"); Node illustrationContentNode = illustrationNode.getNode("jcr:content"); @@ -452,32 +375,19 @@ private void setArticleIllustration(Page article, String mimetype = illustrationContentNode.getProperty("jcr:mimeType").getString(); String illustrationNodeName = illustrationNode.getProperty("exo:title").getString(); Long articleIllustrationId = saveArticleIllustration(illustrationNodeInputStream, illustrationNodeName, mimetype, 0); - if (article != null && article.getAuthor() != null) { - long creatorId = Long.parseLong(identityManager.getOrCreateUserIdentity(article.getAuthor()).getId()); - MetadataObject articleMetaDataObject = new MetadataObject(articleObjectType, - article.getId(), - article.getParentPageId(), - Long.parseLong(spaceId)); - - MetadataItem articleMetadataItem = metadataService - .getMetadataItemsByMetadataAndObject(NOTES_METADATA_KEY, - articleMetaDataObject) - .stream() - .findFirst() - .orElse(null); - Map articleMetadataItemProperties = new HashMap<>(); - if (articleMetadataItem != null && !MapUtils.isEmpty(articleMetadataItem.getProperties())) { - articleMetadataItemProperties = articleMetadataItem.getProperties(); - } - articleMetadataItemProperties.put("featuredImageId", String.valueOf(articleIllustrationId)); - articleMetadataItemProperties.put("featuredImageUpdatedDate", String.valueOf(new Date().getTime())); - - if (articleMetadataItem != null) { - articleMetadataItem.setProperties(articleMetadataItemProperties); - metadataService.updateMetadataItem(articleMetadataItem, creatorId); - } else { - metadataService.createMetadataItem(articleMetaDataObject, NOTES_METADATA_KEY, articleMetadataItemProperties, creatorId); + MetadataObject articleMetaDataObject = new MetadataObject(articleObjectType, articleId, null, Long.parseLong(spaceId)); + + MetadataItem articleMetadataItem = metadataService.getMetadataItemsByMetadataAndObject(NEWS_METADATA_KEY, + articleMetaDataObject) + .get(0); + if (articleMetadataItem != null) { + Map articleMetadataItemProperties = articleMetadataItem.getProperties(); + if (articleMetadataItemProperties == null) { + articleMetadataItemProperties = new HashMap<>(); } + articleMetadataItemProperties.put("illustrationId", String.valueOf(articleIllustrationId)); + articleMetadataItem.setProperties(articleMetadataItemProperties); + metadataService.updateMetadataItem(articleMetadataItem, articleMetadataItem.getCreatorId()); } } } diff --git a/data-upgrade-news/src/main/resources/conf/portal/configuration.xml b/data-upgrade-news/src/main/resources/conf/portal/configuration.xml index 53de8dd9e..a47efa764 100644 --- a/data-upgrade-news/src/main/resources/conf/portal/configuration.xml +++ b/data-upgrade-news/src/main/resources/conf/portal/configuration.xml @@ -48,39 +48,6 @@ - - ContentArticlePropertiesUpgrade - addUpgradePlugin - org.exoplatform.news.upgrade.ContentArticlePropertiesUpgrade - Migrate content properties from content to note - - - product.group.id - The groupId of the product - org.exoplatform.platform - - - plugin.execution.order - The plugin execution order - 1 - - - plugin.upgrade.execute.once - Execute this upgrade plugin only once - true - - - plugin.upgrade.async.execution - The plugin will be executed in an asynchronous mode - true - - - plugin.upgrade.target.version - Target version of the plugin - 7.0.0 - - - diff --git a/data-upgrade-news/src/test/java/org/exoplatform/news/upgrade/ContentArticlePropertiesUpgradeTest.java b/data-upgrade-news/src/test/java/org/exoplatform/news/upgrade/ContentArticlePropertiesUpgradeTest.java deleted file mode 100644 index 60f4b4471..000000000 --- a/data-upgrade-news/src/test/java/org/exoplatform/news/upgrade/ContentArticlePropertiesUpgradeTest.java +++ /dev/null @@ -1,164 +0,0 @@ -package org.exoplatform.news.upgrade; - -import io.meeds.notes.model.NoteMetadataObject; -import org.exoplatform.commons.api.settings.SettingService; -import org.exoplatform.commons.api.settings.SettingValue; -import org.exoplatform.container.xml.InitParams; -import org.exoplatform.container.xml.ValueParam; -import org.exoplatform.portal.config.UserACL; -import org.exoplatform.social.core.identity.model.Identity; -import org.exoplatform.social.core.manager.IdentityManager; -import org.exoplatform.social.core.space.spi.SpaceService; -import org.exoplatform.social.metadata.MetadataService; -import org.exoplatform.social.metadata.model.MetadataItem; -import org.exoplatform.social.metadata.model.MetadataKey; -import org.exoplatform.wiki.model.DraftPage; -import org.exoplatform.wiki.model.Page; -import org.exoplatform.wiki.model.PageVersion; -import org.exoplatform.wiki.service.NoteService; -import org.exoplatform.wiki.utils.Utils; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.data.elasticsearch.annotations.Setting; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -@RunWith(MockitoJUnitRunner.class) -public class ContentArticlePropertiesUpgradeTest { - - @Mock - private NoteService noteService; - - @Mock - private MetadataService metadataService; - - @Mock - private IdentityManager identityManager; - - @Mock - private SpaceService spaceService; - - @Mock - private UserACL userACL; - - @Mock - private SettingService settingService; - - private ContentArticlePropertiesUpgrade contentArticlePropertiesUpgrade; - - private static final MetadataKey NOTES_METADATA_KEY = new MetadataKey("notes", Utils.NOTES_METADATA_OBJECT_TYPE, 0); - - private static final String ILLUSTRATION_ID = "illustrationId"; - - private static final String SUMMARY = "summary"; - - @Before - public void setUp() { - InitParams initParams = new InitParams(); - ValueParam valueParam = new ValueParam(); - valueParam.setName("product.group.id"); - valueParam.setValue("org.exoplatform.platform"); - initParams.addParameter(valueParam); - this.contentArticlePropertiesUpgrade = new ContentArticlePropertiesUpgrade(initParams, - noteService, - metadataService, - identityManager, - spaceService, - userACL, - settingService); - } - - @Test - public void processUpgrade() throws Exception { - MetadataItem page = new MetadataItem(); - MetadataItem draftOfPage = new MetadataItem(); - MetadataItem draftOfPage2 = new MetadataItem(); - MetadataItem draft = new MetadataItem(); - page.setId(1L); - page.setObjectType("newsPageVersion"); - page.setObjectId("1"); - page.setProperties(Map.of(ILLUSTRATION_ID, "1", SUMMARY, "test summary")); - - draftOfPage.setId(2L); - draftOfPage.setObjectType("newsLatestDraftPage"); - draftOfPage.setObjectId("2"); - draftOfPage.setProperties(Map.of(ILLUSTRATION_ID, "2", SUMMARY, "test summary")); - - draftOfPage2.setId(4L); - draftOfPage2.setObjectType("newsLatestDraftPage"); - draftOfPage2.setObjectId("6"); - draftOfPage2.setProperties(Map.of(ILLUSTRATION_ID, "4", SUMMARY, "test summary")); - - draft.setId(1L); - draft.setObjectId("3"); - draft.setObjectType("newsDraftPage"); - draft.setProperties(Map.of(ILLUSTRATION_ID, "3", SUMMARY, "test summary")); - - Page parentPage = new Page(); - parentPage.setId("2"); - parentPage.setAuthor("user"); - PageVersion pageVersion = new PageVersion(); - pageVersion.setId("1"); - pageVersion.setParent(parentPage); - pageVersion.setAuthor("user"); - - DraftPage draftOfExistingPage = new DraftPage(); - draftOfExistingPage.setId("2"); - draftOfExistingPage.setAuthor("user"); - - DraftPage draftOfExistingPage2 = new DraftPage(); - draftOfExistingPage2.setId("6"); - - DraftPage draftPage = new DraftPage(); - draftPage.setId("3"); - draftPage.setAuthor("user"); - - MetadataItem notePage = new MetadataItem(); - notePage.setId(5L); - notePage.setObjectType("notePage"); - notePage.setObjectId("2"); - - List metadataItems = List.of(page, draftOfPage, draftOfPage2, draft); - Identity identity = mock(Identity.class); - when(metadataService.getMetadataItemsByFilter(any(), anyLong(), anyLong())).thenReturn(metadataItems); - when(noteService.getPageVersionById(anyLong())).thenReturn(pageVersion); - when(noteService.getDraftNoteById(anyString(), anyString())).thenReturn(draftOfExistingPage, draftOfExistingPage2, draftPage); - when(identityManager.getOrCreateUserIdentity(anyString())).thenReturn(identity); - when(metadataService.getMetadataItemsByMetadataAndObject(NOTES_METADATA_KEY, - new NoteMetadataObject("noteDraftPage", "3", null, 0L))) - .thenReturn(new ArrayList<>()); - when(metadataService.getMetadataItemsByMetadataAndObject(NOTES_METADATA_KEY, - new NoteMetadataObject("noteDraftPage", "2", null, 0L))) - .thenReturn(new ArrayList<>()); - when(metadataService.getMetadataItemsByMetadataAndObject(NOTES_METADATA_KEY, - new NoteMetadataObject("notePage", "2", null, 0L))) - .thenReturn(List.of(notePage)); - - when(userACL.getSuperUser()).thenReturn("root"); - when(identity.getId()).thenReturn("1"); - contentArticlePropertiesUpgrade.processUpgrade(null, null); - - verify(metadataService, times(2)).createMetadataItem(any(), any(), any(), anyLong()); - } - - @Test - public void shouldProceedToUpgrade() { - SettingValue settingValue = mock(SettingValue.class); - when(settingValue.getValue()).thenReturn("false"); - when(settingService.get(any(), any(), anyString())).thenReturn(null, settingValue); - assertFalse(contentArticlePropertiesUpgrade.shouldProceedToUpgrade("1.0", "1.2")); - assertFalse(contentArticlePropertiesUpgrade.shouldProceedToUpgrade("1.0", "1.2")); - when(settingValue.getValue()).thenReturn("true"); - assertTrue(contentArticlePropertiesUpgrade.shouldProceedToUpgrade("1.0", "1.2")); - } -} diff --git a/data-upgrade-news/src/test/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgradeTest.java b/data-upgrade-news/src/test/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgradeTest.java index d9c489cf1..2098fe147 100644 --- a/data-upgrade-news/src/test/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgradeTest.java +++ b/data-upgrade-news/src/test/java/org/exoplatform/news/upgrade/jcr/NewsArticlesUpgradeTest.java @@ -16,16 +16,18 @@ */ package org.exoplatform.news.upgrade.jcr; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.mockStatic; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -43,12 +45,6 @@ import javax.jcr.query.QueryManager; import javax.jcr.query.QueryResult; -import io.meeds.notes.model.NotePageProperties; -import org.exoplatform.commons.api.settings.SettingService; -import org.exoplatform.commons.api.settings.SettingValue; -import org.exoplatform.commons.upgrade.UpgradePluginExecutionContext; -import org.exoplatform.social.core.identity.model.Identity; -import org.exoplatform.social.core.manager.IdentityManager; import org.junit.AfterClass; import org.junit.Before; import org.junit.Test; @@ -120,15 +116,9 @@ public class NewsArticlesUpgradeTest { @Mock private FileService fileService; - @Mock - private IdentityManager identityManager; - @Mock private IndexingService indexingService; - @Mock - private SettingService settingService; - private NewsArticlesUpgrade newsArticlesUpgrade; @AfterClass @@ -154,17 +144,12 @@ public void setUp() { metadataService, fileService, noteService, - identityManager, - indexingService, - settingService); + indexingService); } @Test public void testProcessUpgrade() throws Exception { // Mock the session provider and session - Identity identity = mock(Identity.class); - when(identity.getId()).thenReturn("1"); - when(identityManager.getOrCreateUserIdentity(anyString())).thenReturn(identity); when(repositoryService.getCurrentRepository()).thenReturn(repository); when(repository.getConfiguration()).thenReturn(repositoryEntry); when(repositoryEntry.getDefaultWorkspaceName()).thenReturn("collaboration"); @@ -222,12 +207,9 @@ public void testProcessUpgrade() throws Exception { News article = mock(News.class); when(article.getId()).thenReturn("1"); when(article.getSpaceId()).thenReturn("1"); - Page page = new Page(); - page.setId("1"); - page.setAuthor("user"); - when(identityManager.getOrCreateUserIdentity("user")).thenReturn(identity); + when(newsService.createNewsArticlePage(any(News.class), anyString())).thenReturn(article); + PageVersion pageVersion = mock(PageVersion.class); - when(pageVersion.getParent()).thenReturn(page); when(noteService.getPublishedVersionByPageIdAndLang(anyLong(), nullable(String.class))).thenReturn(pageVersion); when(noteService.getNoteById(anyString())).thenReturn(mock(Page.class)); when(pageVersion.getId()).thenReturn("1"); @@ -285,12 +267,6 @@ public void testProcessUpgrade() throws Exception { when(startTimeProperty.getDate()).thenReturn(startTimePropertyCalendar); when(startTimePropertyCalendar.getTime()).thenReturn(mock(Date.class)); - Method method = newsArticlesUpgrade.getClass().getDeclaredMethod("convertNewsNodeToNewEntity", Node.class, Node.class); - method.setAccessible(true); - News news1 = (News) method.invoke(newsArticlesUpgrade, node1, null); - News news2 = (News) method.invoke(newsArticlesUpgrade, node2, null); - when(newsService.createNewsArticlePage(news1, "")).thenReturn(article); - when(newsService.createNewsArticlePage(news2, "")).thenReturn(article); // Run the processUpgrade method newsArticlesUpgrade.processUpgrade("1.0", "2.0"); @@ -301,18 +277,4 @@ public void testProcessUpgrade() throws Exception { verify(activityManager, times(1)).getActivity(any()); verify(activityManager, times(1)).updateActivity(any(ExoSocialActivity.class), eq(false)); } - - @Test - public void shouldProceedToUpgrade() { - SettingValue settingValue = mock(SettingValue.class); - UpgradePluginExecutionContext context = new UpgradePluginExecutionContext("0.9", 1); - when(settingService.get(any(), any(), anyString())).thenReturn(null); - newsArticlesUpgrade.shouldProceedToUpgrade("0.9", "1.0", context); - verify(settingService, times(1)).set(any(), any(), anyString(), any()); - reset(settingService); - when(settingService.get(any(), any(), anyString())).thenReturn(settingValue); - context.setVersion("1.2"); - newsArticlesUpgrade.shouldProceedToUpgrade("1.2", "1.0", context); - verify(settingService, times(0)).set(any(), any(), anyString(), any()); - } -} +} \ No newline at end of file