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.ForumGroupTransfer; 021import com.echothree.model.control.forum.server.control.ForumControl; 022import com.echothree.model.control.icon.server.control.IconControl; 023import com.echothree.model.data.forum.server.entity.Forum; 024import com.echothree.model.data.forum.server.entity.ForumGroup; 025import com.echothree.model.data.user.server.entity.UserVisit; 026import com.echothree.util.common.transfer.ListWrapper; 027import com.echothree.util.server.persistence.Session; 028import java.util.ArrayList; 029import java.util.List; 030import javax.enterprise.context.RequestScoped; 031 032@RequestScoped 033public class ForumGroupTransferCache 034 extends BaseForumTransferCache<ForumGroup, ForumGroupTransfer> { 035 036 ForumControl forumControl = Session.getModelController(ForumControl.class); 037 IconControl iconControl = Session.getModelController(IconControl.class); 038 039 boolean includeForums; 040 041 /** Creates a new instance of ForumGroupTransferCache */ 042 protected ForumGroupTransferCache() { 043 super(); 044 045 var options = session.getOptions(); 046 if(options != null) { 047 includeForums = options.contains(ForumOptions.ForumGroupIncludeForums); 048 setIncludeEntityAttributeGroups(options.contains(ForumOptions.ForumGroupIncludeEntityAttributeGroups)); 049 setIncludeTagScopes(options.contains(ForumOptions.ForumGroupIncludeTagScopes)); 050 } 051 052 setIncludeEntityInstance(true); 053 } 054 055 public ForumGroupTransfer getForumGroupTransfer(UserVisit userVisit, ForumGroup forumGroup) { 056 var forumGroupTransfer = get(forumGroup); 057 058 if(forumGroupTransfer == null) { 059 var forumGroupDetail = forumGroup.getLastDetail(); 060 var forumGroupName = forumGroupDetail.getForumGroupName(); 061 var icon = forumGroupDetail.getIcon(); 062 var iconTransfer = icon == null? null: iconControl.getIconTransfer(userVisit, icon); 063 var sortOrder = forumGroupDetail.getSortOrder(); 064 var description = forumControl.getBestForumGroupDescription(forumGroup, getLanguage(userVisit)); 065 066 forumGroupTransfer = new ForumGroupTransfer(forumGroupName, iconTransfer, sortOrder, description); 067 put(userVisit, forumGroup, forumGroupTransfer); 068 069 if(includeForums) { 070 var forumGroupForums = forumControl.getForumGroupForumsByForumGroup(forumGroup); 071 List<Forum> forums = new ArrayList<>(forumGroupForums.size()); 072 073 forumGroupForums.forEach((forumGroupForum) -> { 074 forums.add(forumGroupForum.getForum()); 075 }); 076 077 forumGroupTransfer.setForums(new ListWrapper<>(forumControl.getForumTransfers(userVisit, forums))); 078 } 079 } 080 081 return forumGroupTransfer; 082 } 083 084}