001// --------------------------------------------------------------------------------
002// Copyright 2002-2024 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.common.transfer.ForumMessageTypeTransfer;
023import com.echothree.model.control.forum.common.transfer.ForumThreadTransfer;
024import com.echothree.model.control.forum.server.control.ForumControl;
025import com.echothree.model.control.icon.common.transfer.IconTransfer;
026import com.echothree.model.control.icon.server.control.IconControl;
027import com.echothree.model.data.forum.server.entity.ForumMessage;
028import com.echothree.model.data.forum.server.entity.ForumMessageDetail;
029import com.echothree.model.data.icon.server.entity.Icon;
030import com.echothree.model.data.user.server.entity.UserVisit;
031import com.echothree.util.common.transfer.ListWrapper;
032import com.echothree.util.common.transfer.MapWrapper;
033import com.echothree.util.server.persistence.Session;
034import java.util.List;
035import java.util.Set;
036
037public class ForumMessageTransferCache
038        extends BaseForumTransferCache<ForumMessage, ForumMessageTransfer> {
039
040    IconControl iconControl = Session.getModelController(IconControl.class);
041    boolean includeForumMessageRoles;
042    boolean includeForumMessageParts;
043    boolean includeForumMessageAttachments;
044
045    /** Creates a new instance of ForumMessageTransferCache */
046    public ForumMessageTransferCache(UserVisit userVisit, ForumControl forumControl) {
047        super(userVisit, forumControl);
048
049        var options = session.getOptions();
050        if(options != null) {
051            setIncludeGuid(options.contains(ForumOptions.ForumMessageIncludeGuid));
052            includeForumMessageRoles = options.contains(ForumOptions.ForumMessageIncludeForumMessageRoles);
053            includeForumMessageParts = options.contains(ForumOptions.ForumMessageIncludeForumMessageParts);
054            includeForumMessageAttachments = options.contains(ForumOptions.ForumMessageIncludeForumMessageAttachments);
055            setIncludeEntityAttributeGroups(options.contains(ForumOptions.ForumMessageIncludeEntityAttributeGroups));
056            setIncludeTagScopes(options.contains(ForumOptions.ForumMessageIncludeTagScopes));
057        }
058        
059        setIncludeEntityInstance(true);
060    }
061
062    public ForumMessageTransfer getForumMessageTransfer(ForumMessage forumMessage) {
063        ForumMessageTransfer forumMessageTransfer = get(forumMessage);
064
065        if(forumMessageTransfer == null) {
066            ForumMessageDetail forumMessageDetail = forumMessage.getLastDetail();
067            String forumMessageName = forumMessageDetail.getForumMessageName();
068            ForumThreadTransfer forumThreadTransfer = forumControl.getForumThreadTransfer(userVisit, forumMessageDetail.getForumThread());
069            ForumMessageTypeTransfer forumMessageTypeTransfer = forumControl.getForumMessageTypeTransfer(userVisit, forumMessageDetail.getForumMessageType());
070            ForumMessage parentForumMessage = forumMessageDetail.getParentForumMessage();
071            ForumMessageTransfer parentForumMessageTransfer = parentForumMessage == null ? null : forumControl.getForumMessageTransfer(userVisit, parentForumMessage);
072            Icon icon = forumMessageDetail.getIcon();
073            IconTransfer iconTransfer = icon == null ? null : iconControl.getIconTransfer(userVisit, icon);
074            Long unformattedPostedTime = forumMessageDetail.getPostedTime();
075            String postedTime = formatTypicalDateTime(unformattedPostedTime);
076
077            forumMessageTransfer = new ForumMessageTransfer(forumMessageName, forumThreadTransfer, forumMessageTypeTransfer, parentForumMessageTransfer, iconTransfer, unformattedPostedTime, postedTime);
078            put(forumMessage, forumMessageTransfer);
079
080            if(includeForumMessageRoles) {
081                forumMessageTransfer.setForumMessageRoles(new ListWrapper<>(forumControl.getForumMessageRoleTransfersByForumMessage(userVisit, forumMessage)));
082            }
083
084            if(includeForumMessageParts) {
085                List<ForumMessagePartTransfer> forumMessagePartTransfers = forumControl.getForumMessagePartTransfersByForumMessageAndLanguage(userVisit, forumMessage, getLanguage());
086                MapWrapper<ForumMessagePartTransfer> forumMessageParts = new MapWrapper<>(forumMessagePartTransfers.size());
087
088                forumMessagePartTransfers.forEach((forumMessagePartTransfer) -> {
089                    forumMessageParts.put(forumMessagePartTransfer.getForumMessagePartType().getForumMessagePartTypeName(), forumMessagePartTransfer);
090                });
091
092                forumMessageTransfer.setForumMessageParts(forumMessageParts);
093            }
094
095            if(includeForumMessageAttachments) {
096                forumMessageTransfer.setForumMessageAttachments(new ListWrapper<>(forumControl.getForumMessageAttachmentTransfersByForumMessage(userVisit, forumMessage)));
097            }
098        }
099
100        return forumMessageTransfer;
101    }
102}