实现服务的配置与接口的增删改查
This commit is contained in:
22
out/production/http-server-simulator/resources/config.json
Normal file
22
out/production/http-server-simulator/resources/config.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"projectName" : null,
|
||||
"width" : 1200,
|
||||
"height" : 800,
|
||||
"serverConfigs" : [ {
|
||||
"serverName" : "测试接口",
|
||||
"port" : 8080,
|
||||
"serverUrls" : [ {
|
||||
"urlName" : "登出",
|
||||
"url" : "/logout",
|
||||
"requestType" : "GET",
|
||||
"responseBody" : "{\n \"username\": \"admin\",\n \"password\": \"123\"\n}",
|
||||
"headerMap" : null
|
||||
}, {
|
||||
"urlName" : "查询1",
|
||||
"url" : "/list1",
|
||||
"requestType" : null,
|
||||
"responseBody" : "{\n\t\"taskNo\": \"123\"\n}",
|
||||
"headerMap" : null
|
||||
} ]
|
||||
} ]
|
||||
}
|
||||
@@ -2,30 +2,20 @@ package com.dayrain;
|
||||
|
||||
import com.dayrain.entity.Configuration;
|
||||
import com.dayrain.entity.RequestType;
|
||||
import com.dayrain.entity.Server;
|
||||
import com.dayrain.entity.ServerConfig;
|
||||
import com.dayrain.entity.ServerUrl;
|
||||
import com.dayrain.utils.FileUtils;
|
||||
import com.dayrain.views.HomePage;
|
||||
import javafx.application.Application;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.TitledPane;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class ApplicationStarter extends Application {
|
||||
Configuration configuration = configInit();
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
|
||||
// List<ServerConfig> serverConfigs = configuration.getServerConfigs();
|
||||
// for (ServerConfig serverConfig : serverConfigs) {
|
||||
// Server server = new Server(serverConfig);
|
||||
// Thread thread = new Thread(server);
|
||||
// thread.start();
|
||||
// }
|
||||
launch(args);
|
||||
}
|
||||
|
||||
@@ -40,7 +30,7 @@ public class ApplicationStarter extends Application {
|
||||
" \"password\": \"123\"\n" +
|
||||
"}"));
|
||||
|
||||
add(new ServerUrl("登录", "/logout", RequestType.GET, "{\n" +
|
||||
add(new ServerUrl("登出", "/logout", RequestType.GET, "{\n" +
|
||||
" \"username\": \"admin\",\n" +
|
||||
" \"password\": \"123\"\n" +
|
||||
"}"));
|
||||
@@ -56,6 +46,6 @@ public class ApplicationStarter extends Application {
|
||||
|
||||
@Override
|
||||
public void start(Stage primaryStage) throws Exception {
|
||||
new HomePage(primaryStage, configuration).start();
|
||||
new HomePage(primaryStage).start();
|
||||
}
|
||||
}
|
||||
|
||||
18
src/com/dayrain/entity/ConfigHolder.java
Normal file
18
src/com/dayrain/entity/ConfigHolder.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package com.dayrain.entity;
|
||||
|
||||
import com.dayrain.utils.FileUtils;
|
||||
|
||||
public class ConfigHolder {
|
||||
private static Configuration configuration;
|
||||
|
||||
private ConfigHolder(){}
|
||||
|
||||
public synchronized static Configuration init() {
|
||||
configuration = FileUtils.load();
|
||||
return configuration;
|
||||
}
|
||||
|
||||
public static void save() {
|
||||
FileUtils.saveConfig(configuration);
|
||||
}
|
||||
}
|
||||
@@ -15,21 +15,36 @@ public class Server implements Runnable {
|
||||
|
||||
private final ServerConfig serverConfig;
|
||||
|
||||
private HttpServer httpServer;
|
||||
|
||||
public Server(ServerConfig serverConfig) {
|
||||
this.serverConfig = serverConfig;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
HttpServer httpServer = HttpServer.create(new InetSocketAddress(serverConfig.getPort()), 0);
|
||||
this.httpServer = HttpServer.create(new InetSocketAddress(serverConfig.getPort()), 0);
|
||||
httpServer.setExecutor(Executors.newCachedThreadPool());
|
||||
for (ServerUrl serverUrl : serverConfig.getServerUrls()) {
|
||||
httpServer.createContext(serverUrl.getUrl(), new RequestHandler(serverUrl));
|
||||
addContext(serverUrl);
|
||||
}
|
||||
httpServer.start();
|
||||
System.out.println("【" +serverConfig.getServerName() + "】服务已开启...");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
if(httpServer != null) {
|
||||
System.out.println("【" + serverConfig.getServerName() + "】服务已关闭...");
|
||||
httpServer.stop(0);
|
||||
}
|
||||
}
|
||||
|
||||
public void addContext(ServerUrl serverUrl) {
|
||||
httpServer.createContext(serverUrl.getUrl(), new RequestHandler(serverUrl));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,9 @@ public class ServerConfig {
|
||||
*/
|
||||
private List<ServerUrl>serverUrls;
|
||||
|
||||
public ServerConfig() {
|
||||
}
|
||||
|
||||
public ServerConfig(String serverName, int port, List<ServerUrl>serverUrls) {
|
||||
this.serverName = serverName;
|
||||
this.port = port;
|
||||
|
||||
@@ -26,11 +26,14 @@ public class ServerUrl {
|
||||
*/
|
||||
private Map<String, String> headerMap;
|
||||
|
||||
public ServerUrl(String urlName, String url, RequestType requestType, String requestBody) {
|
||||
public ServerUrl() {
|
||||
}
|
||||
|
||||
public ServerUrl(String urlName, String url, RequestType requestType, String responseBody) {
|
||||
this.urlName = urlName;
|
||||
this.url = url;
|
||||
this.requestType = requestType;
|
||||
this.responseBody = requestBody;
|
||||
this.responseBody = responseBody;
|
||||
}
|
||||
|
||||
public String getUrlName() {
|
||||
|
||||
112
src/com/dayrain/handle/AddUrlHandler.java
Normal file
112
src/com/dayrain/handle/AddUrlHandler.java
Normal file
@@ -0,0 +1,112 @@
|
||||
package com.dayrain.handle;
|
||||
|
||||
import com.dayrain.entity.ConfigHolder;
|
||||
import com.dayrain.entity.ServerConfig;
|
||||
import com.dayrain.entity.ServerUrl;
|
||||
import com.dayrain.server.ServerThread;
|
||||
import com.dayrain.utils.ListViewHelper;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ListView;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 添加路径
|
||||
* @author peng
|
||||
* @date 2021/10/27
|
||||
*/
|
||||
public class AddUrlHandler implements EventHandler<ActionEvent> {
|
||||
|
||||
private final ServerConfig serverConfig;
|
||||
|
||||
private final ListView<ServerUrl> serverUrlListView;
|
||||
|
||||
private final HashMap<String, ServerThread> threadMap;
|
||||
|
||||
private final Stage primaryStage;
|
||||
|
||||
public AddUrlHandler(ServerConfig serverConfig, ListView<ServerUrl> serverUrlListView, HashMap<String, ServerThread> threadMap, Stage primaryStage) {
|
||||
this.serverConfig = serverConfig;
|
||||
this.serverUrlListView = serverUrlListView;
|
||||
this.threadMap = threadMap;
|
||||
this.primaryStage = primaryStage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
Stage stage = new Stage();
|
||||
Label nameLabel = new Label("接口名称:");
|
||||
nameLabel.setPrefWidth(80);
|
||||
TextField nameField = new TextField();
|
||||
Label urlLabel = new Label("接口地址:");
|
||||
TextField urlField = new TextField();
|
||||
urlField.setPrefWidth(80);
|
||||
|
||||
Label respLabel = new Label("返回结果:");
|
||||
TextArea textArea = new TextArea();
|
||||
textArea.setPrefWidth(80);
|
||||
|
||||
HBox btnHBox = new HBox();
|
||||
Button saveButton = new Button("保存");
|
||||
btnHBox.getChildren().add(saveButton);
|
||||
btnHBox.setAlignment(Pos.CENTER_RIGHT);
|
||||
|
||||
GridPane gridPane = new GridPane();
|
||||
gridPane.add(nameLabel, 0, 0);
|
||||
gridPane.add(nameField, 1, 0);
|
||||
gridPane.add(urlLabel, 0, 1);
|
||||
gridPane.add(urlField, 1, 1);
|
||||
gridPane.add(respLabel, 0, 2);
|
||||
gridPane.add(textArea, 1, 2);
|
||||
gridPane.add(btnHBox, 1, 3);
|
||||
gridPane.setAlignment(Pos.CENTER);
|
||||
gridPane.setHgap(20d);
|
||||
gridPane.setVgap(10d);
|
||||
|
||||
stage.setWidth(500);
|
||||
stage.setHeight(400);
|
||||
stage.initOwner(primaryStage);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.setScene(new Scene(gridPane));
|
||||
stage.show();
|
||||
|
||||
saveButton.setOnAction(new EventHandler<ActionEvent>() {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
String name = nameField.getText();
|
||||
List<ServerUrl> serverUrls = serverConfig.getServerUrls();
|
||||
for (ServerUrl serverUrl : serverUrls) {
|
||||
if(serverUrl.getUrlName().equals(name)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
String url = urlField.getText();
|
||||
String resp = textArea.getText();
|
||||
|
||||
ServerUrl serverUrl = new ServerUrl(name, url, null, resp);
|
||||
|
||||
serverUrls.add(serverUrl);
|
||||
ServerThread serverThread = threadMap.getOrDefault(serverConfig.getServerName(), null);
|
||||
if(serverThread != null) {
|
||||
serverThread.addContext(serverUrl);
|
||||
}
|
||||
ListViewHelper.addAndRefresh(serverUrl, serverUrlListView);
|
||||
ConfigHolder.save();
|
||||
stage.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
44
src/com/dayrain/handle/DeleteUrlHandler.java
Normal file
44
src/com/dayrain/handle/DeleteUrlHandler.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package com.dayrain.handle;
|
||||
|
||||
import com.dayrain.entity.ConfigHolder;
|
||||
import com.dayrain.entity.ServerConfig;
|
||||
import com.dayrain.entity.ServerUrl;
|
||||
import com.dayrain.server.ServerThread;
|
||||
import com.dayrain.utils.ListViewHelper;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.control.ListView;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 删除路径
|
||||
* @author peng
|
||||
* @date 2021/10/27
|
||||
*/
|
||||
public class DeleteUrlHandler implements EventHandler<ActionEvent> {
|
||||
|
||||
private final ServerConfig serverConfig;
|
||||
|
||||
private final ListView<ServerUrl> serverUrlListView;
|
||||
|
||||
private final HashMap<String, ServerThread> threadMap;
|
||||
|
||||
private final ServerUrl serverUrl;
|
||||
|
||||
public DeleteUrlHandler(ServerUrl serverUrl, ServerConfig serverConfig, ListView<ServerUrl> serverUrlListView, HashMap<String, ServerThread> threadMap) {
|
||||
this.serverUrl = serverUrl;
|
||||
this.serverConfig = serverConfig;
|
||||
this.serverUrlListView = serverUrlListView;
|
||||
this.threadMap = threadMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
List<ServerUrl> serverUrls = serverConfig.getServerUrls();
|
||||
serverUrls.remove(serverUrl);
|
||||
ConfigHolder.save();
|
||||
ListViewHelper.deleteAndRefresh(serverUrl, serverUrlListView);
|
||||
}
|
||||
}
|
||||
54
src/com/dayrain/handle/StartServerHandler.java
Normal file
54
src/com/dayrain/handle/StartServerHandler.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package com.dayrain.handle;
|
||||
|
||||
import com.dayrain.entity.Server;
|
||||
import com.dayrain.entity.ServerConfig;
|
||||
import com.dayrain.server.ServerThread;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.shape.Circle;
|
||||
|
||||
import java.util.HashMap;
|
||||
/**
|
||||
* 服务启动与关闭控制器
|
||||
* @author peng
|
||||
* @date 2021/10/27
|
||||
*/
|
||||
public class StartServerHandler implements EventHandler<ActionEvent> {
|
||||
|
||||
private final Button openButton;
|
||||
|
||||
private final Circle statusCircle;
|
||||
|
||||
private final ServerConfig serverConfig;
|
||||
|
||||
private final HashMap<String, ServerThread> threadMap;
|
||||
|
||||
public StartServerHandler(Button openButton, Circle statusCircle, ServerConfig serverConfig, HashMap<String, ServerThread> threadMap) {
|
||||
this.openButton = openButton;
|
||||
this.statusCircle = statusCircle;
|
||||
this.serverConfig = serverConfig;
|
||||
this.threadMap = threadMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
String serverName = serverConfig.getServerName();
|
||||
if(threadMap.containsKey(serverName)) {
|
||||
ServerThread serverThread = threadMap.get(serverName);
|
||||
if(serverThread != null) {
|
||||
serverThread.stopServer();
|
||||
}
|
||||
threadMap.remove(serverName);
|
||||
openButton.setText("开启服务");
|
||||
statusCircle.setFill(Color.RED);
|
||||
}else {
|
||||
ServerThread serverThread = new ServerThread(new Server(serverConfig));
|
||||
serverThread.start();
|
||||
threadMap.put(serverName, serverThread);
|
||||
openButton.setText("关闭服务");
|
||||
statusCircle.setFill(Color.GREEN);
|
||||
}
|
||||
}
|
||||
}
|
||||
77
src/com/dayrain/handle/UpdateServerConfigHandler.java
Normal file
77
src/com/dayrain/handle/UpdateServerConfigHandler.java
Normal file
@@ -0,0 +1,77 @@
|
||||
package com.dayrain.handle;
|
||||
|
||||
import com.dayrain.entity.ConfigHolder;
|
||||
import com.dayrain.entity.ServerConfig;
|
||||
import com.dayrain.utils.ListViewHelper;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
public class UpdateServerConfigHandler implements EventHandler<ActionEvent> {
|
||||
|
||||
private final ServerConfig serverConfig;
|
||||
|
||||
private final Stage primaryStage;
|
||||
|
||||
public UpdateServerConfigHandler(ServerConfig serverConfig, Stage primaryStage) {
|
||||
this.serverConfig = serverConfig;
|
||||
this.primaryStage = primaryStage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
Stage stage = new Stage();
|
||||
Label serverName = new Label("服务名称:");
|
||||
serverName.setPrefWidth(80);
|
||||
TextField nameField = new TextField(serverConfig.getServerName());
|
||||
Label portLabel = new Label("端口:");
|
||||
TextField portField = new TextField(String.valueOf(serverConfig.getPort()));
|
||||
portField.setPrefWidth(80);
|
||||
|
||||
HBox btnHBox = new HBox();
|
||||
Label saveTips = new Label("重启后生效");
|
||||
saveTips.setStyle("-fx-background-color: #ff0000");
|
||||
Button saveButton = new Button("保存");
|
||||
btnHBox.getChildren().addAll(saveTips, saveButton);
|
||||
btnHBox.setAlignment(Pos.CENTER_RIGHT);
|
||||
btnHBox.setSpacing(20d);
|
||||
|
||||
GridPane gridPane = new GridPane();
|
||||
gridPane.add(serverName, 0, 0);
|
||||
gridPane.add(nameField, 1, 0);
|
||||
gridPane.add(portLabel, 0, 1);
|
||||
gridPane.add(portField, 1, 1);
|
||||
|
||||
gridPane.add(btnHBox, 1, 3);
|
||||
gridPane.setAlignment(Pos.CENTER);
|
||||
gridPane.setHgap(20d);
|
||||
gridPane.setVgap(10d);
|
||||
|
||||
stage.setWidth(400);
|
||||
stage.setHeight(300);
|
||||
stage.initOwner(primaryStage);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.setScene(new Scene(gridPane));
|
||||
stage.show();
|
||||
|
||||
saveButton.setOnAction(new EventHandler<ActionEvent>() {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
String name = nameField.getText();
|
||||
int port = Integer.parseInt(portField.getText());
|
||||
serverConfig.setPort(port);
|
||||
serverConfig.setServerName(name);
|
||||
ConfigHolder.save();
|
||||
stage.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
95
src/com/dayrain/handle/UpdateUrlHandler.java
Normal file
95
src/com/dayrain/handle/UpdateUrlHandler.java
Normal file
@@ -0,0 +1,95 @@
|
||||
package com.dayrain.handle;
|
||||
|
||||
import com.dayrain.entity.ConfigHolder;
|
||||
import com.dayrain.entity.ServerConfig;
|
||||
import com.dayrain.entity.ServerUrl;
|
||||
import com.dayrain.server.ServerThread;
|
||||
import com.dayrain.utils.ListViewHelper;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ListView;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.stage.Modality;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class UpdateUrlHandler implements EventHandler<ActionEvent> {
|
||||
|
||||
private final ListView<ServerUrl> serverUrlListView;
|
||||
|
||||
private final ServerUrl serverUrl;
|
||||
|
||||
private final Stage primaryStage;
|
||||
|
||||
public UpdateUrlHandler(ServerUrl serverUrl, ListView<ServerUrl> serverUrlListView, Stage primaryStage) {
|
||||
this.serverUrl = serverUrl;
|
||||
this.serverUrlListView = serverUrlListView;
|
||||
this.primaryStage = primaryStage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
Stage stage = new Stage();
|
||||
Label nameLabel = new Label("接口名称:");
|
||||
nameLabel.setPrefWidth(80);
|
||||
TextField nameField = new TextField(serverUrl.getUrlName());
|
||||
Label urlLabel = new Label("接口地址:");
|
||||
TextField urlField = new TextField(serverUrl.getUrl());
|
||||
urlField.setPrefWidth(80);
|
||||
|
||||
Label respLabel = new Label("返回结果:");
|
||||
TextArea textArea = new TextArea(serverUrl.getResponseBody());
|
||||
textArea.setPrefWidth(80);
|
||||
|
||||
HBox btnHBox = new HBox();
|
||||
Label saveTips = new Label("重启后生效");
|
||||
saveTips.setStyle("-fx-background-color: #ff0000");
|
||||
Button saveButton = new Button("保存");
|
||||
btnHBox.getChildren().addAll(saveTips, saveButton);
|
||||
btnHBox.setAlignment(Pos.CENTER_RIGHT);
|
||||
btnHBox.setSpacing(20d);
|
||||
|
||||
GridPane gridPane = new GridPane();
|
||||
gridPane.add(nameLabel, 0, 0);
|
||||
gridPane.add(nameField, 1, 0);
|
||||
gridPane.add(urlLabel, 0, 1);
|
||||
gridPane.add(urlField, 1, 1);
|
||||
gridPane.add(respLabel, 0, 2);
|
||||
gridPane.add(textArea, 1, 2);
|
||||
gridPane.add(btnHBox, 1, 3);
|
||||
gridPane.setAlignment(Pos.CENTER);
|
||||
gridPane.setHgap(20d);
|
||||
gridPane.setVgap(10d);
|
||||
|
||||
stage.setWidth(500);
|
||||
stage.setHeight(400);
|
||||
stage.initOwner(primaryStage);
|
||||
stage.initModality(Modality.WINDOW_MODAL);
|
||||
stage.setScene(new Scene(gridPane));
|
||||
stage.show();
|
||||
|
||||
saveButton.setOnAction(new EventHandler<ActionEvent>() {
|
||||
@Override
|
||||
public void handle(ActionEvent event) {
|
||||
String name = nameField.getText();
|
||||
String url = urlField.getText();
|
||||
String resp = textArea.getText();
|
||||
serverUrl.setUrlName(name);
|
||||
serverUrl.setUrl(url);
|
||||
serverUrl.setResponseBody(resp);
|
||||
|
||||
ListViewHelper.refresh(serverUrlListView);
|
||||
ConfigHolder.save();
|
||||
stage.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
21
src/com/dayrain/server/ServerThread.java
Normal file
21
src/com/dayrain/server/ServerThread.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package com.dayrain.server;
|
||||
|
||||
import com.dayrain.entity.Server;
|
||||
import com.dayrain.entity.ServerUrl;
|
||||
|
||||
public class ServerThread extends Thread {
|
||||
private final Server server;
|
||||
|
||||
public ServerThread(Server server) {
|
||||
super(server);
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void stopServer() {
|
||||
server.stop();
|
||||
}
|
||||
|
||||
public void addContext(ServerUrl serverUrl) {
|
||||
server.addContext(serverUrl);
|
||||
}
|
||||
}
|
||||
59
src/com/dayrain/utils/FileUtils.java
Normal file
59
src/com/dayrain/utils/FileUtils.java
Normal file
@@ -0,0 +1,59 @@
|
||||
package com.dayrain.utils;
|
||||
|
||||
import com.dayrain.entity.Configuration;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.FileReader;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
|
||||
public class FileUtils{
|
||||
|
||||
private static String configPath = Thread.currentThread().getContextClassLoader().getResource("resources/config.json").getFile();
|
||||
|
||||
public static void saveConfig(Configuration configuration){
|
||||
FileWriter fileWriter = null;
|
||||
try {
|
||||
fileWriter = new FileWriter(configPath);
|
||||
String config = new ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(configuration);
|
||||
fileWriter.write(config);
|
||||
fileWriter.flush();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}finally {
|
||||
try {
|
||||
if(fileWriter != null) {
|
||||
fileWriter.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Configuration load() {
|
||||
BufferedReader bufferedReader = null;
|
||||
try {
|
||||
StringBuilder configStr = new StringBuilder();
|
||||
bufferedReader = new BufferedReader(new FileReader(configPath));
|
||||
String buf = null;
|
||||
while ((buf = bufferedReader.readLine()) != null) {
|
||||
configStr.append(buf);
|
||||
}
|
||||
return new ObjectMapper().readValue(configStr.toString(), Configuration.class);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}finally {
|
||||
try {
|
||||
if(bufferedReader != null) {
|
||||
bufferedReader.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
24
src/com/dayrain/utils/ListViewHelper.java
Normal file
24
src/com/dayrain/utils/ListViewHelper.java
Normal file
@@ -0,0 +1,24 @@
|
||||
package com.dayrain.utils;
|
||||
|
||||
import com.dayrain.entity.ServerUrl;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.scene.control.ListView;
|
||||
|
||||
public class ListViewHelper {
|
||||
|
||||
public static void addAndRefresh(ServerUrl serverUrl, ListView<ServerUrl>serverUrls) {
|
||||
serverUrls.getItems().add(serverUrl);
|
||||
refresh(serverUrls);
|
||||
}
|
||||
|
||||
public static void deleteAndRefresh(ServerUrl serverUrl, ListView<ServerUrl>serverUrls) {
|
||||
serverUrls.getItems().remove(serverUrl);
|
||||
refresh(serverUrls);
|
||||
}
|
||||
|
||||
public static void refresh(ListView<ServerUrl>serverUrls) {
|
||||
ObservableList<ServerUrl> items = serverUrls.getItems();
|
||||
serverUrls.setItems(null);
|
||||
serverUrls.setItems(items);
|
||||
}
|
||||
}
|
||||
@@ -1,27 +1,60 @@
|
||||
package com.dayrain.views;
|
||||
|
||||
import com.dayrain.entity.ConfigHolder;
|
||||
import com.dayrain.entity.Configuration;
|
||||
import com.dayrain.entity.Server;
|
||||
import com.dayrain.entity.ServerConfig;
|
||||
import com.dayrain.entity.ServerUrl;
|
||||
import com.dayrain.handle.AddUrlHandler;
|
||||
import com.dayrain.handle.DeleteUrlHandler;
|
||||
import com.dayrain.handle.StartServerHandler;
|
||||
import com.dayrain.handle.UpdateServerConfigHandler;
|
||||
import com.dayrain.handle.UpdateUrlHandler;
|
||||
import com.dayrain.server.ServerThread;
|
||||
import com.dayrain.utils.FileUtils;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.event.EventHandler;
|
||||
import javafx.geometry.Insets;
|
||||
import javafx.geometry.Pos;
|
||||
import javafx.scene.Scene;
|
||||
import javafx.scene.control.Button;
|
||||
import javafx.scene.control.Label;
|
||||
import javafx.scene.control.ListCell;
|
||||
import javafx.scene.control.ListView;
|
||||
import javafx.scene.control.Menu;
|
||||
import javafx.scene.control.MenuBar;
|
||||
import javafx.scene.control.MenuItem;
|
||||
import javafx.scene.control.TextArea;
|
||||
import javafx.scene.control.TextField;
|
||||
import javafx.scene.control.TitledPane;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
import javafx.scene.layout.BorderPane;
|
||||
import javafx.scene.layout.GridPane;
|
||||
import javafx.scene.layout.HBox;
|
||||
import javafx.scene.layout.VBox;
|
||||
import javafx.scene.paint.Color;
|
||||
import javafx.scene.shape.Circle;
|
||||
import javafx.stage.Stage;
|
||||
import javafx.stage.WindowEvent;
|
||||
import javafx.util.Callback;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class HomePage {
|
||||
private Stage primaryStage;
|
||||
private Configuration configuration;
|
||||
|
||||
public HomePage(Stage primaryStage, Configuration configuration) {
|
||||
private Stage primaryStage;
|
||||
|
||||
private final Configuration configuration = ConfigHolder.init();
|
||||
|
||||
private HashMap<String, ServerThread> threadMap = new HashMap<>();
|
||||
|
||||
private List<ListView<ServerUrl>> listViews = new ArrayList<>();
|
||||
|
||||
public HomePage(Stage primaryStage) {
|
||||
this.primaryStage = primaryStage;
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
@@ -41,28 +74,103 @@ public class HomePage {
|
||||
menuBar.getMenus().addAll(menu1, menu2, menu3);
|
||||
borderPane.setTop(menuBar);
|
||||
|
||||
//渲染服务列表
|
||||
VBox serverContainer = new VBox();
|
||||
|
||||
//服务列表
|
||||
VBox serverBox = new VBox();
|
||||
List<ServerConfig> serverConfigs = configuration.getServerConfigs();
|
||||
|
||||
HBox urlBox = new HBox();
|
||||
Label nameLabel = new Label("登录");
|
||||
Label urlLabel = new Label("/wms/login");
|
||||
Button configButton = new Button("配置");
|
||||
Button deleteButton = new Button("删除");
|
||||
urlBox.setSpacing(20d);
|
||||
urlBox.setAlignment(Pos.CENTER_LEFT);
|
||||
urlBox.getChildren().addAll(nameLabel, urlLabel, configButton, deleteButton);
|
||||
|
||||
TitledPane titledPane = new TitledPane("众华WMS", urlBox);
|
||||
titledPane.setPrefWidth(600d);
|
||||
serverBox.getChildren().addAll(titledPane);
|
||||
|
||||
borderPane.setLeft(serverBox);
|
||||
for (ServerConfig serverConfig : serverConfigs) {
|
||||
drawServerPanel(serverContainer, serverConfig, primaryStage);
|
||||
}
|
||||
|
||||
borderPane.setLeft(serverContainer);
|
||||
primaryStage.setScene(new Scene(borderPane));
|
||||
primaryStage.setWidth(configuration.getWidth());
|
||||
primaryStage.setHeight(configuration.getHeight());
|
||||
primaryStage.show();
|
||||
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
|
||||
@Override
|
||||
public void handle(WindowEvent event) {
|
||||
FileUtils.saveConfig(configuration);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void drawServerPanel(VBox serverContainer, ServerConfig serverConfig, Stage primaryStage) {
|
||||
|
||||
VBox vBox = new VBox();
|
||||
HBox headBox = new HBox();
|
||||
Button editButton = new Button("配置参数");
|
||||
Button openButton = new Button("开启服务");
|
||||
Button addButton = new Button("添加接口");
|
||||
Circle statusCircle = new Circle();
|
||||
statusCircle.setRadius(10);
|
||||
statusCircle.setFill(Color.RED);
|
||||
//设置服务启动与关闭
|
||||
openButton.setOnAction(new StartServerHandler(openButton, statusCircle, serverConfig, threadMap));
|
||||
editButton.setOnAction(new UpdateServerConfigHandler(serverConfig, primaryStage));
|
||||
headBox.getChildren().addAll(openButton, editButton, addButton, statusCircle);
|
||||
HBox.setMargin(statusCircle, new Insets(0,0,0,30));
|
||||
headBox.setSpacing(20d);
|
||||
headBox.setAlignment(Pos.CENTER);
|
||||
//添加url
|
||||
ListView<ServerUrl> serverUrlListView = drawUrlPanel(serverConfig.getServerUrls(), serverConfig);
|
||||
addButton.setOnAction(new AddUrlHandler(serverConfig, serverUrlListView, threadMap, primaryStage));
|
||||
vBox.getChildren().addAll(headBox, serverUrlListView);
|
||||
|
||||
vBox.setSpacing(10d);
|
||||
VBox.setMargin(headBox, new Insets(10, 0, 0, 0));
|
||||
vBox.setPadding(Insets.EMPTY);
|
||||
TitledPane titledPane = new TitledPane(serverConfig.getServerName(), vBox);
|
||||
titledPane.setPrefWidth(600d);
|
||||
serverContainer.getChildren().add(titledPane);
|
||||
}
|
||||
|
||||
public ListView<ServerUrl> drawUrlPanel(List<ServerUrl> serverUrls, ServerConfig serverConfig) {
|
||||
ObservableList<ServerUrl> urlList = FXCollections.observableArrayList(serverUrls);
|
||||
ListView<ServerUrl> serverListViews = new ListView<>(urlList);
|
||||
listViews.add(serverListViews);
|
||||
serverListViews.setCellFactory(new Callback<ListView<ServerUrl>, ListCell<ServerUrl>>() {
|
||||
@Override
|
||||
public ListCell<ServerUrl> call(ListView<ServerUrl> param) {
|
||||
ListCell<ServerUrl> listCell =new ListCell<ServerUrl>() {
|
||||
@Override
|
||||
protected void updateItem(ServerUrl item, boolean empty) {
|
||||
super.updateItem(item, empty);
|
||||
|
||||
if(empty || item == null) {
|
||||
setText(null);
|
||||
setGraphic(null);
|
||||
}else {
|
||||
BorderPane urlPane = new BorderPane();
|
||||
|
||||
HBox labelBox = new HBox();
|
||||
Label nameLabel = new Label(item.getUrlName());
|
||||
nameLabel.setPrefWidth(100d);
|
||||
Label urlLabel = new Label(item.getUrl());
|
||||
labelBox.getChildren().addAll(nameLabel, urlLabel);
|
||||
labelBox.setAlignment(Pos.CENTER_LEFT);
|
||||
|
||||
HBox btnBox = new HBox();
|
||||
Button configButton = new Button("配置");
|
||||
Button deleteButton = new Button("删除");
|
||||
btnBox.setSpacing(15d);
|
||||
btnBox.getChildren().addAll(configButton, deleteButton);
|
||||
|
||||
deleteButton.setOnAction(new DeleteUrlHandler(item, serverConfig, serverListViews, threadMap));
|
||||
configButton.setOnAction(new UpdateUrlHandler(item, serverListViews, primaryStage));
|
||||
|
||||
urlPane.setLeft(labelBox);
|
||||
urlPane.setRight(btnBox);
|
||||
this.setGraphic(urlPane);
|
||||
}
|
||||
}
|
||||
};
|
||||
return listCell;
|
||||
}
|
||||
});
|
||||
|
||||
return serverListViews;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
0
src/resources/config.json
Normal file
0
src/resources/config.json
Normal file
Reference in New Issue
Block a user