Updated the order of imports in the source files of simulator plugins.
[platform/upstream/iotivity.git] / service / simulator / java / eclipse-plugin / ClientControllerPlugin / src / oic / simulator / clientcontroller / view / MetaPropertiesView.java
1 /*
2  * Copyright 2015 Samsung Electronics All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package oic.simulator.clientcontroller.view;
18
19 import org.eclipse.jface.viewers.ColumnLabelProvider;
20 import org.eclipse.jface.viewers.IStructuredContentProvider;
21 import org.eclipse.jface.viewers.TableViewer;
22 import org.eclipse.jface.viewers.TableViewerColumn;
23 import org.eclipse.jface.viewers.Viewer;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.custom.CTabFolder;
26 import org.eclipse.swt.custom.CTabItem;
27 import org.eclipse.swt.graphics.Color;
28 import org.eclipse.swt.layout.GridData;
29 import org.eclipse.swt.layout.GridLayout;
30 import org.eclipse.swt.widgets.Composite;
31 import org.eclipse.swt.widgets.Display;
32 import org.eclipse.swt.widgets.Group;
33 import org.eclipse.swt.widgets.Table;
34 import org.eclipse.ui.part.ViewPart;
35
36 import java.util.List;
37
38 import oic.simulator.clientcontroller.Activator;
39 import oic.simulator.clientcontroller.listener.IDevicePlatformInfoUIListener;
40 import oic.simulator.clientcontroller.listener.IResourceSelectionChangedUIListener;
41 import oic.simulator.clientcontroller.manager.ResourceManager;
42 import oic.simulator.clientcontroller.manager.UiListenerHandler;
43 import oic.simulator.clientcontroller.remoteresource.MetaProperty;
44 import oic.simulator.clientcontroller.remoteresource.RemoteResource;
45
46 /**
47  * This class manages and shows the meta properties view in the perspective.
48  */
49 public class MetaPropertiesView extends ViewPart {
50
51     public static final String                  VIEW_ID       = "oic.simulator.clientcontroller.view.metaproperties";
52
53     private TableViewer                         defaultTblViewer;
54     private TableViewer                         deviceTblViewer;
55     private TableViewer                         platformTblViewer;
56
57     private final String[]                      columnHeaders = { "Property",
58             "Value"                                          };
59
60     private final Integer[]                     columnWidth   = { 150, 150 };
61
62     private IResourceSelectionChangedUIListener resourceSelectionChangedListener;
63     private IDevicePlatformInfoUIListener       devicePlatformInfoUIListener;
64
65     private ResourceManager                     resourceManager;
66
67     private CTabFolder                          folder;
68     private CTabItem                            defaultPropTab;
69     private CTabItem                            devicePropTab;
70     private CTabItem                            platformPropTab;
71
72     public MetaPropertiesView() {
73
74         resourceManager = Activator.getDefault().getResourceManager();
75
76         resourceSelectionChangedListener = new IResourceSelectionChangedUIListener() {
77
78             @Override
79             public void onResourceSelectionChange(final RemoteResource resource) {
80                 Display.getDefault().asyncExec(new Runnable() {
81
82                     @Override
83                     public void run() {
84                         updateUI(resource);
85                     }
86                 });
87             }
88         };
89
90         devicePlatformInfoUIListener = new IDevicePlatformInfoUIListener() {
91
92             @Override
93             public void onPlatformInfoFound() {
94                 Display.getDefault().asyncExec(new Runnable() {
95
96                     @Override
97                     public void run() {
98                         if (null != platformTblViewer) {
99                             updateViewer(platformTblViewer,
100                                     getPlatformPropData());
101                         }
102                     }
103                 });
104
105             }
106
107             @Override
108             public void onDeviceInfoFound() {
109                 Display.getDefault().asyncExec(new Runnable() {
110
111                     @Override
112                     public void run() {
113                         if (null != deviceTblViewer) {
114                             updateViewer(deviceTblViewer, getDevicePropData());
115                         }
116                     }
117                 });
118             }
119         };
120     }
121
122     private void updateUI(final RemoteResource resource) {
123         if (null != defaultTblViewer) {
124             updateViewer(defaultTblViewer, getDefaultPropData(resource));
125         }
126         if (null != deviceTblViewer) {
127             updateViewer(deviceTblViewer, getDevicePropData());
128         }
129         if (null != platformTblViewer) {
130             updateViewer(platformTblViewer, getPlatformPropData());
131         }
132     }
133
134     @Override
135     public void createPartControl(Composite parent) {
136         parent.setLayout(new GridLayout());
137         GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
138         parent.setLayoutData(gd);
139
140         // Create a Tab Folder.
141         folder = new CTabFolder(parent, SWT.BORDER);
142         gd = new GridData(SWT.FILL, SWT.FILL, true, true);
143         folder.setLayoutData(gd);
144         folder.setSimple(false);
145         folder.setUnselectedCloseVisible(false);
146         folder.setUnselectedImageVisible(false);
147
148         createDefaultPropertiesTab();
149
150         createDevicePropertiesTab();
151
152         createPlatformPropertiesTab();
153
154         folder.setSelection(defaultPropTab);
155
156         addManagerListeners();
157
158         // Check whether there is any resource selected already
159         updateUI(null);
160     }
161
162     private void createDefaultPropertiesTab() {
163         defaultPropTab = new CTabItem(folder, SWT.NULL);
164         defaultPropTab.setText("Default");
165
166         // Adding the group to the folder.
167         Group propGroup = new Group(folder, SWT.NONE);
168
169         Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
170         propGroup.setBackground(color);
171
172         propGroup.setLayout(new GridLayout());
173         GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
174         propGroup.setLayoutData(gd);
175
176         defaultTblViewer = new TableViewer(propGroup, SWT.SINGLE | SWT.H_SCROLL
177                 | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
178
179         createColumns(defaultTblViewer);
180
181         // Make lines and header visible
182         final Table table = defaultTblViewer.getTable();
183         table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
184         table.setHeaderVisible(true);
185         table.setLinesVisible(true);
186
187         defaultTblViewer.setContentProvider(new PropertycontentProvider());
188
189         defaultPropTab.setControl(propGroup);
190     }
191
192     private void createDevicePropertiesTab() {
193         devicePropTab = new CTabItem(folder, SWT.NULL);
194         devicePropTab.setText("Device");
195
196         // Adding the group to the folder.
197         Group propGroup = new Group(folder, SWT.NONE);
198
199         Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
200         propGroup.setBackground(color);
201
202         propGroup.setLayout(new GridLayout());
203         GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
204         propGroup.setLayoutData(gd);
205
206         deviceTblViewer = new TableViewer(propGroup, SWT.SINGLE | SWT.H_SCROLL
207                 | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
208
209         createColumns(deviceTblViewer);
210
211         // Make lines and header visible
212         final Table table = deviceTblViewer.getTable();
213         table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
214         table.setHeaderVisible(true);
215         table.setLinesVisible(true);
216
217         deviceTblViewer.setContentProvider(new PropertycontentProvider());
218
219         devicePropTab.setControl(propGroup);
220     }
221
222     private void createPlatformPropertiesTab() {
223         platformPropTab = new CTabItem(folder, SWT.NULL);
224         platformPropTab.setText("Platform");
225
226         // Adding the group to the folder.
227         Group propGroup = new Group(folder, SWT.NONE);
228
229         Color color = Display.getDefault().getSystemColor(SWT.COLOR_WHITE);
230         propGroup.setBackground(color);
231
232         propGroup.setLayout(new GridLayout());
233         GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true);
234         propGroup.setLayoutData(gd);
235
236         platformTblViewer = new TableViewer(propGroup, SWT.SINGLE
237                 | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
238
239         createColumns(platformTblViewer);
240
241         // Make lines and header visible
242         final Table table = platformTblViewer.getTable();
243         table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
244         table.setHeaderVisible(true);
245         table.setLinesVisible(true);
246
247         platformTblViewer.setContentProvider(new PropertycontentProvider());
248
249         platformPropTab.setControl(propGroup);
250     }
251
252     private List<MetaProperty> getDefaultPropData(RemoteResource resource) {
253         if (null == resource) {
254             resource = Activator.getDefault().getResourceManager()
255                     .getCurrentResourceInSelection();
256         }
257         List<MetaProperty> metaPropertyList = resourceManager
258                 .getDefaultProperties(resource);
259         return metaPropertyList;
260     }
261
262     private List<MetaProperty> getDevicePropData() {
263         List<MetaProperty> metaPropertyList = resourceManager
264                 .getDeviceProperties();
265         return metaPropertyList;
266     }
267
268     private List<MetaProperty> getPlatformPropData() {
269         List<MetaProperty> metaPropertyList = resourceManager
270                 .getPlatformProperties();
271         return metaPropertyList;
272     }
273
274     private void updateViewer(TableViewer tblViewer,
275             List<MetaProperty> metaPropertyList) {
276         if (null != tblViewer) {
277             Table tbl = tblViewer.getTable();
278             if (null != metaPropertyList) {
279                 tblViewer.setInput(metaPropertyList.toArray());
280                 if (!tbl.isDisposed()) {
281                     tbl.setLinesVisible(true);
282                 }
283             } else {
284                 if (!tbl.isDisposed()) {
285                     tbl.removeAll();
286                     tbl.setLinesVisible(false);
287                 }
288             }
289         }
290     }
291
292     public void createColumns(TableViewer tableViewer) {
293         TableViewerColumn propName = new TableViewerColumn(tableViewer,
294                 SWT.NONE);
295         propName.getColumn().setWidth(columnWidth[0]);
296         propName.getColumn().setText(columnHeaders[0]);
297         propName.setLabelProvider(new ColumnLabelProvider() {
298             @Override
299             public String getText(Object element) {
300                 MetaProperty prop = (MetaProperty) element;
301                 if (null != prop) {
302                     return prop.getPropName();
303                 } else {
304                     return "";
305                 }
306             }
307         });
308
309         TableViewerColumn propValue = new TableViewerColumn(tableViewer,
310                 SWT.NONE);
311         propValue.getColumn().setWidth(columnWidth[1]);
312         propValue.getColumn().setText(columnHeaders[1]);
313         propValue.setLabelProvider(new ColumnLabelProvider() {
314             @Override
315             public String getText(Object element) {
316                 MetaProperty prop = (MetaProperty) element;
317                 if (null != prop) {
318                     return prop.getPropValue();
319                 } else {
320                     return "";
321                 }
322             }
323         });
324     }
325
326     private void addManagerListeners() {
327         UiListenerHandler.getInstance().addResourceSelectionChangedUIListener(
328                 resourceSelectionChangedListener);
329         UiListenerHandler.getInstance().addDevicePlatformInfoUIListener(
330                 devicePlatformInfoUIListener);
331     }
332
333     class PropertycontentProvider implements IStructuredContentProvider {
334
335         @Override
336         public void dispose() {
337         }
338
339         @Override
340         public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
341         }
342
343         @Override
344         public Object[] getElements(Object element) {
345             return (Object[]) element;
346         }
347     }
348
349     @Override
350     public void dispose() {
351         // Unregister the listener
352         if (null != resourceSelectionChangedListener) {
353             UiListenerHandler.getInstance()
354                     .removeResourceSelectionChangedUIListener(
355                             resourceSelectionChangedListener);
356         }
357         super.dispose();
358     }
359
360     @Override
361     public void setFocus() {
362     }
363 }