Skip to content

Commit 101de47

Browse files
console/plugins/EntityStatePanel: Added options to display all local saved entities.
1 parent 8a18fce commit 101de47

File tree

1 file changed

+106
-14
lines changed

1 file changed

+106
-14
lines changed

src/java/pt/lsts/neptus/console/plugins/EntityStatePanel.java

Lines changed: 106 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
import java.time.Duration;
4242
import java.util.HashMap;
4343
import java.util.LinkedHashMap;
44+
import java.util.Map;
4445
import java.util.Timer;
4546
import java.util.TimerTask;
4647
import java.util.Vector;
@@ -51,14 +52,19 @@
5152
import javax.swing.JPanel;
5253
import javax.swing.JScrollPane;
5354
import javax.swing.JTable;
55+
import javax.swing.RowFilter;
56+
import javax.swing.RowSorter;
5457
import javax.swing.table.AbstractTableModel;
5558
import javax.swing.table.DefaultTableColumnModel;
5659
import javax.swing.table.TableCellRenderer;
5760
import javax.swing.table.TableColumn;
61+
import javax.swing.table.TableModel;
62+
import javax.swing.table.TableRowSorter;
5863

5964
import com.google.common.eventbus.Subscribe;
6065

6166
import pt.lsts.imc.EntityList;
67+
import pt.lsts.imc.EntityState;
6268
import pt.lsts.imc.IMCMessage;
6369
import pt.lsts.neptus.NeptusLog;
6470
import pt.lsts.neptus.comm.IMCSendMessageUtils;
@@ -73,6 +79,7 @@
7379
import pt.lsts.neptus.console.notifications.Notification;
7480
import pt.lsts.neptus.gui.StatusLed;
7581
import pt.lsts.neptus.gui.ToolbarButton;
82+
import pt.lsts.neptus.gui.ToolbarSwitch;
7683
import pt.lsts.neptus.i18n.I18n;
7784
import pt.lsts.neptus.messages.Enumerated;
7885
import pt.lsts.neptus.plugins.NeptusMessageListener;
@@ -101,6 +108,7 @@ public class EntityStatePanel extends ConsolePanel implements NeptusMessageListe
101108

102109
private final Icon ICON_CLEAR = ImageUtils.getScaledIcon("images/buttons/clear.png", 16, 16);
103110
private final Icon ICON_RQST = ImageUtils.getScaledIcon("images/buttons/log.png", 16, 16);
111+
private final Icon ICON_UNKNOWN = ImageUtils.getScaledIcon("images/buttons/filter.png", 16, 16);
104112

105113
// Events Data
106114
private LinkedHashMap<String, EntityStateType> dataMap = new LinkedHashMap<String, EntityStateType>();
@@ -115,6 +123,8 @@ public class EntityStatePanel extends ConsolePanel implements NeptusMessageListe
115123
private JTable table = null;
116124
private StatusLed status;
117125

126+
private boolean filterUnknown = true;
127+
118128
private long timeSinceLastUpdateVoiceWarning = -1;
119129

120130
/**
@@ -175,10 +185,20 @@ public void actionPerformed(ActionEvent e) {
175185
ToolbarButton rqstEntListButton = new ToolbarButton(new AbstractAction("request", ICON_RQST) {
176186
@Override
177187
public void actionPerformed(ActionEvent e) {
178-
sendEntityListRequestMsg();;
188+
sendEntityListRequestMsg();
179189
}
180190
});
181191
rqstEntListButton.setToolTipText(I18n.text("Request entity list"));
192+
ToolbarSwitch filterUnknownEntListSwitch = new ToolbarSwitch(new AbstractAction("filter unknown", ICON_UNKNOWN) {
193+
@Override
194+
public void actionPerformed(ActionEvent e) {
195+
filterUnknown = ((ToolbarSwitch) e.getSource()).isSelected();
196+
etmodel.fireTableStructureChanged();
197+
setPreferredTableColumnWidth();
198+
}
199+
});
200+
filterUnknownEntListSwitch.setSelected(filterUnknown);
201+
filterUnknownEntListSwitch.setToolTipText(I18n.text("Filter unknown"));
182202
status = new StatusLed();
183203
status.made5LevelIndicator();
184204
status.setLevel(StatusLed.LEVEL_OFF);
@@ -187,16 +207,20 @@ public void actionPerformed(ActionEvent e) {
187207
wPanel.add(status);
188208
wPanel.add(clearButton);
189209
wPanel.add(rqstEntListButton);
210+
wPanel.add(filterUnknownEntListSwitch);
190211
this.add(wPanel, BorderLayout.NORTH);
191212

213+
setPreferredTableColumnWidth();
192214
}
193215

194216
@Override
195217
public void initSubPanel() {
196218
getTimer().scheduleAtFixedRate(getTtask(), 100, 1000);
219+
clearData();
197220
}
198221

199222
private void setup() {
223+
eColor.put(-1L, COLOR_OFF);
200224
eColor.put(0L, COLOR_BLUE);
201225
eColor.put(1L, COLOR_GREEN);
202226
eColor.put(2L, COLOR_YELLOW);
@@ -206,6 +230,7 @@ private void setup() {
206230
eColor.put(6L, COLOR_OFF);
207231
eColor.put(7L, COLOR_OFF);
208232

233+
eLevel.put(-1L, StatusLed.LEVEL_NONE);
209234
eLevel.put(0L, StatusLed.LEVEL_1);
210235
eLevel.put(1L, StatusLed.LEVEL_0);
211236
eLevel.put(2L, StatusLed.LEVEL_2);
@@ -238,7 +263,7 @@ public void cleanSubPanel() {
238263
timer = null;
239264
}
240265

241-
clearData(); // calling this to remove alarms
266+
clearData(true); // calling this to remove alarms
242267
}
243268

244269
/**
@@ -289,17 +314,41 @@ private JTable getTable() {
289314

290315
// table.setRowSorter(new TableRowSorter<EntityStateTableModel>(etmodel)); //FIXME Problem with clear
291316
table.setAutoCreateRowSorter(true);
317+
RowSorter<? extends TableModel> rs = table.getRowSorter();
318+
if (rs instanceof TableRowSorter) {
319+
((TableRowSorter) rs).setRowFilter(new RowFilter<TableModel, Integer>() {
320+
@Override
321+
public boolean include(Entry<? extends TableModel, ? extends Integer> entry) {
322+
Object sel = entry.getValue(1);
323+
System.out.println(">>>>>>>>>>>>>>>>>>> " + sel.toString());
324+
return !filterUnknown || !"Unknown".equalsIgnoreCase(sel.toString());
325+
}
326+
});
327+
}
292328

293-
TableColumn col = ((DefaultTableColumnModel) table.getColumnModel()).getColumn(EntityStateType.STATE_COL);
294-
col.setPreferredWidth(30);
295-
col = ((DefaultTableColumnModel) table.getColumnModel()).getColumn(EntityStateType.DONT_CARE_FLAG_COL);
296-
col.setPreferredWidth(10);
297-
col = ((DefaultTableColumnModel) table.getColumnModel()).getColumn(EntityStateType.TIME_COL);
298-
col.setPreferredWidth(20);
329+
//clearData();
299330
}
331+
332+
setPreferredTableColumnWidth();
300333
return table;
301334
}
302335

336+
private void setPreferredTableColumnWidth() {
337+
TableColumn col = ((DefaultTableColumnModel) table.getColumnModel()).getColumn(EntityStateType.ENTITY_COL);
338+
col.setPreferredWidth(100);
339+
col = ((DefaultTableColumnModel) table.getColumnModel()).getColumn(EntityStateType.STATE_COL);
340+
col.setPreferredWidth(60);
341+
col.setMaxWidth(150);
342+
col = ((DefaultTableColumnModel) table.getColumnModel()).getColumn(EntityStateType.DONT_CARE_FLAG_COL);
343+
col.setPreferredWidth(50);
344+
col.setMaxWidth(50);
345+
col = ((DefaultTableColumnModel) table.getColumnModel()).getColumn(EntityStateType.TIME_COL);
346+
col.setPreferredWidth(60);
347+
col.setMaxWidth(150);
348+
349+
table.repaint(20);
350+
}
351+
303352
/*
304353
* (non-Javadoc)
305354
*
@@ -346,9 +395,10 @@ private synchronized void calcTotalState() {
346395
}
347396
}
348397
// short oldState = status.getLevel();
398+
if (status == null)
399+
return;
349400
status.setLevel(max);
350401
status.setMessage(I18n.textf("State '%state'", evtLabel));
351-
352402
}
353403

354404
@Subscribe
@@ -357,13 +407,43 @@ public void mainVehicleChangeNotification(ConsoleEventMainSystemChange evt) {
357407
}
358408

359409
private void clearData() {
410+
clearData(false);
411+
}
412+
413+
private void clearData(boolean cleanAll) {
360414
if (data.size() != 0)
361415
etmodel.fireTableRowsDeleted(0, data.size() - 1);
362416
data.clear();
363417
dataMap.clear();
364418
// etmodel.fireTableDataChanged();
365419
etmodel.fireTableStructureChanged();
366420
calcTotalState();
421+
if (!cleanAll) {
422+
fillEmptyData();
423+
etmodel.fireTableStructureChanged();
424+
calcTotalState();
425+
setPreferredTableColumnWidth();
426+
}
427+
}
428+
429+
private void fillEmptyData() {
430+
Map<Integer, String> entList = EntitiesResolver.getEntities(getMainVehicleId());
431+
if (entList != null) {
432+
for (Map.Entry<Integer, String> entry : entList.entrySet()) {
433+
String entityName = entry.getValue();
434+
EntityStateType eType = new EntityStateType(entityName, new Enumerated(
435+
getStatePossibleValues(), -1), "", -1);
436+
data.add(eType);
437+
dataMap.put(entityName, eType);
438+
}
439+
}
440+
setPreferredTableColumnWidth();
441+
}
442+
443+
private LinkedHashMap<Long, String> getStatePossibleValues() {
444+
LinkedHashMap<Long, String> pf = new EntityState().getMessageType().getFieldPossibleValues("state");
445+
pf.put(-1L, I18n.text("Unknown"));
446+
return pf;
367447
}
368448

369449
@Override
@@ -379,23 +459,26 @@ public void messageArrived(IMCMessage message) {
379459
Integer index = eType == null ? null : data.indexOf(eType);
380460

381461
boolean wasChange = false;
462+
boolean triggerStructChange = false;
382463

383464
// Updating (not the first time receiving for this entity)
384465
if (index != null) {
385466
eType = data.get(index);
386467
if (message.getLong("state") != eType.getState().longValue()) { // Means it has changed, time to post a
387468
// msg_type type = msg_type.info;
388469
wasChange = true;
470+
if (eType.getState().longValue() == -1)
471+
triggerStructChange = true;
389472
}
390-
eType.update(entityName, new Enumerated(message.getMessageType().getFieldPossibleValues("state"),
391-
message.getLong("state")), message.getString("description"), System.currentTimeMillis());
473+
eType.update(entityName, new Enumerated(getStatePossibleValues(), message.getLong("state")),
474+
message.getString("description"), System.currentTimeMillis());
392475
data.set(index, eType);
393476
etmodel.fireTableRowsUpdated(index, index);
394477
}
395478
else {
396479
wasChange = true;
397-
eType = new EntityStateType(entityName, new Enumerated(message.getMessageType().getFieldPossibleValues(
398-
"state"), message.getLong("state")), getDescription(), System.currentTimeMillis());
480+
eType = new EntityStateType(entityName, new Enumerated(getStatePossibleValues(),
481+
message.getLong("state")), getDescription(), System.currentTimeMillis());
399482

400483
if (data.add(eType)) {
401484
index = data.indexOf(eType);
@@ -405,8 +488,13 @@ public void messageArrived(IMCMessage message) {
405488
}
406489
calcTotalState();
407490

408-
if (wasChange)
491+
if (triggerStructChange) {
492+
etmodel.fireTableStructureChanged();
493+
setPreferredTableColumnWidth();
494+
}
495+
if (wasChange) {
409496
speakUpdateEntityState();
497+
}
410498
}
411499
}
412500

@@ -761,6 +849,10 @@ public HourTableCellRenderer() {
761849

762850
public Component getTableCellRendererComponent(JTable table, Object timems, boolean isSelected,
763851
boolean hasFocus, int row, int column) {
852+
if (timems == null || !(timems instanceof Long) || (Long) timems == -1L) {
853+
setText("");
854+
return this;
855+
}
764856
Long enu = System.currentTimeMillis() - (Long) timems;
765857
setText(DateTimeUtil.milliSecondsToFormatedString(enu / 1000 * 1000));
766858
return this;

0 commit comments

Comments
 (0)