Skip to content

Commit 886ed6e

Browse files
committed
优化zookeeper工具。
1 parent e128b4d commit 886ed6e

2 files changed

Lines changed: 106 additions & 22 deletions

File tree

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

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,17 @@ private void initEvent() {
6767
});
6868
});
6969
ContextMenu contextMenu = new ContextMenu(menu_UnfoldAll, menu_FoldAll);
70-
// MenuItem menu_Rename = new MenuItem("重命名结点");
71-
// menu_Rename.setOnAction(event1 -> {
72-
// zookeeperToolService.renameNodeOnAction();
73-
// });
74-
// contextMenu.getItems().add(menu_Rename);
75-
MenuItem menu_AddNode = new MenuItem("添加子结点");
70+
MenuItem menu_Rename = new MenuItem("重命名节点");
71+
menu_Rename.setOnAction(event1 -> {
72+
zookeeperToolService.renameNodeOnAction(false);
73+
});
74+
contextMenu.getItems().add(menu_Rename);
75+
MenuItem menu_Copy = new MenuItem("复制节点");
76+
menu_Copy.setOnAction(event1 -> {
77+
zookeeperToolService.renameNodeOnAction(true);
78+
});
79+
contextMenu.getItems().add(menu_Copy);
80+
MenuItem menu_AddNode = new MenuItem("添加子节点");
7681
menu_AddNode.setOnAction(event1 -> {
7782
zookeeperToolService.addNodeOnAction();
7883
});
@@ -82,6 +87,16 @@ private void initEvent() {
8287
zookeeperToolService.deleteNodeOnAction();
8388
});
8489
contextMenu.getItems().add(menu_RemoveNode);
90+
MenuItem menu_AddNodeNotify = new MenuItem("添加节点修改通知");
91+
menu_AddNodeNotify.setOnAction(event1 -> {
92+
zookeeperToolService.addNodeNotify();
93+
});
94+
contextMenu.getItems().add(menu_AddNodeNotify);
95+
MenuItem menu_RemoveNodeNotify = new MenuItem("移除节点修改通知");
96+
menu_RemoveNodeNotify.setOnAction(event1 -> {
97+
zookeeperToolService.removeNodeNotify();
98+
});
99+
contextMenu.getItems().add(menu_RemoveNodeNotify);
85100
nodeTreeView.setContextMenu(contextMenu);
86101
}
87102
});

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

Lines changed: 85 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import lombok.Getter;
88
import lombok.Setter;
99
import lombok.extern.slf4j.Slf4j;
10+
import org.I0Itec.zkclient.IZkChildListener;
11+
import org.I0Itec.zkclient.IZkDataListener;
1012
import org.I0Itec.zkclient.ZkClient;
1113
import org.I0Itec.zkclient.exception.ZkMarshallingError;
1214
import org.I0Itec.zkclient.serialize.ZkSerializer;
@@ -17,6 +19,7 @@
1719
import org.apache.zookeeper.data.Stat;
1820

1921
import java.io.UnsupportedEncodingException;
22+
import java.util.HashMap;
2023
import java.util.LinkedHashMap;
2124
import java.util.List;
2225
import java.util.Map;
@@ -36,6 +39,9 @@ public class ZookeeperToolService {
3639

3740
ZkClient zkClient = null;
3841

42+
private Map<String, IZkChildListener> childListeners = new HashMap<>();
43+
private Map<String, IZkDataListener> dataListeners = new HashMap<>();
44+
3945
public ZookeeperToolService(ZookeeperToolController zookeeperToolController) {
4046
this.zookeeperToolController = zookeeperToolController;
4147
}
@@ -92,7 +98,7 @@ private String getNodePath(TreeItem<String> selectedItem) {
9298
public void nodeSelectionChanged(TreeItem<String> selectedItem) {
9399
String nodePath = this.getNodePath(selectedItem);
94100
if (!zkClient.exists(nodePath)) {
95-
TooltipUtil.showToast("结点不存在");
101+
TooltipUtil.showToast("节点不存在");
96102
return;
97103
}
98104
zookeeperToolController.getNodeDataValueTextArea().setText(zkClient.readData(nodePath));
@@ -155,50 +161,113 @@ public void refreshOnAction() {
155161
public void deleteNodeOnAction() {
156162
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
157163
if (selectedItem == null) {
158-
TooltipUtil.showToast("未选中结点");
164+
TooltipUtil.showToast("未选中节点");
159165
return;
160166
}
161167
String nodePath = this.getNodePath(selectedItem);
162-
if (selectedItem.getChildren().size() > 0) {
163-
zkClient.deleteRecursive(nodePath);
164-
}
165-
zkClient.delete(nodePath);
168+
zkClient.deleteRecursive(nodePath);
166169
selectedItem.getParent().getChildren().remove(selectedItem);
167170
}
168171

169172
public void addNodeOnAction() {
170173
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
171174
if (selectedItem == null) {
172-
TooltipUtil.showToast("未选中结点");
175+
TooltipUtil.showToast("未选中节点");
176+
return;
177+
}
178+
String nodeName = AlertUtil.showInputAlert("请输入节点名称:");
179+
if (StringUtils.isEmpty(nodeName)) {
180+
TooltipUtil.showToast("节点名不能为空!");
173181
return;
174182
}
175-
String nodeName = AlertUtil.showInputAlert("请输入结点名称:");
176183
String nodePath = this.getNodePath(selectedItem);
177184
zkClient.createPersistent(StringUtils.appendIfMissing(nodePath, "/", "/") + nodeName);
178185
TreeItem<String> treeItem2 = new TreeItem<>(nodeName);
179186
selectedItem.getChildren().add(treeItem2);
180187
}
181188

182-
public void renameNodeOnAction() {
189+
public void renameNodeOnAction(boolean isCopy) {
183190
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
184191
if (selectedItem == null) {
185-
TooltipUtil.showToast("未选中结点");
192+
TooltipUtil.showToast("未选中节点");
186193
return;
187194
}
188-
String nodeName = AlertUtil.showInputAlert("请输入结点新名称:");
189-
String nodePath = this.getNodePath(selectedItem);
190-
zkClient.createPersistent(StringUtils.appendIfMissing(nodePath, "/", "/") + nodeName);
191-
TreeItem<String> treeItem2 = new TreeItem<>(nodeName);
192-
selectedItem.getChildren().add(treeItem2);
195+
String nodeName = AlertUtil.showInputAlert("请输入节点新名称:");
196+
if (StringUtils.isEmpty(nodeName)) {
197+
TooltipUtil.showToast("节点名不能为空!");
198+
return;
199+
}
200+
// String nodePath = this.getNodePath(selectedItem);
201+
String nodeParent = this.getNodePath(selectedItem.getParent());
202+
String nodeParentPath = StringUtils.appendIfMissing(nodeParent, "/", "/");
203+
copyNode(nodeParentPath + selectedItem.getValue(), nodeParentPath + nodeName);
204+
if (isCopy) {
205+
TreeItem<String> selectedItem2 = new TreeItem<>(nodeName);
206+
addNodeTree(nodeParentPath + nodeName, selectedItem2);
207+
selectedItem.getParent().getChildren().add(selectedItem2);
208+
} else {
209+
zkClient.deleteRecursive(nodeParentPath + selectedItem.getValue());
210+
selectedItem.setValue(nodeName);
211+
}
212+
}
213+
214+
private void copyNode(String path, String copyPath) {
215+
zkClient.createPersistent(copyPath, zkClient.readData(path), zkClient.getAcl(path).getKey());
216+
List<String> list = zkClient.getChildren(path);
217+
for (String name : list) {
218+
copyNode(StringUtils.appendIfMissing(path, "/", "/") + name, StringUtils.appendIfMissing(copyPath, "/", "/") + name);
219+
}
193220
}
194221

195222
public void nodeDataSaveOnAction() {
196223
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
197224
if (selectedItem == null) {
198-
TooltipUtil.showToast("未选中结点");
225+
TooltipUtil.showToast("未选中节点");
199226
return;
200227
}
201228
String nodePath = this.getNodePath(selectedItem);
202229
zkClient.writeData(nodePath, zookeeperToolController.getNodeDataValueTextArea().getText());
203230
}
231+
232+
public void addNodeNotify() {//添加节点通知
233+
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
234+
if (selectedItem == null) {
235+
TooltipUtil.showToast("未选中节点");
236+
return;
237+
}
238+
String nodePath = this.getNodePath(selectedItem);
239+
if (childListeners.containsKey(nodePath)) {
240+
TooltipUtil.showToast("该节点已经添加通知!");
241+
return;
242+
}
243+
IZkChildListener childListener = (parentPath, currentChilds) -> TooltipUtil.showToast("节点Child改变了", "Path:" + parentPath + "\r\n 子节点:" + currentChilds.toString());
244+
zkClient.subscribeChildChanges(nodePath, childListener);
245+
childListeners.put(nodePath, childListener);
246+
IZkDataListener dataListener = new IZkDataListener() {
247+
@Override
248+
public void handleDataChange(String dataPath, Object data) throws Exception {
249+
TooltipUtil.showToast("节点Data改变了", "Path:" + dataPath + "\r\n 新数据:" + data.toString());
250+
}
251+
252+
@Override
253+
public void handleDataDeleted(String dataPath) throws Exception {
254+
TooltipUtil.showToast("节点删除了", "Path:" + dataPath);
255+
}
256+
};
257+
zkClient.subscribeDataChanges(nodePath, dataListener);
258+
dataListeners.put(nodePath, dataListener);
259+
TooltipUtil.showToast("该节点添加通知成功!");
260+
}
261+
262+
public void removeNodeNotify() {//移除节点通知
263+
TreeItem<String> selectedItem = zookeeperToolController.getNodeTreeView().getSelectionModel().getSelectedItem();
264+
if (selectedItem == null) {
265+
TooltipUtil.showToast("未选中节点");
266+
return;
267+
}
268+
String nodePath = this.getNodePath(selectedItem);
269+
zkClient.unsubscribeChildChanges(nodePath, childListeners.remove(nodePath));
270+
zkClient.unsubscribeDataChanges(nodePath, dataListeners.remove(nodePath));
271+
TooltipUtil.showToast("该节点通知成功移除!");
272+
}
204273
}

0 commit comments

Comments
 (0)