1
+ /*
2
+ * This file is part of the ISIS IBEX application. Copyright (C) 2012-2023
3
+ * Science & Technology Facilities Council. All rights reserved.
4
+ *
5
+ * This program is distributed in the hope that it will be useful. This program
6
+ * and the accompanying materials are made available under the terms of the
7
+ * Eclipse Public License v1.0 which accompanies this distribution. EXCEPT AS
8
+ * EXPRESSLY SET FORTH IN THE ECLIPSE PUBLIC LICENSE V1.0, THE PROGRAM AND
9
+ * ACCOMPANYING MATERIALS ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND. See the Eclipse Public License v1.0 for more
11
+ * details.
12
+ *
13
+ * You should have received a copy of the Eclipse Public License v1.0 along with
14
+ * this program; if not, you can obtain a copy from
15
+ * https://www.eclipse.org/org/documents/epl-v10.php or
16
+ * http://opensource.org/licenses/eclipse-1.0.php
17
+ */
18
+
19
+ /*
20
+ * Copyright (C) 2013-2014 Research Councils UK (STFC)
21
+ *
22
+ * This file is part of the Instrument Control Project at ISIS.
23
+ *
24
+ * This code and information are provided "as is" without warranty of any kind,
25
+ * either expressed or implied, including but not limited to the implied
26
+ * warranties of merchantability and/or fitness for a particular purpose.
27
+ */
28
+
1
29
package uk .ac .stfc .isis .ibex .ui .moxas .views ;
2
30
3
31
import java .beans .PropertyChangeEvent ;
19
47
import org .eclipse .swt .layout .GridData ;
20
48
import org .eclipse .swt .layout .GridLayout ;
21
49
import org .eclipse .swt .widgets .Button ;
50
+ import org .eclipse .swt .widgets .Label ;
22
51
import org .eclipse .swt .widgets .Composite ;
23
52
import org .eclipse .swt .widgets .TreeItem ;
53
+ import org .eclipse .wb .swt .SWTResourceManager ;
54
+
24
55
25
56
import uk .ac .stfc .isis .ibex .configserver .configuration .Ioc ;
26
57
@@ -36,6 +67,7 @@ public class MoxaInfoPanel extends Composite {
36
67
private static final int COLUMN_WIDTH = 500 ;
37
68
private static final int COLUMN_WIDTH_NARROW = 150 ;
38
69
70
+ private static final String UP_STATUS = "up" ;
39
71
/**
40
72
* The constructor.
41
73
*
@@ -48,67 +80,11 @@ public MoxaInfoPanel(Composite parent, int style, MoxasViewModel model) {
48
80
setLayout (new GridLayout (1 , false ));
49
81
50
82
final var viewer = new TreeViewer (this , SWT .FULL_SELECTION );
51
- TreeViewerColumn moxaPortColumn = new TreeViewerColumn (viewer , SWT .NONE );
52
- moxaPortColumn .getColumn ().setText ("Physical MOXA port" );
53
- moxaPortColumn .getColumn ().setWidth (COLUMN_WIDTH );
54
-
55
- moxaPortColumn .setLabelProvider (new ColumnLabelProvider () {
56
- @ Override
57
- public String getText (Object element ) {
58
- if (element instanceof MoxaList ) {
59
- MoxaList list = MoxaList .class .cast (element );
60
- String name = list .name ;
61
- return name ;
62
- } else {
63
- MoxaModelObject p = (MoxaModelObject ) element ;
64
- return p .getPhysPort ();
65
- }
66
- }
67
- });
68
- TreeViewerColumn comPortColumn = new TreeViewerColumn (viewer , SWT .NONE );
69
- comPortColumn .getColumn ().setText ("COM port" );
70
- comPortColumn .getColumn ().setWidth (COLUMN_WIDTH_NARROW );
71
-
72
- comPortColumn .setLabelProvider (new ColumnLabelProvider () {
73
- @ Override
74
- public String getText (Object element ) {
75
- if (element instanceof ArrayList <?>) {
76
- return null ;
77
- }
78
- MoxaModelObject p = (MoxaModelObject ) element ;
79
- return p .getComPort ();
80
- }
81
- });
82
- TreeViewerColumn iocColumn = new TreeViewerColumn (viewer , SWT .NONE );
83
- iocColumn .getColumn ().setText ("Connected IOC" );
84
- iocColumn .getColumn ().setWidth (COLUMN_WIDTH );
85
-
86
- iocColumn .setLabelProvider (new ColumnLabelProvider () {
87
- @ Override
88
- public Color getForeground (Object element ) {
89
- // Change the text colour of cells where a port is connected to multiple IOCs
90
- if (element instanceof MoxaModelObject ) {
91
- MoxaModelObject p = (MoxaModelObject ) element ;
92
- List <Ioc > iocs = p .getIocs ();
93
-
94
- if (iocs .size () > 1 ) {
95
- return new Color (255 , 0 , 0 );
96
- }
97
- }
98
- return super .getForeground (element );
99
- }
100
-
101
- @ Override
102
- public String getText (Object element ) {
103
- if (element instanceof ArrayList <?>) {
104
- return null ;
105
- }
106
- MoxaModelObject p = (MoxaModelObject ) element ;
107
- List <Ioc > iocs = p .getIocs ();
108
-
109
- return iocs .stream ().map (Ioc ::getName ).collect (joining (", " ));
110
- }
111
- });
83
+ makePhysicalPortColumn (viewer );
84
+ makeComPortColumn (viewer );
85
+ makeConnectedIOCColumn (viewer );
86
+ makeStatusColumn (viewer );
87
+ makeAdditionInfoColumn (viewer );
112
88
113
89
viewer .setContentProvider (new MoxaTableContentProvider ());
114
90
@@ -131,10 +107,10 @@ public void treeExpanded(TreeEvent e) {
131
107
TreeItem item = (TreeItem ) e .item ;
132
108
model .addExpanded (item .getText ());
133
109
}
134
- });
135
-
110
+ });
111
+
136
112
Composite expansionComposite = new Composite (this , SWT .FILL );
137
- expansionComposite .setLayout (new GridLayout (3 , true ));
113
+ expansionComposite .setLayout (new GridLayout (5 , true ));
138
114
expandButton = new Button (expansionComposite , SWT .NONE );
139
115
expandButton .setLayoutData (new GridData (SWT .FILL , SWT .FILL , false , false , 1 , 1 ));
140
116
expandButton .setText ("\u25BC Expand All" );
@@ -155,6 +131,11 @@ public void widgetSelected(SelectionEvent e) {
155
131
}
156
132
});
157
133
134
+ Label refreshLabel = new Label (expansionComposite , SWT .NONE );
135
+ refreshLabel .setLayoutData (new GridData (SWT .CENTER , SWT .CENTER , true , false , 3 , 1 ));
136
+ refreshLabel .setFont (SWTResourceManager .getFont ("Segoe UI" , 9 , SWT .BOLD ));
137
+ refreshLabel .setText ("Items will refresh every 30 seconds" );
138
+
158
139
model .addUiThreadPropertyChangeListener ("moxaMappings" , new PropertyChangeListener () {
159
140
@ Override
160
141
public void propertyChange (PropertyChangeEvent evt ) {
@@ -164,8 +145,8 @@ public void propertyChange(PropertyChangeEvent evt) {
164
145
model .refresh ();
165
146
}
166
147
});
167
-
168
- model .addUiThreadPropertyChangeListener ("expanded" , new PropertyChangeListener () {
148
+
149
+ model .addUiThreadPropertyChangeListener ("expanded" , new PropertyChangeListener () {
169
150
@ Override
170
151
public void propertyChange (PropertyChangeEvent evt ) {
171
152
// Re-expand previously expanded items
@@ -186,4 +167,143 @@ public void propertyChange(PropertyChangeEvent evt) {
186
167
});
187
168
}
188
169
170
+ /**
171
+ * @param viewer
172
+ */
173
+ private void makeComPortColumn (final TreeViewer viewer ) {
174
+ TreeViewerColumn comPortColumn = new TreeViewerColumn (viewer , SWT .NONE );
175
+ comPortColumn .getColumn ().setText ("COM port" );
176
+ comPortColumn .getColumn ().setWidth (COLUMN_WIDTH_NARROW );
177
+
178
+ comPortColumn .setLabelProvider (new ColumnLabelProvider () {
179
+ @ Override
180
+ public String getText (Object element ) {
181
+ if (element instanceof ArrayList <?>) {
182
+ return null ;
183
+ }
184
+ MoxaModelObject p = (MoxaModelObject ) element ;
185
+ return p .getComPort ();
186
+ }
187
+ });
188
+ }
189
+
190
+ /**
191
+ * @param viewer
192
+ */
193
+ private void makePhysicalPortColumn (final TreeViewer viewer ) {
194
+ TreeViewerColumn moxaPortColumn = new TreeViewerColumn (viewer , SWT .NONE );
195
+ moxaPortColumn .getColumn ().setText ("Physical MOXA port" );
196
+ moxaPortColumn .getColumn ().setWidth (COLUMN_WIDTH );
197
+
198
+ moxaPortColumn .setLabelProvider (new ColumnLabelProvider () {
199
+ @ Override
200
+ public String getText (Object element ) {
201
+ if (element instanceof MoxaList ) {
202
+ MoxaList list = MoxaList .class .cast (element );
203
+ String name = list .name ;
204
+
205
+ // extracting uptime for conversion and display
206
+ String [] parts = name .split ("\\ )\\ (" );
207
+ if (1 < parts .length ) {
208
+ String uptime = parts [1 ].substring (0 , parts [1 ].length () - 1 );
209
+ name = parts [0 ] + ") [Up " + MoxasViewModel .toDaysHoursMinutes (Long .valueOf (uptime ) * 10 ) + "]" ;
210
+ }
211
+ return name ;
212
+ } else {
213
+ MoxaModelObject p = (MoxaModelObject ) element ;
214
+ return p .getPhysPort ();
215
+ }
216
+ }
217
+ });
218
+ }
219
+
220
+ /**
221
+ * @param viewer
222
+ */
223
+ private void makeConnectedIOCColumn (final TreeViewer viewer ) {
224
+ TreeViewerColumn iocColumn = new TreeViewerColumn (viewer , SWT .NONE );
225
+ iocColumn .getColumn ().setText ("Connected IOC" );
226
+ iocColumn .getColumn ().setWidth (COLUMN_WIDTH_NARROW );
227
+
228
+ iocColumn .setLabelProvider (new ColumnLabelProvider () {
229
+ @ Override
230
+ public Color getForeground (Object element ) {
231
+ // Change the text colour of cells where a port is connected to multiple IOCs
232
+ if (element instanceof MoxaModelObject ) {
233
+ MoxaModelObject p = (MoxaModelObject ) element ;
234
+ List <Ioc > iocs = p .getIocs ();
235
+
236
+ if (iocs .size () > 1 ) {
237
+ return new Color (255 , 0 , 0 );
238
+ }
239
+ }
240
+ return super .getForeground (element );
241
+ }
242
+
243
+ @ Override
244
+ public String getText (Object element ) {
245
+ if (element instanceof ArrayList <?>) {
246
+ return null ;
247
+ }
248
+ MoxaModelObject p = (MoxaModelObject ) element ;
249
+ List <Ioc > iocs = p .getIocs ();
250
+
251
+ return iocs .stream ().map (Ioc ::getName ).collect (joining (", " ));
252
+ }
253
+ });
254
+ }
255
+
256
+ /**
257
+ * @param viewer
258
+ */
259
+ private void makeStatusColumn (final TreeViewer viewer ) {
260
+ TreeViewerColumn infoColumn = new TreeViewerColumn (viewer , SWT .NONE );
261
+ infoColumn .getColumn ().setText ("Status" );
262
+ infoColumn .getColumn ().setWidth (COLUMN_WIDTH_NARROW );
263
+
264
+ infoColumn .setLabelProvider (new ColumnLabelProvider () {
265
+ @ Override
266
+ public String getText (Object element ) {
267
+ if (element instanceof ArrayList <?>) {
268
+ return null ;
269
+ }
270
+ MoxaModelObject field = (MoxaModelObject ) element ;
271
+ return field .getStatus ();
272
+ }
273
+
274
+ @ Override
275
+ public Color getForeground (Object element ) {
276
+ // Change the text colour of cells where a port is physically connected
277
+ if (element instanceof MoxaModelObject ) {
278
+ MoxaModelObject field = (MoxaModelObject ) element ;
279
+
280
+ if (field .getStatus ().equalsIgnoreCase (UP_STATUS )) {
281
+ return new Color (0 , 0 , 255 );
282
+ }
283
+ }
284
+ return super .getForeground (element );
285
+ }
286
+ });
287
+ }
288
+
289
+ /**
290
+ * @param viewer
291
+ */
292
+ private void makeAdditionInfoColumn (final TreeViewer viewer ) {
293
+ TreeViewerColumn infoColumn = new TreeViewerColumn (viewer , SWT .NONE );
294
+ infoColumn .getColumn ().setText ("Additional Info" );
295
+ infoColumn .getColumn ().setWidth (COLUMN_WIDTH );
296
+
297
+ infoColumn .setLabelProvider (new ColumnLabelProvider () {
298
+ @ Override
299
+ public String getText (Object element ) {
300
+ if (element instanceof ArrayList <?>) {
301
+ return null ;
302
+ }
303
+ MoxaModelObject field = (MoxaModelObject ) element ;
304
+ return field .getAdditionalInfo ();
305
+ }
306
+ });
307
+ }
308
+
189
309
}
0 commit comments