Skip to content

Commit fa52517

Browse files
committed
issues/449 Making apps and groups available to all pages
Allows adding a navbar via building a custom template. These changes make app information available to any page, instead of just the IndexController.
1 parent 5ac010e commit fa52517

File tree

2 files changed

+40
-42
lines changed

2 files changed

+40
-42
lines changed

src/main/java/eu/openanalytics/shinyproxy/controllers/BaseController.java

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import eu.openanalytics.containerproxy.service.hearbeat.HeartbeatService;
3131
import eu.openanalytics.containerproxy.util.ContextPathHelper;
3232
import eu.openanalytics.shinyproxy.AppRequestInfo;
33+
import eu.openanalytics.shinyproxy.ShinyProxySpecExtension;
3334
import eu.openanalytics.shinyproxy.ShinyProxySpecProvider;
3435
import eu.openanalytics.shinyproxy.runtimevalues.AppInstanceKey;
3536
import org.apache.logging.log4j.LogManager;
@@ -47,10 +48,13 @@
4748
import java.io.InputStream;
4849
import java.net.URL;
4950
import java.net.URLConnection;
51+
import java.util.ArrayList;
5052
import java.util.Base64;
5153
import java.util.HashMap;
54+
import java.util.List;
5255
import java.util.Map;
5356
import java.util.Objects;
57+
import java.util.stream.Collectors;
5458

5559
public abstract class BaseController {
5660

@@ -103,7 +107,7 @@ protected String getProxyEndpoint(Proxy proxy) {
103107
}
104108

105109
protected void prepareMap(ModelMap map, HttpServletRequest request) {
106-
map.put("application_name", environment.getProperty("spring.application.name")); // name of ShinyProxy, ContainerProxy etc
110+
map.put("application_name", environment.getProperty("spring.application.name")); // name of ShinyProxy, ContainerProxy etc
107111
map.put("title", environment.getProperty("proxy.title", "ShinyProxy"));
108112
map.put("logo", resolveImageURI(environment.getProperty("proxy.logo-url")));
109113

@@ -132,6 +136,41 @@ protected void prepareMap(ModelMap map, HttpServletRequest request) {
132136
map.put("appMaxInstances", shinyProxySpecProvider.getMaxInstances());
133137
map.put("pauseSupported", backend.supportsPause());
134138
map.put("spInstance", identifierService.instanceId);
139+
140+
ProxySpec[] apps = proxyService.getProxySpecs(null, false).toArray(new ProxySpec[0]);
141+
map.put("apps", apps);
142+
143+
Map<ProxySpec, String> appLogos = new HashMap<>();
144+
map.put("appLogos", appLogos);
145+
146+
boolean displayAppLogos = false;
147+
for (ProxySpec app: apps) {
148+
if (app.getLogoURL() != null) {
149+
displayAppLogos = true;
150+
appLogos.put(app, resolveImageURI(app.getLogoURL()));
151+
}
152+
}
153+
map.put("displayAppLogos", displayAppLogos);
154+
155+
// template groups
156+
HashMap<String, ArrayList<ProxySpec>> groupedApps = new HashMap<>();
157+
List<ProxySpec> ungroupedApps = new ArrayList<>();
158+
159+
for (ProxySpec app: apps) {
160+
String groupId = app.getSpecExtension(ShinyProxySpecExtension.class).getTemplateGroup();
161+
if (groupId != null) {
162+
groupedApps.putIfAbsent(groupId, new ArrayList<>());
163+
groupedApps.get(groupId).add(app);
164+
} else {
165+
ungroupedApps.add(app);
166+
}
167+
}
168+
169+
List<ShinyProxySpecProvider.TemplateGroup> templateGroups = shinyProxySpecProvider.getTemplateGroups().stream().filter((g) -> groupedApps.containsKey(g.getId())).collect(
170+
Collectors.toList());
171+
map.put("templateGroups", templateGroups);
172+
map.put("groupedApps", groupedApps);
173+
map.put("ungroupedApps", ungroupedApps);
135174
}
136175

137176
protected String getSupportAddress() {

src/main/java/eu/openanalytics/shinyproxy/controllers/IndexController.java

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
*/
2121
package eu.openanalytics.shinyproxy.controllers;
2222

23-
import eu.openanalytics.containerproxy.model.spec.ProxySpec;
24-
import eu.openanalytics.shinyproxy.ShinyProxySpecExtension;
2523
import eu.openanalytics.shinyproxy.ShinyProxySpecProvider;
2624
import org.springframework.core.env.Environment;
2725
import org.springframework.stereotype.Controller;
@@ -32,11 +30,6 @@
3230
import javax.annotation.PostConstruct;
3331
import javax.inject.Inject;
3432
import javax.servlet.http.HttpServletRequest;
35-
import java.util.ArrayList;
36-
import java.util.HashMap;
37-
import java.util.List;
38-
import java.util.Map;
39-
import java.util.stream.Collectors;
4033

4134
@Controller
4235
public class IndexController extends BaseController {
@@ -60,40 +53,6 @@ private Object index(ModelMap map, HttpServletRequest request) {
6053
if (!landingPage.equals("/")) return new RedirectView(landingPage);
6154

6255
prepareMap(map, request);
63-
64-
ProxySpec[] apps = proxyService.getProxySpecs(null, false).toArray(new ProxySpec[0]);
65-
map.put("apps", apps);
66-
67-
Map<ProxySpec, String> appLogos = new HashMap<>();
68-
map.put("appLogos", appLogos);
69-
70-
boolean displayAppLogos = false;
71-
for (ProxySpec app: apps) {
72-
if (app.getLogoURL() != null) {
73-
displayAppLogos = true;
74-
appLogos.put(app, resolveImageURI(app.getLogoURL()));
75-
}
76-
}
77-
map.put("displayAppLogos", displayAppLogos);
78-
79-
// template groups
80-
HashMap<String, ArrayList<ProxySpec>> groupedApps = new HashMap<>();
81-
List<ProxySpec> ungroupedApps = new ArrayList<>();
82-
83-
for (ProxySpec app: apps) {
84-
String groupId = app.getSpecExtension(ShinyProxySpecExtension.class).getTemplateGroup();
85-
if (groupId != null) {
86-
groupedApps.putIfAbsent(groupId, new ArrayList<>());
87-
groupedApps.get(groupId).add(app);
88-
} else {
89-
ungroupedApps.add(app);
90-
}
91-
}
92-
93-
List<ShinyProxySpecProvider.TemplateGroup> templateGroups = shinyProxySpecProvider.getTemplateGroups().stream().filter((g) -> groupedApps.containsKey(g.getId())).collect(Collectors.toList());
94-
map.put("templateGroups", templateGroups);
95-
map.put("groupedApps", groupedApps);
96-
map.put("ungroupedApps", ungroupedApps);
9756

9857
// navbar
9958
map.put("page", "index");

0 commit comments

Comments
 (0)