001// --------------------------------------------------------------------------------
002// Copyright 2002-2025 Echo Three, LLC
003//
004// Licensed under the Apache License, Version 2.0 (the "License");
005// you may not use this file except in compliance with the License.
006// You may obtain a copy of the License at
007//
008//     http://www.apache.org/licenses/LICENSE-2.0
009//
010// Unless required by applicable law or agreed to in writing, software
011// distributed under the License is distributed on an "AS IS" BASIS,
012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013// See the License for the specific language governing permissions and
014// limitations under the License.
015// --------------------------------------------------------------------------------
016
017package com.echothree.model.control.forum.server.transfer;
018
019import com.echothree.model.control.forum.common.ForumOptions;
020import com.echothree.model.control.forum.common.transfer.ForumMessagePartTransfer;
021import com.echothree.model.control.forum.common.transfer.ForumMessageTransfer;
022import com.echothree.model.control.forum.server.control.ForumControl;
023import com.echothree.model.control.icon.server.control.IconControl;
024import com.echothree.model.data.forum.server.entity.ForumMessage;
025import com.echothree.model.data.user.server.entity.UserVisit;
026import com.echothree.util.common.transfer.ListWrapper;
027import com.echothree.util.common.transfer.MapWrapper;
028import com.echothree.util.server.persistence.Session;
029import javax.enterprise.context.RequestScoped;
030
031@RequestScoped
032public class ForumMessageTransferCache
033        extends BaseForumTransferCache<ForumMessage, ForumMessageTransfer> {
034
035    ForumControl forumControl = Session.getModelController(ForumControl.class);
036    IconControl iconControl = Session.getModelController(IconControl.class);
037
038    boolean includeForumMessageRoles;
039    boolean includeForumMessageParts;
040    boolean includeForumMessageAttachments;
041
042    /** Creates a new instance of ForumMessageTransferCache */
043    protected ForumMessageTransferCache() {
044        super();
045
046        var options = session.getOptions();
047        if(options != null) {
048            setIncludeUuid(options.contains(ForumOptions.ForumMessageIncludeUuid));
049            includeForumMessageRoles = options.contains(ForumOptions.ForumMessageIncludeForumMessageRoles);
050            includeForumMessageParts = options.contains(ForumOptions.ForumMessageIncludeForumMessageParts);
051            includeForumMessageAttachments = options.contains(ForumOptions.ForumMessageIncludeForumMessageAttachments);
052            setIncludeEntityAttributeGroups(options.contains(ForumOptions.ForumMessageIncludeEntityAttributeGroups));
053            setIncludeTagScopes(options.contains(ForumOptions.ForumMessageIncludeTagScopes));
054        }
055        
056        setIncludeEntityInstance(true);
057    }
058
059    public ForumMessageTransfer getForumMessageTransfer(UserVisit userVisit, ForumMessage forumMessage) {
060        var forumMessageTransfer = get(forumMessage);
061
062        if(forumMessageTransfer == null) {
063            var forumMessageDetail = forumMessage.getLastDetail();
064            var forumMessageName = forumMessageDetail.getForumMessageName();
065            var forumThreadTransfer = forumControl.getForumThreadTransfer(userVisit, forumMessageDetail.getForumThread());
066            var forumMessageTypeTransfer = forumControl.getForumMessageTypeTransfer(userVisit, forumMessageDetail.getForumMessageType());
067            var parentForumMessage = forumMessageDetail.getParentForumMessage();
068            var parentForumMessageTransfer = parentForumMessage == null ? null : forumControl.getForumMessageTransfer(userVisit, parentForumMessage);
069            var icon = forumMessageDetail.getIcon();
070            var iconTransfer = icon == null ? null : iconControl.getIconTransfer(userVisit, icon);
071            var unformattedPostedTime = forumMessageDetail.getPostedTime();
072            var postedTime = formatTypicalDateTime(userVisit, unformattedPostedTime);
073
074            forumMessageTransfer = new ForumMessageTransfer(forumMessageName, forumThreadTransfer, forumMessageTypeTransfer, parentForumMessageTransfer, iconTransfer, unformattedPostedTime, postedTime);
075            put(userVisit, forumMessage, forumMessageTransfer);
076
077            if(includeForumMessageRoles) {
078                forumMessageTransfer.setForumMessageRoles(new ListWrapper<>(forumControl.getForumMessageRoleTransfersByForumMessage(userVisit, forumMessage)));
079            }
080
081            if(includeForumMessageParts) {
082                var forumMessagePartTransfers = forumControl.getForumMessagePartTransfersByForumMessageAndLanguage(userVisit, forumMessage, getLanguage(userVisit));
083                var forumMessageParts = new MapWrapper<ForumMessagePartTransfer>(forumMessagePartTransfers.size());
084
085                forumMessagePartTransfers.forEach((forumMessagePartTransfer) -> {
086                    forumMessageParts.put(forumMessagePartTransfer.getForumMessagePartType().getForumMessagePartTypeName(), forumMessagePartTransfer);
087                });
088
089                forumMessageTransfer.setForumMessageParts(forumMessageParts);
090            }
091
092            if(includeForumMessageAttachments) {
093                forumMessageTransfer.setForumMessageAttachments(new ListWrapper<>(forumControl.getForumMessageAttachmentTransfersByForumMessage(userVisit, forumMessage)));
094            }
095        }
096
097        return forumMessageTransfer;
098    }
099}