11/*
2- * Copyright 2015 the original author or authors.
2+ * Copyright 2015 the original author or authors.
33 * @https://github.com/scouter-project/scouter
44 *
55 * Licensed under the Apache License, Version 2.0 (the "License");
4040import org .eclipse .swt .widgets .Shell ;
4141import org .eclipse .swt .widgets .Table ;
4242import org .eclipse .swt .widgets .TableItem ;
43+ import org .eclipse .swt .widgets .Text ;
4344
4445import scouter .client .Images ;
4546import scouter .client .group .GroupManager ;
@@ -55,8 +56,9 @@ public class ManageGroupDialog {
5556 String objType ;
5657 IManageGroup callback ;
5758
58- Set <Integer > noSelectedSet = new HashSet <Integer >();
59- Set <Integer > selectedSet = new HashSet <Integer >();
59+ Set <Integer > noSelectedSet = new HashSet <>();
60+ Set <Integer > selectedSet = new HashSet <>();
61+ Set <Integer > currentAllSet = new HashSet <>();
6062
6163 public ManageGroupDialog (Display display , String groupName , String objType ,
6264 IManageGroup callback ) {
@@ -78,16 +80,30 @@ public void show() {
7880 title .setFont (new Font (null , "Arial" , 10 , SWT .BOLD ));
7981 title .setImage (Images .getObjectIcon (objType , true , 0 ));
8082 title .setText (groupName + "(" + getDisplayObjtype (objType ) + ")" );
83+
84+
85+ Composite searchComp = new Composite (dialog , SWT .NONE );
86+ searchComp .setLayoutData (new GridData (SWT .FILL , SWT .CENTER , true , false , 1 , 1 ));
87+ searchComp .setLayout (new GridLayout (2 , false ));
88+
89+ CLabel searchLabel = new CLabel (searchComp , SWT .NONE );
90+ searchLabel .setText ("Search:" );
91+ final Text searchText = new Text (searchComp , SWT .BORDER );
92+ searchText .setLayoutData (new GridData (SWT .FILL , SWT .CENTER , true , false ));
93+ searchText .setMessage ("Enter keyword to filter..." );
94+
95+ new CLabel (dialog , SWT .NONE );
96+ new CLabel (dialog , SWT .NONE );
8197
8298 final Table allObjects = new Table (dialog , SWT .BORDER | SWT .MULTI );
8399 gr = new GridData (SWT .FILL , SWT .FILL , true , true );
84- gr .widthHint = 250 ;
85- gr .heightHint = 300 ;
100+ gr .widthHint = 375 ;
101+ gr .heightHint = 450 ;
86102 allObjects .setLayoutData (gr );
87103
88104 Composite centerComp = new Composite (dialog , SWT .NONE );
89105 gr = new GridData (SWT .FILL , SWT .FILL , true , true );
90- gr .widthHint = 100 ;
106+ gr .widthHint = 150 ;
91107 centerComp .setLayoutData (gr );
92108 centerComp .setLayout (new GridLayout (1 , true ));
93109
@@ -103,8 +119,8 @@ public void show() {
103119
104120 final Table selectedObjects = new Table (dialog , SWT .BORDER | SWT .MULTI );
105121 gr = new GridData (SWT .FILL , SWT .FILL , true , true );
106- gr .widthHint = 250 ;
107- gr .heightHint = 300 ;
122+ gr .widthHint = 375 ;
123+ gr .heightHint = 450 ;
108124 selectedObjects .setLayoutData (gr );
109125
110126 addBtn .addListener (SWT .Selection , new Listener (){
@@ -115,14 +131,17 @@ public void handleEvent(Event event) {
115131 }
116132 for (int i = 0 ; i < items .length ; i ++) {
117133 TableItem item = items [i ];
134+ int objHash = (Integer ) item .getData ();
135+ currentAllSet .remove (objHash );
118136 TableItem newItem = new TableItem (selectedObjects , SWT .NONE );
119137 newItem .setData (item .getData ());
120138 newItem .setText (item .getText ());
121139 newItem .setImage (item .getImage ());
122140 allObjects .remove (allObjects .indexOf (item ));
123141 item .dispose ();
124142 }
125- sortTable (allObjects );
143+ String filter = searchText .getText ();
144+ refreshTable (allObjects , currentAllSet , filter );
126145 sortTable (selectedObjects );
127146 }
128147 });
@@ -135,15 +154,17 @@ public void handleEvent(Event event) {
135154 }
136155 for (int i = 0 ; i < items .length ; i ++) {
137156 TableItem item = items [i ];
157+ int objHash = (Integer ) item .getData ();
158+ currentAllSet .add (objHash );
138159 TableItem newItem = new TableItem (allObjects , SWT .NONE );
139160 newItem .setData (item .getData ());
140161 newItem .setText (item .getText ());
141162 newItem .setImage (item .getImage ());
142163 selectedObjects .remove (selectedObjects .indexOf (item ));
143164 item .dispose ();
144165 }
145- sortTable ( allObjects );
146- sortTable ( selectedObjects );
166+ String filter = searchText . getText ( );
167+ refreshTable ( allObjects , currentAllSet , filter );
147168 }
148169 });
149170
@@ -168,17 +189,16 @@ public void handleEvent(Event event) {
168189 return ;
169190 }
170191 TableItem [] selectedItems = selectedObjects .getItems ();
171- List <Integer > addedObjHashs = new ArrayList <Integer >();
192+ List <Integer > addedObjHashs = new ArrayList <>();
172193 for (TableItem item : selectedItems ) {
173194 int objHash = (Integer ) item .getData ();
174195 if (selectedSet .contains (objHash ) == false ) {
175196 addedObjHashs .add (objHash );
176197 }
177198 }
178- TableItem [] noSelectedItems = allObjects .getItems ();
179- List <Integer > removedObjHashs = new ArrayList <Integer >();
180- for (TableItem item : noSelectedItems ) {
181- int objHash = (Integer ) item .getData ();
199+
200+ List <Integer > removedObjHashs = new ArrayList <>();
201+ for (Integer objHash : currentAllSet ) {
182202 if (noSelectedSet .contains (objHash ) == false ) {
183203 removedObjHashs .add (objHash );
184204 }
@@ -200,21 +220,13 @@ public void handleEvent(Event event) {
200220 selectedSet .add (objHash );
201221 } else {
202222 noSelectedSet .add (objHash );
223+ currentAllSet .add (objHash );
203224 }
204225 }
205226 }
206227 }
207-
208- for (Integer objHash : noSelectedSet ) {
209- AgentObject agent = AgentModelThread .getInstance ().getAgentObject (objHash );
210- if (agent == null ) {
211- continue ;
212- }
213- TableItem item = new TableItem (allObjects , SWT .NONE );
214- item .setData (objHash );
215- item .setText (agent .getObjName () + "(" + ServerManager .getInstance ().getServer (agent .getServerId ()).getName () + ")" );
216- item .setImage (agent .isAlive () ? Images .active : Images .dead );
217- }
228+
229+ refreshTable (allObjects , currentAllSet , null );
218230
219231 for (Integer objHash : selectedSet ) {
220232 AgentObject agent = AgentModelThread .getInstance ().getAgentObject (objHash );
@@ -226,9 +238,15 @@ public void handleEvent(Event event) {
226238 item .setText (agent .getObjName () + "(" + ServerManager .getInstance ().getServer (agent .getServerId ()).getName () + ")" );
227239 item .setImage (agent .isAlive () ? Images .active : Images .dead );
228240 }
229-
230- sortTable (allObjects );
241+
231242 sortTable (selectedObjects );
243+
244+ searchText .addListener (SWT .Modify , new Listener (){
245+ public void handleEvent (Event event ) {
246+ String filter = searchText .getText ();
247+ refreshTable (allObjects , currentAllSet , filter );
248+ }
249+ });
232250
233251 dialog .pack ();
234252 dialog .open ();
@@ -256,6 +274,24 @@ public int[] toIntArray(List<Integer> list) {
256274 return ret ;
257275 }
258276
277+ private void refreshTable (Table table , Set <Integer > objHashSet , String filter ) {
278+ table .removeAll ();
279+ for (Integer objHash : objHashSet ) {
280+ AgentObject agent = AgentModelThread .getInstance ().getAgentObject (objHash );
281+ if (agent == null ) {
282+ continue ;
283+ }
284+ String displayText = agent .getObjName () + "(" + ServerManager .getInstance ().getServer (agent .getServerId ()).getName () + ")" ;
285+ if (filter == null || filter .isEmpty () || displayText .toLowerCase ().contains (filter .toLowerCase ())) {
286+ TableItem item = new TableItem (table , SWT .NONE );
287+ item .setData (objHash );
288+ item .setText (displayText );
289+ item .setImage (agent .isAlive () ? Images .active : Images .dead );
290+ }
291+ }
292+ sortTable (table );
293+ }
294+
259295 private void sortTable (Table table ) {
260296 TableItem [] items = table .getItems ();
261297 Collator collator = Collator .getInstance (Locale .getDefault ());
0 commit comments