forked from j62/ctbrec
Add lifecycle listener to Help server to open the browser once the server is ready
This commit is contained in:
parent
6b1d8eedec
commit
41ffd75d48
|
@ -4,17 +4,17 @@ import ctbrec.servlet.AbstractDocServlet;
|
||||||
import ctbrec.servlet.MarkdownServlet;
|
import ctbrec.servlet.MarkdownServlet;
|
||||||
import ctbrec.servlet.SearchServlet;
|
import ctbrec.servlet.SearchServlet;
|
||||||
import ctbrec.servlet.StaticFileServlet;
|
import ctbrec.servlet.StaticFileServlet;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.eclipse.jetty.server.*;
|
import org.eclipse.jetty.server.*;
|
||||||
import org.eclipse.jetty.server.handler.HandlerList;
|
import org.eclipse.jetty.server.handler.HandlerList;
|
||||||
import org.eclipse.jetty.servlet.ServletHandler;
|
import org.eclipse.jetty.servlet.ServletHandler;
|
||||||
import org.eclipse.jetty.servlet.ServletHolder;
|
import org.eclipse.jetty.servlet.ServletHolder;
|
||||||
import org.slf4j.Logger;
|
import org.eclipse.jetty.util.component.LifeCycle;
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.net.BindException;
|
import java.net.BindException;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class DocServer {
|
public class DocServer {
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(DocServer.class);
|
|
||||||
|
|
||||||
private static volatile boolean started = false;
|
private static volatile boolean started = false;
|
||||||
|
|
||||||
|
@ -22,7 +22,15 @@ public class DocServer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static synchronized void start() throws Exception {
|
public static synchronized void start() throws Exception {
|
||||||
|
start(() -> {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static synchronized void start(Runnable callback) throws Exception {
|
||||||
|
log.info("DocServer.start");
|
||||||
if (started) {
|
if (started) {
|
||||||
|
log.info("if started");
|
||||||
|
callback.run();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,12 +61,18 @@ public class DocServer {
|
||||||
holder = new ServletHolder(staticFileServlet);
|
holder = new ServletHolder(staticFileServlet);
|
||||||
handler.addServletWithMapping(holder, "/static/*");
|
handler.addServletWithMapping(holder, "/static/*");
|
||||||
|
|
||||||
|
server.addLifeCycleListener(new LifeCycle.Listener() {
|
||||||
|
@Override
|
||||||
|
public void lifeCycleStarted(LifeCycle event) {
|
||||||
|
callback.run();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
server.start();
|
server.start();
|
||||||
server.join();
|
server.join();
|
||||||
} catch (BindException e) {
|
} catch (BindException e) {
|
||||||
LOG.error("Port {} is already in use", http.getPort(), e);
|
log.error("Port {} is already in use", http.getPort(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
package ctbrec.ui.tabs;
|
package ctbrec.ui.tabs;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import ctbrec.docs.DocServer;
|
import ctbrec.docs.DocServer;
|
||||||
import ctbrec.ui.DesktopIntegration;
|
import ctbrec.ui.DesktopIntegration;
|
||||||
|
import javafx.application.Platform;
|
||||||
import javafx.geometry.Insets;
|
import javafx.geometry.Insets;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.Tab;
|
import javafx.scene.control.Tab;
|
||||||
import javafx.scene.layout.BorderPane;
|
import javafx.scene.layout.BorderPane;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
public class HelpTab extends Tab {
|
public class HelpTab extends Tab {
|
||||||
|
|
||||||
private static final Logger LOG = LoggerFactory.getLogger(HelpTab.class);
|
|
||||||
|
|
||||||
public HelpTab() {
|
public HelpTab() {
|
||||||
setClosable(true);
|
setClosable(true);
|
||||||
setText("Help");
|
setText("Help");
|
||||||
|
@ -23,15 +23,27 @@ public class HelpTab extends Tab {
|
||||||
var layout = new BorderPane(openHelp);
|
var layout = new BorderPane(openHelp);
|
||||||
BorderPane.setMargin(openHelp, new Insets(20));
|
BorderPane.setMargin(openHelp, new Insets(20));
|
||||||
setContent(layout);
|
setContent(layout);
|
||||||
|
AtomicBoolean started = new AtomicBoolean(false);
|
||||||
openHelp.setOnAction(e -> {
|
openHelp.setOnAction(e -> {
|
||||||
new Thread(() -> {
|
synchronized (started) {
|
||||||
try {
|
if (!started.get()) {
|
||||||
DocServer.start();
|
new Thread(() -> {
|
||||||
} catch (Exception ex) {
|
try {
|
||||||
LOG.error("Couldn't start documentation server", ex);
|
DocServer.start(() ->
|
||||||
|
Platform.runLater(() -> {
|
||||||
|
started.set(true);
|
||||||
|
DesktopIntegration.open("http://localhost:5689/docs/index.md");
|
||||||
|
})
|
||||||
|
);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("Couldn't start documentation server", ex);
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
} else {
|
||||||
|
DesktopIntegration.open("http://localhost:5689/docs/index.md");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}).start();
|
);
|
||||||
DesktopIntegration.open("http://localhost:5689/docs/index.md");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue