Skip to content

Commit 2957395

Browse files
committed
添加zookeeper工具。
1 parent 2345609 commit 2957395

2 files changed

Lines changed: 181 additions & 8 deletions

File tree

src/main/java/com/xwintop/xJavaFxTool/controller/debugTools/ZookeeperToolController.java

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package com.xwintop.xJavaFxTool.controller.debugTools;
22

3+
import com.easipass.gateway.entity.TaskConfig;
34
import com.xwintop.xJavaFxTool.services.debugTools.ZookeeperToolService;
45
import com.xwintop.xJavaFxTool.view.debugTools.ZookeeperToolView;
56
import javafx.event.ActionEvent;
67
import javafx.fxml.FXML;
8+
import javafx.scene.control.ContextMenu;
9+
import javafx.scene.control.MenuItem;
710
import javafx.scene.control.TreeItem;
11+
import javafx.scene.input.MouseButton;
812
import lombok.Getter;
913
import lombok.Setter;
1014
import lombok.extern.slf4j.Slf4j;
15+
import org.apache.commons.lang3.time.DateFormatUtils;
1116

1217
import java.net.URL;
18+
import java.util.Date;
1319
import java.util.ResourceBundle;
1420

1521
/**
@@ -38,6 +44,55 @@ private void initView() {
3844
}
3945

4046
private void initEvent() {
47+
nodeTreeView.setOnMouseClicked(event -> {
48+
TreeItem<String> selectedItem = nodeTreeView.getSelectionModel().getSelectedItem();
49+
if (selectedItem == null) {
50+
return;
51+
}
52+
if (event.getButton() == MouseButton.PRIMARY) {
53+
zookeeperToolService.nodeSelectionChanged(selectedItem);
54+
} else if (event.getButton() == MouseButton.SECONDARY) {
55+
MenuItem menu_UnfoldAll = new MenuItem("展开所有");
56+
menu_UnfoldAll.setOnAction(event1 -> {
57+
nodeTreeView.getRoot().setExpanded(true);
58+
nodeTreeView.getRoot().getChildren().forEach(stringTreeItem -> {
59+
stringTreeItem.setExpanded(true);
60+
});
61+
});
62+
MenuItem menu_FoldAll = new MenuItem("折叠所有");
63+
menu_FoldAll.setOnAction(event1 -> {
64+
nodeTreeView.getRoot().setExpanded(false);
65+
nodeTreeView.getRoot().getChildren().forEach(stringTreeItem -> {
66+
stringTreeItem.setExpanded(false);
67+
});
68+
});
69+
ContextMenu contextMenu = new ContextMenu(menu_UnfoldAll, menu_FoldAll);
70+
if (selectedItem.getValue().endsWith("service.yml")) {
71+
MenuItem menu_AddTask = new MenuItem("添加任务");
72+
menu_AddTask.setOnAction(event1 -> {
73+
String taskConfigName = "taskConfig" + DateFormatUtils.format(new Date(), "MMddHHmm");
74+
TreeItem<String> addItem = new TreeItem<>(taskConfigName);
75+
selectedItem.getChildren().add(addItem);
76+
TaskConfig taskConfig = new TaskConfig();
77+
taskConfig.setName(taskConfigName);
78+
});
79+
contextMenu.getItems().add(menu_AddTask);
80+
MenuItem menu_RemoveFile = new MenuItem("删除文件");
81+
menu_RemoveFile.setOnAction(event1 -> {
82+
selectedItem.getParent().getChildren().remove(selectedItem);
83+
});
84+
contextMenu.getItems().add(menu_RemoveFile);
85+
MenuItem menu_RemoveAll = new MenuItem("删除所有任务");
86+
menu_RemoveAll.setOnAction(event1 -> {
87+
selectedItem.getChildren().clear();
88+
});
89+
contextMenu.getItems().add(menu_RemoveAll);
90+
MenuItem menu_SaveFile = new MenuItem("保存文件");
91+
contextMenu.getItems().add(menu_SaveFile);
92+
}
93+
nodeTreeView.setContextMenu(contextMenu);
94+
}
95+
});
4196
}
4297

4398
private void initService() {
@@ -60,7 +115,7 @@ private void refreshOnAction(ActionEvent event) {
60115

61116
@FXML
62117
private void deleteNodeOnAction(ActionEvent event) {
63-
zookeeperToolService.disconnectOnAction();
118+
zookeeperToolService.deleteNodeOnAction();
64119
}
65120

66121
@FXML
@@ -70,7 +125,7 @@ private void addNodeOnAction(ActionEvent event) {
70125

71126
@FXML
72127
private void nodeDataSaveOnAction(ActionEvent event) {
73-
128+
zookeeperToolService.nodeDataSaveOnAction();
74129
}
75130

76131

src/main/java/com/xwintop/xJavaFxTool/services/debugTools/ZookeeperToolService.java

Lines changed: 124 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,25 @@
11
package com.xwintop.xJavaFxTool.services.debugTools;
22

33
import com.xwintop.xJavaFxTool.controller.debugTools.ZookeeperToolController;
4+
import com.xwintop.xcore.util.javafx.AlertUtil;
5+
import com.xwintop.xcore.util.javafx.TooltipUtil;
46
import javafx.scene.control.TreeItem;
57
import lombok.Getter;
68
import lombok.Setter;
79
import lombok.extern.slf4j.Slf4j;
810
import org.I0Itec.zkclient.ZkClient;
11+
import org.I0Itec.zkclient.exception.ZkMarshallingError;
12+
import org.I0Itec.zkclient.serialize.ZkSerializer;
913
import org.apache.commons.lang3.StringUtils;
14+
import org.apache.commons.lang3.time.DateFormatUtils;
15+
import org.apache.zookeeper.ZooDefs.Perms;
16+
import org.apache.zookeeper.data.ACL;
17+
import org.apache.zookeeper.data.Stat;
1018

19+
import java.io.UnsupportedEncodingException;
20+
import java.util.LinkedHashMap;
1121
import java.util.List;
22+
import java.util.Map;
1223

1324
/**
1425
* @ClassName: ZookeeperToolService
@@ -32,10 +43,29 @@ public ZookeeperToolService(ZookeeperToolController zookeeperToolController) {
3243
public void connectOnAction() {
3344
if (zkClient == null) {
3445
zkClient = new ZkClient(zookeeperToolController.getZkServersTextField().getText().trim());
35-
// zkClient.setZkSerializer(new ZKStringSerializer());
46+
zkClient.setZkSerializer(new ZkSerializer() {
47+
@Override
48+
public byte[] serialize(Object data) throws ZkMarshallingError {
49+
try {
50+
return String.valueOf(data).getBytes("utf-8");
51+
} catch (UnsupportedEncodingException var3) {
52+
throw new ZkMarshallingError(var3.getMessage());
53+
}
54+
}
55+
56+
@Override
57+
public Object deserialize(byte[] bytes) throws ZkMarshallingError {
58+
try {
59+
return new String(bytes, "utf-8");
60+
} catch (UnsupportedEncodingException e) {
61+
throw new ZkMarshallingError(e.getMessage());
62+
}
63+
}
64+
});
3665
}
3766
zookeeperToolController.getNodeTreeView().getRoot().getChildren().clear();
3867
this.addNodeTree("/", zookeeperToolController.getNodeTreeView().getRoot());
68+
zookeeperToolController.getNodeTreeView().getRoot().setExpanded(true);
3969
}
4070

4171
private void addNodeTree(String path, TreeItem<String> treeItem) {
@@ -48,23 +78,111 @@ private void addNodeTree(String path, TreeItem<String> treeItem) {
4878
}
4979
}
5080

51-
public void disconnectOnAction() {
81+
private String getNodePath(TreeItem<String> selectedItem) {
82+
StringBuffer stringBuffer = new StringBuffer();
83+
stringBuffer.append(selectedItem.getValue());
84+
TreeItem<String> indexItem = selectedItem.getParent();
85+
while (indexItem != null) {
86+
stringBuffer.insert(0, StringUtils.appendIfMissing(indexItem.getValue(), "/", "/"));
87+
indexItem = indexItem.getParent();
88+
}
89+
return stringBuffer.toString();
90+
}
5291

92+
public void nodeSelectionChanged(TreeItem<String> selectedItem) {
93+
String nodePath = this.getNodePath(selectedItem);
94+
if (!zkClient.exists(nodePath)) {
95+
TooltipUtil.showToast("结点不存在");
96+
return;
97+
}
98+
zookeeperToolController.getNodeDataValueTextArea().setText(zkClient.readData(nodePath));
99+
Map.Entry<List<ACL>, Stat> aclsEntry = zkClient.getAcl(nodePath);
100+
Stat stat = aclsEntry.getValue();
101+
zookeeperToolController.getA_VERSIONTextField().setText("" + stat.getAversion());
102+
zookeeperToolController.getC_TIMETextField().setText(DateFormatUtils.format(stat.getCtime(), "yyyy-MM-dd'T'HH:mm:ss.SSS z"));
103+
zookeeperToolController.getC_VERSIONTextField().setText("" + stat.getCversion());
104+
zookeeperToolController.getCZXIDTextField().setText("0x" + Long.toHexString(stat.getCzxid()));
105+
zookeeperToolController.getDATA_LENGTHTextField().setText("" + stat.getDataLength());
106+
zookeeperToolController.getEPHEMERAL_OWNERTextField().setText("0x" + Long.toHexString(stat.getEphemeralOwner()));
107+
zookeeperToolController.getM_TIMETextField().setText(DateFormatUtils.format(stat.getMtime(), "yyyy-MM-dd'T'HH:mm:ss.SSS z"));
108+
zookeeperToolController.getMZXIDTextField().setText("0x" + Long.toHexString(stat.getMzxid()));
109+
zookeeperToolController.getNUM_CHILDRENTextField().setText("" + stat.getNumChildren());
110+
zookeeperToolController.getPZXIDTextField().setText("0x" + Long.toHexString(stat.getPzxid()));
111+
zookeeperToolController.getVERSIONTextField().setText("" + stat.getVersion());
112+
113+
List<ACL> acls = aclsEntry.getKey();
114+
for (ACL acl : acls) {
115+
Map<String, String> aclMap = new LinkedHashMap<String, String>();
116+
zookeeperToolController.getAclSchemeTextField().setText(acl.getId().getScheme());
117+
zookeeperToolController.getAclIdTextField().setText(acl.getId().getId());
118+
StringBuilder sb = new StringBuilder();
119+
int perms = acl.getPerms();
120+
if ((perms & Perms.READ) == Perms.READ) {
121+
sb.append("Read");
122+
}
123+
if ((perms & Perms.WRITE) == Perms.WRITE) {
124+
sb.append(", Write");
125+
}
126+
if ((perms & Perms.CREATE) == Perms.CREATE) {
127+
sb.append(", Create");
128+
}
129+
if ((perms & Perms.DELETE) == Perms.DELETE) {
130+
sb.append(", Delete");
131+
}
132+
if ((perms & Perms.ADMIN) == Perms.ADMIN) {
133+
sb.append(", Admin");
134+
}
135+
zookeeperToolController.getAclPermissionsTextField().setText(sb.toString());
136+
}
53137
}
54138

55-
public void refreshOnAction() {
139+
public void disconnectOnAction() {
140+
if(zkClient != null){
141+
zkClient.close();
142+
zkClient = null;
143+
}
144+
zookeeperToolController.getNodeTreeView().getRoot().getChildren().clear();
145+
}
56146

147+
public void refreshOnAction() {
148+
if(zkClient == null){
149+
TooltipUtil.showToast("zookeeper未连接");
150+
return;
151+
}
152+
connectOnAction();
57153
}
58154

59155
public void deleteNodeOnAction() {
60-
156+
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
157+
if (selectedItem == null) {
158+
TooltipUtil.showToast("未选中结点");
159+
return;
160+
}
161+
String nodePath = this.getNodePath(selectedItem);
162+
zkClient.delete(nodePath);
163+
selectedItem.getParent().getChildren().remove(selectedItem);
61164
}
62165

63166
public void addNodeOnAction() {
64-
167+
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
168+
if (selectedItem == null) {
169+
TooltipUtil.showToast("未选中结点");
170+
return;
171+
}
172+
String nodeName = AlertUtil.showInputAlert("请输入结点名称:");
173+
String nodePath = this.getNodePath(selectedItem);
174+
zkClient.createEphemeral(StringUtils.appendIfMissing(nodePath, "/", "/") + nodeName);
175+
TreeItem<String> treeItem2 = new TreeItem<>(nodeName);
176+
selectedItem.getChildren().add(treeItem2);
65177
}
66178

67179
public void nodeDataSaveOnAction() {
68-
180+
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
181+
if (selectedItem == null) {
182+
TooltipUtil.showToast("未选中结点");
183+
return;
184+
}
185+
String nodePath = this.getNodePath(selectedItem);
186+
zkClient.writeData(nodePath, zookeeperToolController.getNodeDataValueTextArea().getText());
69187
}
70188
}

0 commit comments

Comments
 (0)