Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 65 additions & 29 deletions scouter.client/src/scouter/client/popup/ManageGroupDialog.java
Original file line number Diff line number Diff line change
@@ -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");
Expand Down Expand Up @@ -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;
Expand All @@ -55,8 +56,9 @@ public class ManageGroupDialog {
String objType;
IManageGroup callback;

Set<Integer> noSelectedSet = new HashSet<Integer>();
Set<Integer> selectedSet = new HashSet<Integer>();
Set<Integer> noSelectedSet = new HashSet<>();
Set<Integer> selectedSet = new HashSet<>();
Set<Integer> currentAllSet = new HashSet<>();

public ManageGroupDialog(Display display, String groupName, String objType,
IManageGroup callback) {
Expand All @@ -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));

Expand All @@ -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(){
Expand All @@ -115,14 +131,17 @@ 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());
newItem.setImage(item.getImage());
allObjects.remove(allObjects.indexOf(item));
item.dispose();
}
sortTable(allObjects);
String filter = searchText.getText();
refreshTable(allObjects, currentAllSet, filter);
sortTable(selectedObjects);
}
});
Expand All @@ -135,15 +154,17 @@ 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());
newItem.setImage(item.getImage());
selectedObjects.remove(selectedObjects.indexOf(item));
item.dispose();
}
sortTable(allObjects);
sortTable(selectedObjects);
String filter = searchText.getText();
refreshTable(allObjects, currentAllSet, filter);
}
});

Expand All @@ -168,17 +189,16 @@ public void handleEvent(Event event) {
return;
}
TableItem[] selectedItems = selectedObjects.getItems();
List<Integer> addedObjHashs = new ArrayList<Integer>();
List<Integer> 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<Integer> removedObjHashs = new ArrayList<Integer>();
for (TableItem item : noSelectedItems) {
int objHash = (Integer) item.getData();

List<Integer> removedObjHashs = new ArrayList<>();
for (Integer objHash : currentAllSet) {
if (noSelectedSet.contains(objHash) == false) {
removedObjHashs.add(objHash);
}
Expand All @@ -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);
Expand All @@ -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();
Expand Down Expand Up @@ -256,6 +274,24 @@ public int[] toIntArray(List<Integer> list) {
return ret;
}

private void refreshTable(Table table, Set<Integer> 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());
Expand Down
2 changes: 1 addition & 1 deletion scouter.webapp/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<scouter.assembly.working.dir>${project.build.directory}/assembly-working</scouter.assembly.working.dir>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<scouter.webapp.jarName>scouter.webapp</scouter.webapp.jarName>
<swagger.version>1.5.16</swagger.version>
<swagger.version>1.6.14</swagger.version>
</properties>

<dependencies>
Expand Down