xref: /OpenGrok/opengrok-web/src/main/webapp/repos.jspf (revision c5f0464cdf2ba2bf339b65b5fa9215370144ae35)
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