Skip to content

Commit 1ee39c3

Browse files
authored
Merge pull request #1041 from zbum/feature/manage_group_search
[client] 그룹 관리 다이얼로그에 검색 필터 기능 추가
2 parents c2d70c3 + 8b2fedc commit 1ee39c3

1 file changed

Lines changed: 65 additions & 29 deletions

File tree

scouter.client/src/scouter/client/popup/ManageGroupDialog.java

Lines changed: 65 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
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");
@@ -40,6 +40,7 @@
4040
import org.eclipse.swt.widgets.Shell;
4141
import org.eclipse.swt.widgets.Table;
4242
import org.eclipse.swt.widgets.TableItem;
43+
import org.eclipse.swt.widgets.Text;
4344

4445
import scouter.client.Images;
4546
import 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

Comments
 (0)