forked from jooby-project/jooby
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAppPrinter.java
More file actions
110 lines (86 loc) · 3.56 KB
/
Copy pathAppPrinter.java
File metadata and controls
110 lines (86 loc) · 3.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jooby.internal;
import java.util.Set;
import javax.inject.Inject;
import org.jooby.Route;
import org.jooby.WebSocket;
import com.typesafe.config.Config;
public class AppPrinter {
private Set<Route.Definition> routes;
private Set<WebSocket.Definition> sockets;
private String[] urls;
@Inject
public AppPrinter(final Set<Route.Definition> routes,
final Set<WebSocket.Definition> sockets,
final Config conf) {
this.routes = routes;
this.sockets = sockets;
String host = conf.getString("application.host");
String port = conf.getString("application.port");
String path = conf.getString("application.path");
this.urls = new String[2];
this.urls[0] = "http://" + host + ":" + port + path;
if (conf.hasPath("application.securePort")) {
this.urls[1] = "https://" + host + ":" + conf.getString("application.securePort") + path;
}
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder();
routes(buffer);
buffer.append("\nlistening on:");
for (String url : urls) {
if (url != null) {
buffer.append("\n ").append(url);
}
}
return buffer.toString();
}
private void routes(final StringBuilder buffer) {
int verbMax = 0, routeMax = 0, consumesMax = 0, producesMax = 0;
for (Route.Definition route : routes) {
verbMax = Math.max(verbMax, route.method().length());
routeMax = Math.max(routeMax, route.pattern().length());
consumesMax = Math.max(consumesMax, route.consumes().toString().length());
producesMax = Math.max(producesMax, route.produces().toString().length());
}
String format = " %-" + verbMax + "s %-" + routeMax + "s %" + consumesMax + "s %"
+ producesMax + "s (%s)\n";
for (Route.Definition route : routes) {
buffer.append(String.format(format, route.method(), route.pattern(),
route.consumes(), route.produces(), route.name()));
}
sockets(buffer, Math.max(verbMax, "WS".length()), routeMax, consumesMax, producesMax);
}
private void sockets(final StringBuilder buffer, final int verbMax, int routeMax,
int consumesMax, int producesMax) {
for (WebSocket.Definition socket : sockets) {
routeMax = Math.max(routeMax, socket.pattern().length());
consumesMax = Math.max(consumesMax, socket.consumes().toString().length() + 2);
producesMax = Math.max(producesMax, socket.produces().toString().length() + 2);
}
String format = " %-" + verbMax + "s %-" + routeMax + "s %" + consumesMax + "s %"
+ producesMax + "s\n";
for (WebSocket.Definition socket : sockets) {
buffer.append(String.format(format, "WS", socket.pattern(),
"[" + socket.consumes() + "]", "[" + socket.produces() + "]"));
}
}
}