diff --git a/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentId.java b/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentEntryParentId.java similarity index 75% rename from de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentId.java rename to de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentEntryParentId.java index 3f0d45b6f2d..458aa45131f 100644 --- a/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentId.java +++ b/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentEntryParentId.java @@ -30,24 +30,28 @@ import javax.annotation.Nullable; +/** + * Most likely you want to use {@link CommentEntryId}. + * Please also read the description of {@link CommentEntryRepository} + */ @Value -public class CommentId implements RepoIdAware +public class CommentEntryParentId implements RepoIdAware { int repoId; @JsonCreator - public static CommentId ofRepoId(final int repoId) + public static CommentEntryParentId ofRepoId(final int repoId) { - return new CommentId(repoId); + return new CommentEntryParentId(repoId); } @Nullable - public static CommentId ofRepoIdOrNull(final int repoId) + public static CommentEntryParentId ofRepoIdOrNull(final int repoId) { return repoId > 0 ? ofRepoId(repoId) : null; } - private CommentId(final int repoId) + private CommentEntryParentId(final int repoId) { this.repoId = Check.assumeGreaterThanZero(repoId, "CM_Chat_ID"); } diff --git a/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentEntryRepository.java b/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentEntryRepository.java index fc50efbd1f2..57bd751139a 100644 --- a/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentEntryRepository.java +++ b/de.metas.adempiere.adempiere/base/src/main/java/de/metas/comments/CommentEntryRepository.java @@ -44,10 +44,12 @@ import java.util.List; /** - * A Comment is made of an {@link I_CM_Chat} as the parent storing the table and record IDs, + * A CommentEntry is made of an {@link I_CM_Chat} as the parent storing the table and record IDs, * and an {@link I_CM_ChatEntry} as the children storing the text data of the Comment. *

- * There can be multiple Comments for a record. + * There can be multiple CommentEntries for a PO. + *

+ * Even though {@link CommentEntryParentId} exists, it has extremely limited purpose. Most likely you want to use {@link CommentEntryId}. */ @Repository public class CommentEntryRepository @@ -57,10 +59,10 @@ public class CommentEntryRepository public void createCommentEntry(final @NonNull String characterData, @NonNull final TableRecordReference tableRecordReference) { - final CommentId commentId = getOrCreateChat(tableRecordReference); + final CommentEntryParentId commentEntryParentId = getOrCreateParent(tableRecordReference); final I_CM_ChatEntry chatEntry = InterfaceWrapperHelper.newInstance(I_CM_ChatEntry.class); - chatEntry.setCM_Chat_ID(commentId.getRepoId()); + chatEntry.setCM_Chat_ID(commentEntryParentId.getRepoId()); chatEntry.setConfidentialType(X_CM_ChatEntry.CONFIDENTIALTYPE_PublicInformation); chatEntry.setCharacterData(characterData); chatEntry.setChatEntryType(X_CM_ChatEntry.CHATENTRYTYPE_NoteFlat); @@ -70,25 +72,25 @@ public void createCommentEntry(final @NonNull String characterData, @NonNull fin @NonNull public List retrieveLastCommentEntries(@NonNull final TableRecordReference tableRecordReference, final int maxNumberOfRecords) { - final CommentId commentId = getChatIdOrNull(tableRecordReference); + final CommentEntryParentId commentEntryParentId = getParentIdOrNull(tableRecordReference); - if (commentId == null) + if (commentEntryParentId == null) { return ImmutableList.of(); } return queryBL.createQueryBuilder(I_CM_ChatEntry.class) - .addEqualsFilter(I_CM_ChatEntry.COLUMNNAME_CM_Chat_ID, commentId) + .addEqualsFilter(I_CM_ChatEntry.COLUMNNAME_CM_Chat_ID, commentEntryParentId) .orderByDescending(I_CM_ChatEntry.COLUMNNAME_Created) .setLimit(maxNumberOfRecords) .create() .iterateAndStream() - .map(CommentEntryRepository::toRecordComment) + .map(CommentEntryRepository::toCommentEntry) .collect(GuavaCollectors.toImmutableList()); } @NonNull - private static CommentEntry toRecordComment(@NonNull final I_CM_ChatEntry chatEntry) + private static CommentEntry toCommentEntry(@NonNull final I_CM_ChatEntry chatEntry) { final UserId createdBy = UserId.ofRepoId(chatEntry.getCreatedBy()); final ZonedDateTime created = TimeUtil.asZonedDateTime(chatEntry.getCreated()); @@ -104,13 +106,13 @@ private static CommentEntry toRecordComment(@NonNull final I_CM_ChatEntry chatEn } @NonNull - private CommentId getOrCreateChat(final @NonNull TableRecordReference tableRecordReference) + private CommentEntryParentId getOrCreateParent(final @NonNull TableRecordReference tableRecordReference) { - final CommentId commentId = getChatIdOrNull(tableRecordReference); + final CommentEntryParentId commentEntryParentId = getParentIdOrNull(tableRecordReference); - if (commentId != null) + if (commentEntryParentId != null) { - return commentId; + return commentEntryParentId; } final String tableName = tableDAO.retrieveTableName(AdTableId.ofRepoId(tableRecordReference.getAD_Table_ID())); @@ -122,17 +124,17 @@ private CommentId getOrCreateChat(final @NonNull TableRecordReference tableRecor chat.setConfidentialType(X_CM_Chat.CONFIDENTIALTYPE_PublicInformation); chat.setModerationType(X_CM_Chat.MODERATIONTYPE_NotModerated); InterfaceWrapperHelper.save(chat); - return CommentId.ofRepoId(chat.getCM_Chat_ID()); + return CommentEntryParentId.ofRepoId(chat.getCM_Chat_ID()); } @Nullable - private CommentId getChatIdOrNull(final @NonNull TableRecordReference tableRecordReference) + private CommentEntryParentId getParentIdOrNull(final @NonNull TableRecordReference tableRecordReference) { return queryBL.createQueryBuilder(I_CM_Chat.class) .addEqualsFilter(I_CM_Chat.COLUMNNAME_AD_Table_ID, tableRecordReference.getAD_Table_ID()) .addEqualsFilter(I_CM_Chat.COLUMNNAME_Record_ID, tableRecordReference.getRecord_ID()) .orderBy(I_CM_Chat.COLUMNNAME_CM_Chat_ID) .create() - .firstId(CommentId::ofRepoIdOrNull); + .firstId(CommentEntryParentId::ofRepoIdOrNull); } } diff --git a/de.metas.adempiere.adempiere/migration/src/main/sql/postgresql/system/10-de.metas.adempiere/5558200_sys_gh6504_UpdateTrls.sql b/de.metas.adempiere.adempiere/migration/src/main/sql/postgresql/system/10-de.metas.adempiere/5558200_sys_gh6504_UpdateTrls.sql new file mode 100644 index 00000000000..1894f7ccc82 --- /dev/null +++ b/de.metas.adempiere.adempiere/migration/src/main/sql/postgresql/system/10-de.metas.adempiere/5558200_sys_gh6504_UpdateTrls.sql @@ -0,0 +1,85 @@ +-- 2020-04-29T08:04:53.341Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,AD_Org_ID,EntityType) VALUES ('I','Add Comment',0,'Y',TO_TIMESTAMP('2020-04-29 11:04:53','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-04-29 11:04:53','YYYY-MM-DD HH24:MI:SS'),100,544979,'webui.window.comments.add.caption',0,'D') +; + +-- 2020-04-29T08:04:53.344Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language, t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Message t WHERE l.IsActive='Y'AND (l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N') AND t.AD_Message_ID=544979 AND NOT EXISTS (SELECT 1 FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID) +; + +-- 2020-04-29T08:06:24.780Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,AD_Org_ID,EntityType) VALUES ('I','Created',0,'Y',TO_TIMESTAMP('2020-04-29 11:06:24','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-04-29 11:06:24','YYYY-MM-DD HH24:MI:SS'),100,544980,'webui.window.comments.created.caption',0,'D') +; + +-- 2020-04-29T08:06:24.781Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language, t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Message t WHERE l.IsActive='Y'AND (l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N') AND t.AD_Message_ID=544980 AND NOT EXISTS (SELECT 1 FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID) +; + +-- 2020-04-29T08:06:29.818Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message_Trl SET MsgText='Erstellt', IsTranslated='Y',Updated=TO_TIMESTAMP('2020-04-29 11:06:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Language='de_CH' AND AD_Message_ID=544980 +; + +-- 2020-04-29T08:06:33.945Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message_Trl SET IsTranslated='Y',Updated=TO_TIMESTAMP('2020-04-29 11:06:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Language='en_US' AND AD_Message_ID=544980 +; + +-- 2020-04-29T08:06:43.442Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message SET MsgText='Erstellt',Updated=TO_TIMESTAMP('2020-04-29 11:06:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=544980 +; + +-- 2020-04-29T08:07:21.637Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message SET Value='webui.window.comments.created',Updated=TO_TIMESTAMP('2020-04-29 11:07:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=544980 +; + +-- 2020-04-29T08:07:44.627Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +INSERT INTO AD_Message (MsgType,MsgText,AD_Client_ID,IsActive,Created,CreatedBy,Updated,UpdatedBy,AD_Message_ID,Value,AD_Org_ID,EntityType) VALUES ('I','Erstellt durch',0,'Y',TO_TIMESTAMP('2020-04-29 11:07:44','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2020-04-29 11:07:44','YYYY-MM-DD HH24:MI:SS'),100,544981,'webui.window.comments.createdBy',0,'D') +; + +-- 2020-04-29T08:07:44.629Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +INSERT INTO AD_Message_Trl (AD_Language,AD_Message_ID, MsgText,MsgTip, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language, t.AD_Message_ID, t.MsgText,t.MsgTip, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Message t WHERE l.IsActive='Y'AND (l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N') AND t.AD_Message_ID=544981 AND NOT EXISTS (SELECT 1 FROM AD_Message_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Message_ID=t.AD_Message_ID) +; + +-- 2020-04-29T08:07:49.566Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message_Trl SET IsTranslated='Y',Updated=TO_TIMESTAMP('2020-04-29 11:07:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Language='de_CH' AND AD_Message_ID=544981 +; + +-- 2020-04-29T08:07:57.816Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message_Trl SET MsgText='Created By',Updated=TO_TIMESTAMP('2020-04-29 11:07:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Language='nl_NL' AND AD_Message_ID=544981 +; + +-- 2020-04-29T08:08:00.884Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message_Trl SET MsgText='Created By', IsTranslated='Y',Updated=TO_TIMESTAMP('2020-04-29 11:08:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Language='en_US' AND AD_Message_ID=544981 +; + +-- 2020-04-29T08:21:40.983Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message SET Value='webui.window.comments.add',Updated=TO_TIMESTAMP('2020-04-29 11:21:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=544979 +; + +-- 2020-04-29T08:21:44.725Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message_Trl SET MsgText='Kommentar hinzufügen', IsTranslated='Y',Updated=TO_TIMESTAMP('2020-04-29 11:21:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Language='de_CH' AND AD_Message_ID=544979 +; + +-- 2020-04-29T08:21:48.546Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message_Trl SET IsTranslated='Y',Updated=TO_TIMESTAMP('2020-04-29 11:21:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Language='en_US' AND AD_Message_ID=544979 +; + +-- 2020-04-29T08:21:54.066Z +-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator +UPDATE AD_Message SET MsgText='Kommentar hinzufügen',Updated=TO_TIMESTAMP('2020-04-29 11:21:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Message_ID=544979 +; +