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