11package com .xwintop .xJavaFxTool .services .debugTools ;
22
33import com .xwintop .xJavaFxTool .controller .debugTools .ZookeeperToolController ;
4+ import com .xwintop .xcore .util .javafx .AlertUtil ;
5+ import com .xwintop .xcore .util .javafx .TooltipUtil ;
46import javafx .scene .control .TreeItem ;
57import lombok .Getter ;
68import lombok .Setter ;
79import lombok .extern .slf4j .Slf4j ;
810import org .I0Itec .zkclient .ZkClient ;
11+ import org .I0Itec .zkclient .exception .ZkMarshallingError ;
12+ import org .I0Itec .zkclient .serialize .ZkSerializer ;
913import 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 ;
1121import 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