diff --git a/app/src/main/java/cc/cc1234/app/controller/ServerViewController.java b/app/src/main/java/cc/cc1234/app/controller/ServerViewController.java index c954967e..cb65794d 100644 --- a/app/src/main/java/cc/cc1234/app/controller/ServerViewController.java +++ b/app/src/main/java/cc/cc1234/app/controller/ServerViewController.java @@ -19,7 +19,6 @@ import com.jfoenix.controls.JFXPasswordField; import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXToggleButton; -import com.jfoenix.validation.RegexValidator; import javafx.application.Platform; import javafx.beans.binding.Bindings; import javafx.fxml.FXML; @@ -37,6 +36,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -75,6 +75,9 @@ public class ServerViewController { @FXML private JFXTextField sshServer; + @FXML + private JFXTextField sshServerPort; + @FXML private JFXTextField sshUsername; @@ -216,10 +219,11 @@ private void propertyBind(ServerConfigurationVO config) { zkPort.textProperty().setValue(config.getZkPort() + ""); zkAlias.textProperty().setValue(config.getZkAlias()); sshServer.textProperty().setValue(config.getSshServer()); + sshServerPort.textProperty().setValue(Objects.toString(config.getSshServerPort(), "")); sshUsername.textProperty().setValue(config.getSshUsername()); sshPassword.textProperty().setValue(config.getSshPassword()); remoteServer.textProperty().setValue(config.getRemoteServer()); - remoteServerPort.textProperty().setValue(config.getRemoteServerPort() + ""); + remoteServerPort.textProperty().setValue(Objects.toString(config.getRemoteServerPort(), "")); sshTunnelCheckbox.selectedProperty().setValue(config.isSshEnabled()); final String acl = String.join("\n", config.getAclList()); aclTextArea.textProperty().setValue(acl); @@ -295,12 +299,11 @@ private void initValidator() { remoteServer.setValidators(new StringNotBlankValidator()); remoteServerPort.setValidators(new PortValidator()); + + sshServer.setValidators(new StringNotBlankValidator()); + sshServerPort.setValidators(new PortValidator()); sshUsername.setValidators(new NotNullValidator()); sshPassword.setValidators(new NotNullValidator()); - - var sshServerMatchPattern = new RegexValidator("should be [host:port]"); - sshServerMatchPattern.setRegexPattern(".*\\:\\d+$"); - sshServer.setValidators(sshServerMatchPattern); } private void resetValidate() { @@ -312,12 +315,14 @@ private void resetValidate() { sshUsername.resetValidation(); sshPassword.resetValidation(); sshServer.resetValidation(); + sshServerPort.resetValidation(); } private void sshTunnelViewPropertyBind() { var sshTunnelEnabledProperty = sshTunnelCheckbox.selectedProperty(); var disableBinding = Bindings.createBooleanBinding(() -> !sshTunnelEnabledProperty.get(), sshTunnelEnabledProperty); sshServer.disableProperty().bind(disableBinding); + sshServerPort.disableProperty().bind(disableBinding); sshUsername.disableProperty().bind(disableBinding); sshPassword.disableProperty().bind(disableBinding); remoteServer.disableProperty().bind(disableBinding); @@ -342,10 +347,19 @@ private void onSave() { serverConfigVO.setZkUrl(zkHost.getText() + ":" + zkPort.getText()); // ssh-tunnel config serverConfigVO.setRemoteServer(remoteServer.textProperty().get()); - serverConfigVO.setRemoteServerPort(Integer.parseInt(remoteServerPort.textProperty().get())); + if (Strings.isNullOrEmpty(remoteServerPort.getText())) { + serverConfigVO.setRemoteServerPort(null); + } else { + serverConfigVO.setRemoteServerPort(Integer.parseInt(remoteServerPort.getText())); + } serverConfigVO.setSshUsername(sshUsername.textProperty().get()); serverConfigVO.setSshPassword(sshPassword.textProperty().get()); serverConfigVO.setSshServer(sshServer.textProperty().get()); + if (Strings.isNullOrEmpty(sshServerPort.getText())) { + serverConfigVO.setSshServerPort(null); + } else { + serverConfigVO.setSshServerPort(Integer.parseInt(sshServerPort.getText())); + } serverConfigVO.setSshEnabled(sshTunnelCheckbox.isSelected()); // zookeeper ACL config List acls = Arrays.stream(aclTextArea.textProperty().get().split("\n")) @@ -378,7 +392,8 @@ private boolean baseValidateBeforeSave() { remoteServerPort.validate(), sshUsername.validate(), sshPassword.validate(), - sshServer.validate() + sshServer.validate(), + sshServerPort.validate() ).allMatch(t -> t); } else { baseValidate = Stream.of(zkHost.validate(), zkPort.validate(), zkAlias.validate()).allMatch(t -> t); diff --git a/app/src/main/java/cc/cc1234/app/facade/PrettyZooFacade.java b/app/src/main/java/cc/cc1234/app/facade/PrettyZooFacade.java index 5ec4291b..dcdb9418 100644 --- a/app/src/main/java/cc/cc1234/app/facade/PrettyZooFacade.java +++ b/app/src/main/java/cc/cc1234/app/facade/PrettyZooFacade.java @@ -136,8 +136,8 @@ public void saveServerConfiguration(ServerConfigurationVO serverConfigurationVO) } if (serverConfigurationVO.getSshServer().trim().length() > 0) { - var sshServerHostAndPort = serverConfigurationVO.getSshServer().split(":"); - tunnelConfigurationBuilder.sshHost(sshServerHostAndPort[0]).sshPort(Integer.parseInt(sshServerHostAndPort[1])); + tunnelConfigurationBuilder.sshHost(serverConfigurationVO.getSshServer()) + .sshPort(serverConfigurationVO.getSshServerPort()); } tunnelConfigurationBuilder.localhost(serverConfigurationVO.getZkHost()) .localPort(serverConfigurationVO.getZkPort()); @@ -199,9 +199,9 @@ public void exportConfig(File file) { public void importConfig(File configFile) { Try.of(() -> { - Asserts.notNull(configFile, "文件不存在"); - Asserts.assertTrue(configFile.isFile(), "请选择文件"); - }) + Asserts.notNull(configFile, "文件不存在"); + Asserts.assertTrue(configFile.isFile(), "请选择文件"); + }) .onFailure(e -> VToast.error(e.getMessage())) .onSuccess(e -> configurationDomainService.importConfig(configFile)); } diff --git a/app/src/main/java/cc/cc1234/app/listener/DefaultConfigurationListener.java b/app/src/main/java/cc/cc1234/app/listener/DefaultConfigurationListener.java index e0a6bf54..03ee9ce6 100644 --- a/app/src/main/java/cc/cc1234/app/listener/DefaultConfigurationListener.java +++ b/app/src/main/java/cc/cc1234/app/listener/DefaultConfigurationListener.java @@ -48,17 +48,10 @@ public void onServerChange(ServerConfigData newValue) { newValue.getSshTunnelConfig() .map(sshTunnelConfig -> { old.setSshEnabled(newValue.getSshTunnelEnabled()); - if (sshTunnelConfig.getSshHost() == null) { - old.setSshServer(""); - } else { - old.setSshServer(String.format("%s:%d", sshTunnelConfig.getSshHost(), sshTunnelConfig.getSshPort())); - } - if (sshTunnelConfig.getRemoteHost() == null) { - old.setRemoteServer(""); - } else { - old.setRemoteServer(sshTunnelConfig.getRemoteHost()); - old.setRemoteServerPort(sshTunnelConfig.getRemotePort()); - } + old.setSshServer(sshTunnelConfig.getSshHost()); + old.setSshServerPort(sshTunnelConfig.getSshPort()); + old.setRemoteServer(sshTunnelConfig.getRemoteHost()); + old.setRemoteServerPort(sshTunnelConfig.getRemotePort()); old.setSshUsername(sshTunnelConfig.getSshUsername()); old.setSshPassword(sshTunnelConfig.getPassword()); return true; @@ -66,9 +59,11 @@ public void onServerChange(ServerConfigData newValue) { .orElseGet(() -> { old.setSshEnabled(newValue.getSshTunnelEnabled()); old.setSshServer(""); + old.setSshServerPort(null); old.setSshUsername(""); old.setSshPassword(""); old.setRemoteServer(""); + old.setRemoteServerPort(null); return true; }); diff --git a/app/src/main/java/cc/cc1234/app/vo/ConfigurationVOTransfer.java b/app/src/main/java/cc/cc1234/app/vo/ConfigurationVOTransfer.java index a3030fdc..ceb1d584 100644 --- a/app/src/main/java/cc/cc1234/app/vo/ConfigurationVOTransfer.java +++ b/app/src/main/java/cc/cc1234/app/vo/ConfigurationVOTransfer.java @@ -37,7 +37,8 @@ public static ServerConfigurationVO to(ServerConfiguration serverConfiguration) if (sshTunnelConfig.getSshHost() == null) { vo.setSshServer(""); } else { - vo.setSshServer(sshTunnelConfig.getSshHost() + ":" + sshTunnelConfig.getSshPort()); + vo.setSshServer(sshTunnelConfig.getSshHost()); + vo.setSshServerPort(sshTunnelConfig.getSshPort()); } vo.setSshUsername(sshTunnelConfig.getSshUsername()); vo.setSshPassword(sshTunnelConfig.getSshPassword()); @@ -76,7 +77,8 @@ public static ServerConfigurationVO to(ServerConfigData serverConfig) { if (sshTunnelConfig.getRemoteHost() == null || sshTunnelConfig.getRemotePort() == null) { vo.setRemoteServer(""); } else { - vo.setSshServer(sshTunnelConfig.getSshHost() + ":" + sshTunnelConfig.getSshPort()); + vo.setSshServer(sshTunnelConfig.getSshHost()); + vo.setSshServerPort(sshTunnelConfig.getSshPort()); } }); vo.setSshEnabled(serverConfig.getSshTunnelEnabled()); diff --git a/app/src/main/java/cc/cc1234/app/vo/ServerConfigurationVO.java b/app/src/main/java/cc/cc1234/app/vo/ServerConfigurationVO.java index fcfc300a..3e7aebd3 100644 --- a/app/src/main/java/cc/cc1234/app/vo/ServerConfigurationVO.java +++ b/app/src/main/java/cc/cc1234/app/vo/ServerConfigurationVO.java @@ -22,13 +22,15 @@ public class ServerConfigurationVO { private SimpleStringProperty sshServer = new SimpleStringProperty(""); + private ObjectProperty sshServerPort = new SimpleObjectProperty<>(); + private SimpleStringProperty sshUsername = new SimpleStringProperty(""); private SimpleStringProperty sshPassword = new SimpleStringProperty(""); private SimpleStringProperty remoteServer = new SimpleStringProperty(""); - private SimpleIntegerProperty remoteServerPort = new SimpleIntegerProperty(0); + private ObjectProperty remoteServerPort = new SimpleObjectProperty<>(); public void unbind() { zkUrl.unbind(); @@ -38,6 +40,7 @@ public void unbind() { aclList.unbind(); sshEnabled.unbind(); sshServer.unbind(); + sshServerPort.unbind(); sshUsername.unbind(); sshPassword.unbind(); remoteServer.unbind(); @@ -48,26 +51,26 @@ public String getZkUrl() { return zkUrl.get(); } - public SimpleStringProperty zkUrlProperty() { - return zkUrl; - } - public void setZkUrl(String zkUrl) { this.zkUrl.set(zkUrl); } - public ServerStatus getStatus() { - return status.get(); + public SimpleStringProperty zkUrlProperty() { + return zkUrl; } - public SimpleObjectProperty statusProperty() { - return status; + public ServerStatus getStatus() { + return status.get(); } public void setStatus(ServerStatus status) { this.status.set(status); } + public SimpleObjectProperty statusProperty() { + return status; + } + public String getZkHost() { return zkHost.get(); } @@ -84,14 +87,14 @@ public int getZkPort() { return zkPort.get(); } - public SimpleIntegerProperty zkPortProperty() { - return zkPort; - } - public void setZkPort(int zkPort) { this.zkPort.set(zkPort); } + public SimpleIntegerProperty zkPortProperty() { + return zkPort; + } + public ObservableList getAclList() { return aclList.get(); } @@ -128,6 +131,18 @@ public SimpleStringProperty sshServerProperty() { return sshServer; } + public Integer getSshServerPort() { + return sshServerPort.get(); + } + + public void setSshServerPort(Integer sshServerPort) { + this.sshServerPort.set(sshServerPort); + } + + public ObjectProperty sshServerPortProperty() { + return sshServerPort; + } + public String getSshUsername() { return sshUsername.get(); } @@ -160,31 +175,27 @@ public void setRemoteServer(String remoteServer) { this.remoteServer.set(remoteServer); } - public SimpleStringProperty remoteServerProperty() { - return remoteServer; - } - - public int getRemoteServerPort() { + public Integer getRemoteServerPort() { return remoteServerPort.get(); } - public SimpleIntegerProperty remoteServerPortProperty() { - return remoteServerPort; + public void setRemoteServerPort(Integer remoteServerPort) { + this.remoteServerPort.set(remoteServerPort); } - public void setRemoteServerPort(int remoteServerPort) { - this.remoteServerPort.set(remoteServerPort); + public ObjectProperty remoteServerPortProperty() { + return remoteServerPort; } public String getZkAlias() { return zkAlias.get(); } - public SimpleStringProperty zkAliasProperty() { - return zkAlias; - } - public void setZkAlias(String zkAlias) { this.zkAlias.set(zkAlias); } + + public SimpleStringProperty zkAliasProperty() { + return zkAlias; + } } diff --git a/app/src/main/resources/fxml/ServerView.fxml b/app/src/main/resources/fxml/ServerView.fxml index b6f740a2..b1921293 100644 --- a/app/src/main/resources/fxml/ServerView.fxml +++ b/app/src/main/resources/fxml/ServerView.fxml @@ -36,11 +36,13 @@ - - - - - + + + + + + @@ -49,7 +51,7 @@