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