Java SDK and Eclipse plugin for simulator.
[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 java.util.List;
20
21 import oic.simulator.clientcontroller.Activator;
22 import oic.simulator.clientcontroller.listener.IResourceSelectionChangedUIListener;
23 import oic.simulator.clientcontroller.manager.ResourceManager;
24 import oic.simulator.clientcontroller.remoteresource.MetaProperty;
25 import oic.simulator.clientcontroller.remoteresource.RemoteResource;
26
27 import org.eclipse.jface.viewers.ColumnLabelProvider;
28 import org.eclipse.jface.viewers.IStructuredContentProvider;
29 import org.eclipse.jface.viewers.TableViewer;
30 import org.eclipse.jface.viewers.TableViewerColumn;
31 import org.eclipse.jface.viewers.Viewer;
32 import org.eclipse.swt.SWT;
33 import org.eclipse.swt.layout.GridData;
34 import org.eclipse.swt.layout.GridLayout;
35 import org.eclipse.swt.widgets.Composite;
36 import org.eclipse.swt.widgets.Display;
37 import org.eclipse.swt.widgets.Table;
38 import org.eclipse.ui.part.ViewPart;
39
40 /**
41  * This class manages and shows the meta properties view in the perspective.
42  */
43 public class MetaPropertiesView extends ViewPart {
44
45     public static final String                  VIEW_ID       = "oic.simulator.clientcontroller.view.metaproperties";
46
47     private TableViewer                         tableViewer;
48
49     private final String[]                      columnHeaders = { "Property",
50             "Value"                                          };
51
52     private final Integer[]                     columnWidth   = { 150, 150 };
53
54     private IResourceSelectionChangedUIListener resourceSelectionChangedListener;
55
56     private ResourceManager                     resourceManager;
57
58     public MetaPropertiesView() {
59
60         resourceManager = Activator.getDefault().getResourceManager();
61
62         resourceSelectionChangedListener = new IResourceSelectionChangedUIListener() {
63
64             @Override
65             public void onResourceSelectionChange(final RemoteResource resource) {
66                 Display.getDefault().asyncExec(new Runnable() {
67
68                     @Override
69                     public void run() {
70                         if (null != tableViewer) {
71                             updateViewer(getData(resource));
72                         }
73                     }
74                 });
75             }
76         };
77     }
78
79     @Override
80     public void createPartControl(Composite parent) {
81         parent.setLayout(new GridLayout(1, false));
82
83         tableViewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL
84                 | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
85
86         createColumns(tableViewer);
87
88         // make lines and header visible
89         final Table table = tableViewer.getTable();
90         table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
91         table.setHeaderVisible(true);
92         table.setLinesVisible(true);
93
94         tableViewer.setContentProvider(new PropertycontentProvider());
95
96         addManagerListeners();
97
98         // Check whether there is any resource selected already
99         List<MetaProperty> propertyList = getData(null);
100         if (null != propertyList) {
101             updateViewer(propertyList);
102         }
103
104     }
105
106     private List<MetaProperty> getData(RemoteResource resource) {
107         if (null == resource) {
108             resource = Activator.getDefault().getResourceManager()
109                     .getCurrentResourceInSelection();
110         }
111         List<MetaProperty> metaPropertyList = resourceManager
112                 .getMetaProperties(resource);
113         return metaPropertyList;
114     }
115
116     private void updateViewer(List<MetaProperty> metaPropertyList) {
117         if (null != tableViewer) {
118             Table tbl = tableViewer.getTable();
119             if (null != metaPropertyList) {
120                 tableViewer.setInput(metaPropertyList.toArray());
121                 if (!tbl.isDisposed()) {
122                     tbl.setLinesVisible(true);
123                 }
124             } else {
125                 if (!tbl.isDisposed()) {
126                     tbl.removeAll();
127                     tbl.setLinesVisible(false);
128                 }
129             }
130         }
131     }
132
133     public void createColumns(TableViewer tableViewer) {
134         TableViewerColumn propName = new TableViewerColumn(tableViewer,
135                 SWT.NONE);
136         propName.getColumn().setWidth(columnWidth[0]);
137         propName.getColumn().setText(columnHeaders[0]);
138         propName.setLabelProvider(new ColumnLabelProvider() {
139             @Override
140             public String getText(Object element) {
141                 MetaProperty prop = (MetaProperty) element;
142                 if (null != prop) {
143                     return prop.getPropName();
144                 } else {
145                     return "";
146                 }
147             }
148         });
149
150         TableViewerColumn propValue = new TableViewerColumn(tableViewer,
151                 SWT.NONE);
152         propValue.getColumn().setWidth(columnWidth[1]);
153         propValue.getColumn().setText(columnHeaders[1]);
154         propValue.setLabelProvider(new ColumnLabelProvider() {
155             @Override
156             public String getText(Object element) {
157                 MetaProperty prop = (MetaProperty) element;
158                 if (null != prop) {
159                     return prop.getPropValue();
160                 } else {
161                     return "";
162                 }
163             }
164         });
165     }
166
167     private void addManagerListeners() {
168         resourceManager
169                 .addResourceSelectionChangedUIListener(resourceSelectionChangedListener);
170     }
171
172     class PropertycontentProvider implements IStructuredContentProvider {
173
174         @Override
175         public void dispose() {
176         }
177
178         @Override
179         public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
180         }
181
182         @Override
183         public Object[] getElements(Object element) {
184             return (Object[]) element;
185         }
186
187     }
188
189     @Override
190     public void dispose() {
191         // Unregister the listener
192         if (null != resourceSelectionChangedListener) {
193             resourceManager
194                     .removeResourceSelectionChangedUIListener(resourceSelectionChangedListener);
195         }
196         super.dispose();
197     }
198
199     @Override
200     public void setFocus() {
201     }
202 }