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.SearchServlet;
|
||||
import ctbrec.servlet.StaticFileServlet;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.jetty.server.*;
|
||||
import org.eclipse.jetty.server.handler.HandlerList;
|
||||
import org.eclipse.jetty.servlet.ServletHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.eclipse.jetty.util.component.LifeCycle;
|
||||
|
||||
import java.net.BindException;
|
||||
|
||||
@Slf4j
|
||||
public class DocServer {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(DocServer.class);
|
||||
|
||||
private static volatile boolean started = false;
|
||||
|
||||
|
@ -22,7 +22,15 @@ public class DocServer {
|
|||
}
|
||||
|
||||
public static synchronized void start() throws Exception {
|
||||
start(() -> {
|
||||
});
|
||||
}
|
||||
|
||||
public static synchronized void start(Runnable callback) throws Exception {
|
||||
log.info("DocServer.start");
|
||||
if (started) {
|
||||
log.info("if started");
|
||||
callback.run();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -53,12 +61,18 @@ public class DocServer {
|
|||
holder = new ServletHolder(staticFileServlet);
|
||||
handler.addServletWithMapping(holder, "/static/*");
|
||||
|
||||
server.addLifeCycleListener(new LifeCycle.Listener() {
|
||||
@Override
|
||||
public void lifeCycleStarted(LifeCycle event) {
|
||||
callback.run();
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
server.start();
|
||||
server.join();
|
||||
} 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;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import ctbrec.docs.DocServer;
|
||||
import ctbrec.ui.DesktopIntegration;
|
||||
import javafx.application.Platform;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Tab;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@Slf4j
|
||||
public class HelpTab extends Tab {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(HelpTab.class);
|
||||
|
||||
public HelpTab() {
|
||||
setClosable(true);
|
||||
setText("Help");
|
||||
|
@ -23,15 +23,27 @@ public class HelpTab extends Tab {
|
|||
var layout = new BorderPane(openHelp);
|
||||
BorderPane.setMargin(openHelp, new Insets(20));
|
||||
setContent(layout);
|
||||
AtomicBoolean started = new AtomicBoolean(false);
|
||||
openHelp.setOnAction(e -> {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
DocServer.start();
|
||||
} catch (Exception ex) {
|
||||
LOG.error("Couldn't start documentation server", ex);
|
||||
synchronized (started) {
|
||||
if (!started.get()) {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
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