001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 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 javax.inject.Inject; 020import com.echothree.model.control.forum.common.ForumOptions; 021import com.echothree.model.control.forum.common.transfer.ForumTransfer; 022import com.echothree.model.control.forum.server.control.ForumControl; 023import com.echothree.model.control.icon.server.control.IconControl; 024import com.echothree.model.control.sequence.server.control.SequenceControl; 025import com.echothree.model.data.forum.server.entity.Forum; 026import com.echothree.model.data.forum.server.entity.ForumGroup; 027import com.echothree.model.data.user.server.entity.UserVisit; 028import com.echothree.util.common.transfer.ListWrapper; 029import java.util.ArrayList; 030import java.util.List; 031import javax.enterprise.context.RequestScoped; 032 033@RequestScoped 034public class ForumTransferCache 035 extends BaseForumTransferCache<Forum, ForumTransfer> { 036 037 @Inject 038 ForumControl forumControl; 039 040 @Inject 041 IconControl iconControl; 042 043 @Inject 044 SequenceControl sequenceControl; 045 046 boolean includeForumGroups; 047 boolean includeForumThreads; 048 boolean includeFutureForumThreads; 049 050 /** Creates a new instance of ForumTransferCache */ 051 protected ForumTransferCache() { 052 super(); 053 054 var options = session.getOptions(); 055 if(options != null) { 056 setIncludeUuid(options.contains(ForumOptions.ForumIncludeUuid)); 057 includeForumGroups = options.contains(ForumOptions.ForumIncludeForumGroups); 058 includeForumThreads = options.contains(ForumOptions.ForumIncludeForumThreads); 059 includeFutureForumThreads = options.contains(ForumOptions.ForumIncludeFutureForumThreads); 060 setIncludeEntityAttributeGroups(options.contains(ForumOptions.ForumIncludeEntityAttributeGroups)); 061 setIncludeTagScopes(options.contains(ForumOptions.ForumIncludeTagScopes)); 062 } 063 064 setIncludeEntityInstance(true); 065 } 066 067 public ForumTransfer getForumTransfer(UserVisit userVisit, Forum forum) { 068 var forumTransfer = get(forum); 069 070 if(forumTransfer == null) { 071 var forumDetail = forum.getLastDetail(); 072 var forumName = forumDetail.getForumName(); 073 var forumTypeTransfer = forumControl.getForumTypeTransfer(userVisit, forumDetail.getForumType()); 074 var icon = forumDetail.getIcon(); 075 var iconTransfer = icon == null? null: iconControl.getIconTransfer(userVisit, icon); 076 var forumThreadSequence = forumDetail.getForumThreadSequence(); 077 var forumThreadSequenceTransfer = forumThreadSequence == null? null: sequenceControl.getSequenceTransfer(userVisit, forumThreadSequence); 078 var forumMessageSequence = forumDetail.getForumMessageSequence(); 079 var forumMessageSequenceTransfer = forumMessageSequence == null? null: sequenceControl.getSequenceTransfer(userVisit, forumMessageSequence); 080 var sortOrder = forumDetail.getSortOrder(); 081 var description = forumControl.getBestForumDescription(forum, getLanguage(userVisit)); 082 083 forumTransfer = new ForumTransfer(forumName, forumTypeTransfer, iconTransfer, forumThreadSequenceTransfer, forumMessageSequenceTransfer, sortOrder, description); 084 put(userVisit, forum, forumTransfer); 085 086 if(includeForumGroups) { 087 var forumGroupForums = forumControl.getForumGroupForumsByForum(forum); 088 List<ForumGroup> forumGroups = new ArrayList<>(forumGroupForums.size()); 089 090 forumGroupForums.forEach((forumGroupForum) -> { 091 forumGroups.add(forumGroupForum.getForumGroup()); 092 }); 093 094 forumTransfer.setForumGroups(new ListWrapper<>(forumControl.getForumGroupTransfers(userVisit, forumGroups))); 095 } 096 097 if(includeForumThreads) { 098 forumTransfer.setForumThreads(new ListWrapper<>(forumControl.getForumThreadTransfersByForum(userVisit, forum, includeFutureForumThreads))); 099 } 100 } 101 102 return forumTransfer; 103 } 104 105}