1<%-- 2CDDL HEADER START 3 4The contents of this file are subject to the terms of the 5Common Development and Distribution License (the "License"). 6You may not use this file except in compliance with the License. 7 8See LICENSE.txt included in this distribution for the specific 9language governing permissions and limitations under the License. 10 11When distributing Covered Code, include this CDDL HEADER in each 12file and include the License file at LICENSE.txt. 13If applicable, add the following below this CDDL HEADER, with the 14fields enclosed by brackets "[]" replaced with your own identifying 15information: Portions Copyright [yyyy] [name of copyright owner] 16 17CDDL HEADER END 18 19Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. 20Portions Copyright (c) 2019, Krystof Tulinger <k.tulinger@seznam.cz>. 21--%> 22<%@ taglib tagdir="/WEB-INF/tags" prefix="opengrok" %> 23<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 24<%@page import="java.util.Iterator"%> 25<%@page import="java.util.LinkedList"%> 26<%@page import="java.util.Set"%> 27<%@page import="java.util.TreeSet"%> 28<%@page import="org.opengrok.indexer.configuration.Group"%> 29<%@page import="org.opengrok.indexer.configuration.Project"%> 30<%@page import="org.opengrok.web.PageConfig"%> 31<%@page import="org.opengrok.web.ProjectHelper"%> 32<%@ page import="static org.opengrok.indexer.web.messages.MessagesUtils.printMessages" %> 33<%@ page import="static org.opengrok.indexer.web.messages.MessagesUtils.messagesToJson" %> 34<% 35{ 36 PageConfig cfg = PageConfig.get(request); 37 pageContext.setAttribute("pageConfig", cfg); 38 cfg.addScript("repos"); 39 String messages; 40 41 printMessages(out, cfg.getMessages()); 42 43 ProjectHelper pHelper = cfg.getProjectHelper(); 44 if (pHelper.getAllProjects().size() > 0) { 45 Set<Group> groups = pHelper.getGroups(); 46 if (groups.size() > 0) { 47 // recursively print all groups 48 %> 49 50 <div class="panel-group projects"> 51 <div class="toggle-buttons"> 52 <a href="#" class="accordion_show_all"> 53 <button>Show all</button> 54 </a> 55 <a href="#" class="accordion_hide_all"> 56 <button>Hide all</button> 57 </a> 58 </div> 59 <% 60 LinkedList<Group> stack = new LinkedList<>(); 61 for ( Group x : groups ) { 62 if (x.getParent() == null && (pHelper.hasAllowedSubgroup(x) || cfg.isAllowed(x))) { 63 // the flag here represents the state of the group - open/close 64 x.setFlag(0); 65 stack.addLast(x); 66 } 67 } 68 69 while (!stack.isEmpty()) { 70 Group group = stack.element(); 71 72 if (group.getFlag() > 0) { 73 // already processed 74 stack.pollFirst(); 75 %></div><!-- body --> 76 </div><!-- panel --><% 77 continue; 78 } 79 80 stack.element().setFlag(1); 81 82 Set<Group> subgroups = new TreeSet<>(pHelper.getSubgroups(group)); 83 for (Iterator<Group> it = subgroups.iterator(); it.hasNext();) { 84 Group x = it.next(); 85 if (cfg.isAllowed(x) || pHelper.hasAllowedSubgroup(x)) { 86 x.setFlag(0); 87 } else { 88 it.remove(); 89 } 90 } 91 // add all the subgroups to the beginning respecting the order 92 stack.addAll(0, subgroups); 93 94 %><div class="panel"> 95 <div class="panel-heading-accordion"> 96 97 <h4 class="clearfix"> 98 <span class="pull-left"> 99 <span class="name"><%= Util.htmlize(group.getName())%></span> 100 <% 101 if (!(messages = MessagesUtils.messagesToJson(group)).isEmpty()) { %> 102 <span class="note-<%= MessagesUtils.getMessageLevel(group.getName()) %> important-note important-note-rounded" data-messages='<%= messages %>'>!</span> 103 <% } %> 104 <small> 105 [<a href="#" class="projects_select_all">select all</a>] 106 (<span title="Number of groups directly in this group"><%= pHelper.getSubgroups(group).size() %></span> + 107 <span title="Number of projects directly in this group"><%= pHelper.getAllGrouped(group).size() %></span>) 108 </small> 109 </span> 110 <span class="pull-right"> 111 <span class="fold <%= pHelper.hasFavourite(group) ? "fold-up" : "fold-down"%>"></span> 112 </span> 113 </h4> 114 </div> 115 <div class="panel-body-accordion<% if (pHelper.hasFavourite(group)) { %> favourite<% } %>" 116 <% if (pHelper.hasFavourite(group) 117 || (pHelper.getAllGrouped(group).size() > 0 && pHelper.getAllGrouped(group).size() <= cfg.getGroupsCollapseThreshold())) { 118 %>data-accordion-visible="true"<% } %>> 119 <% 120 if (pHelper.getAllGrouped(group).size() > 0) { 121 %> 122 <table aria-label="Table of grouped projects and repositories"> 123 <opengrok:repositories 124 pageConfig="${pageConfig}" 125 repositories="<%= pHelper.getRepositories(group) %>" 126 /> 127 128 <opengrok:projects 129 projects="<%= pHelper.getProjects(group) %>" 130 /> 131 </table><% 132 } else if ( pHelper.getAllGrouped(group).size() <= 0 && !pHelper.hasAllowedSubgroup(group) ) { 133 %>No projects<% 134 } 135 } 136 %></div><% 137 } 138 139 // print the rest of projects which don't have a group 140 Set<Project> projects = pHelper.getAllUngrouped(); 141 if (projects.size() > 0) { %> 142 <div class="panel-group projects"> 143 <% if (groups.size() > 0) { %> 144 <div class="toggle-buttons"> 145 <a href="#" class="accordion_show_all"> 146 <button>Show all</button> 147 </a> 148 <a href="#" class="accordion_hide_all"> 149 <button>Hide all</button> 150 </a> 151 </div> 152 <% } %> 153 <div class="panel"> 154 <% if (groups.size() > 0) {%> 155 <div class="panel-heading-accordion"> 156 <h4 class="clearfix"> 157 <span class="pull-left"> 158 <span class="name">Other</span> 159 <% 160 if (!(messages = messagesToJson("other")).isEmpty()) { %> 161 <span class="note-<%= MessagesUtils.getMessageLevel("other") %> important-note important-note-rounded" data-messages='<%= messages %>'>!</span> 162 <% } %> 163 <small> 164 [<a href="#" class="projects_select_all">select all</a>] 165 (<span title="Number of projects inside"><%= projects.size() %></span>) 166 </small> 167 </span> 168 <span class="pull-right"> 169 <span class="fold <%= pHelper.hasUngroupedFavourite() ? "fold-up" : "fold-down"%>"></span> 170 </span> 171 </h4> 172 </div> 173 <% } %> 174 <div class="panel-body<% if (groups.size() > 0) {%>-accordion<% } %> <% if (pHelper.hasUngroupedFavourite()) { %> favourite<% } %>" 175 <% if (pHelper.hasUngroupedFavourite() 176 || (projects.size() > 0 && projects.size() <= cfg.getGroupsCollapseThreshold())) { 177 %>data-accordion-visible="true"<% } %>> 178 <table aria-label="Table of ungrouped projects and repositories"> 179 <opengrok:repositories 180 pageConfig="${pageConfig}" 181 repositories="<%= pHelper.getUngroupedRepositories() %>" 182 /> 183 184 <opengrok:projects 185 projects="<%= pHelper.getUngroupedProjects() %>" 186 /> 187 </table> 188 </div> 189 </div> 190 </div><% 191 } 192 } 193} 194%> 195<br/> 196<br/> 197