diff --git a/scouter.client/src/scouter/client/popup/ManageGroupDialog.java b/scouter.client/src/scouter/client/popup/ManageGroupDialog.java index e631e858e..c9c2dcf8f 100644 --- a/scouter.client/src/scouter/client/popup/ManageGroupDialog.java +++ b/scouter.client/src/scouter/client/popup/ManageGroupDialog.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 the original author or authors. + * Copyright 2015 the original author or authors. * @https://github.com/scouter-project/scouter * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -40,6 +40,7 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; import scouter.client.Images; import scouter.client.group.GroupManager; @@ -55,8 +56,9 @@ public class ManageGroupDialog { String objType; IManageGroup callback; - Set noSelectedSet = new HashSet(); - Set selectedSet = new HashSet(); + Set noSelectedSet = new HashSet<>(); + Set selectedSet = new HashSet<>(); + Set currentAllSet = new HashSet<>(); public ManageGroupDialog(Display display, String groupName, String objType, IManageGroup callback) { @@ -78,16 +80,30 @@ public void show() { title.setFont(new Font(null, "Arial", 10, SWT.BOLD)); title.setImage(Images.getObjectIcon(objType, true, 0)); title.setText(groupName + "(" + getDisplayObjtype(objType) + ")"); + + + Composite searchComp = new Composite(dialog, SWT.NONE); + searchComp.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + searchComp.setLayout(new GridLayout(2, false)); + + CLabel searchLabel = new CLabel(searchComp, SWT.NONE); + searchLabel.setText("Search:"); + final Text searchText = new Text(searchComp, SWT.BORDER); + searchText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + searchText.setMessage("Enter keyword to filter..."); + + new CLabel(dialog, SWT.NONE); + new CLabel(dialog, SWT.NONE); final Table allObjects = new Table(dialog, SWT.BORDER | SWT.MULTI); gr = new GridData(SWT.FILL, SWT.FILL, true, true); - gr.widthHint = 250; - gr.heightHint = 300; + gr.widthHint = 375; + gr.heightHint = 450; allObjects.setLayoutData(gr); Composite centerComp = new Composite(dialog, SWT.NONE); gr = new GridData(SWT.FILL, SWT.FILL, true, true); - gr.widthHint = 100; + gr.widthHint = 150; centerComp.setLayoutData(gr); centerComp.setLayout(new GridLayout(1, true)); @@ -103,8 +119,8 @@ public void show() { final Table selectedObjects = new Table(dialog, SWT.BORDER | SWT.MULTI); gr = new GridData(SWT.FILL, SWT.FILL, true, true); - gr.widthHint = 250; - gr.heightHint = 300; + gr.widthHint = 375; + gr.heightHint = 450; selectedObjects.setLayoutData(gr); addBtn.addListener(SWT.Selection, new Listener(){ @@ -115,6 +131,8 @@ public void handleEvent(Event event) { } for (int i = 0; i < items.length; i++) { TableItem item = items[i]; + int objHash = (Integer) item.getData(); + currentAllSet.remove(objHash); TableItem newItem = new TableItem(selectedObjects, SWT.NONE); newItem.setData(item.getData()); newItem.setText(item.getText()); @@ -122,7 +140,8 @@ public void handleEvent(Event event) { allObjects.remove(allObjects.indexOf(item)); item.dispose(); } - sortTable(allObjects); + String filter = searchText.getText(); + refreshTable(allObjects, currentAllSet, filter); sortTable(selectedObjects); } }); @@ -135,6 +154,8 @@ public void handleEvent(Event event) { } for (int i = 0; i < items.length; i++) { TableItem item = items[i]; + int objHash = (Integer) item.getData(); + currentAllSet.add(objHash); TableItem newItem = new TableItem(allObjects, SWT.NONE); newItem.setData(item.getData()); newItem.setText(item.getText()); @@ -142,8 +163,8 @@ public void handleEvent(Event event) { selectedObjects.remove(selectedObjects.indexOf(item)); item.dispose(); } - sortTable(allObjects); - sortTable(selectedObjects); + String filter = searchText.getText(); + refreshTable(allObjects, currentAllSet, filter); } }); @@ -168,17 +189,16 @@ public void handleEvent(Event event) { return; } TableItem[] selectedItems = selectedObjects.getItems(); - List addedObjHashs = new ArrayList(); + List addedObjHashs = new ArrayList<>(); for (TableItem item : selectedItems) { int objHash = (Integer) item.getData(); if (selectedSet.contains(objHash) == false) { addedObjHashs.add(objHash); } } - TableItem[] noSelectedItems = allObjects.getItems(); - List removedObjHashs = new ArrayList(); - for (TableItem item : noSelectedItems) { - int objHash = (Integer) item.getData(); + + List removedObjHashs = new ArrayList<>(); + for (Integer objHash : currentAllSet) { if (noSelectedSet.contains(objHash) == false) { removedObjHashs.add(objHash); } @@ -200,21 +220,13 @@ public void handleEvent(Event event) { selectedSet.add(objHash); } else { noSelectedSet.add(objHash); + currentAllSet.add(objHash); } } } } - - for (Integer objHash : noSelectedSet) { - AgentObject agent = AgentModelThread.getInstance().getAgentObject(objHash); - if (agent == null) { - continue; - } - TableItem item = new TableItem(allObjects, SWT.NONE); - item.setData(objHash); - item.setText(agent.getObjName() + "(" + ServerManager.getInstance().getServer(agent.getServerId()).getName() + ")"); - item.setImage(agent.isAlive() ? Images.active : Images.dead); - } + + refreshTable(allObjects, currentAllSet, null); for (Integer objHash : selectedSet) { AgentObject agent = AgentModelThread.getInstance().getAgentObject(objHash); @@ -226,9 +238,15 @@ public void handleEvent(Event event) { item.setText(agent.getObjName() + "(" + ServerManager.getInstance().getServer(agent.getServerId()).getName() + ")"); item.setImage(agent.isAlive() ? Images.active : Images.dead); } - - sortTable(allObjects); + sortTable(selectedObjects); + + searchText.addListener(SWT.Modify, new Listener(){ + public void handleEvent(Event event) { + String filter = searchText.getText(); + refreshTable(allObjects, currentAllSet, filter); + } + }); dialog.pack(); dialog.open(); @@ -256,6 +274,24 @@ public int[] toIntArray(List list) { return ret; } + private void refreshTable(Table table, Set objHashSet, String filter) { + table.removeAll(); + for (Integer objHash : objHashSet) { + AgentObject agent = AgentModelThread.getInstance().getAgentObject(objHash); + if (agent == null) { + continue; + } + String displayText = agent.getObjName() + "(" + ServerManager.getInstance().getServer(agent.getServerId()).getName() + ")"; + if (filter == null || filter.isEmpty() || displayText.toLowerCase().contains(filter.toLowerCase())) { + TableItem item = new TableItem(table, SWT.NONE); + item.setData(objHash); + item.setText(displayText); + item.setImage(agent.isAlive() ? Images.active : Images.dead); + } + } + sortTable(table); + } + private void sortTable(Table table) { TableItem[] items = table.getItems(); Collator collator = Collator.getInstance(Locale.getDefault()); diff --git a/scouter.webapp/pom.xml b/scouter.webapp/pom.xml index 40cbc0b1a..96602f45e 100644 --- a/scouter.webapp/pom.xml +++ b/scouter.webapp/pom.xml @@ -18,7 +18,7 @@ ${project.build.directory}/assembly-working UTF-8 scouter.webapp - 1.5.16 + 1.6.14