Merge branch 'plugin-interface' into master
[platform/upstream/iotivity.git] / service / simulator / java / eclipse-plugin / ServiceProviderPlugin / src / oic / simulator / serviceprovider / 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.serviceprovider.view;
18
19 import java.util.List;
20
21 import oic.simulator.serviceprovider.Activator;
22 import oic.simulator.serviceprovider.listener.IResourceSelectionChangedUIListener;
23 import oic.simulator.serviceprovider.manager.ResourceManager;
24 import oic.simulator.serviceprovider.resource.MetaProperty;
25 import oic.simulator.serviceprovider.resource.SimulatorResource;
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.serviceprovider.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                     resourceManagerRef;
57
58     public MetaPropertiesView() {
59
60         resourceManagerRef = Activator.getDefault().getResourceManager();
61
62         resourceSelectionChangedListener = new IResourceSelectionChangedUIListener() {
63
64             @Override
65             public void onResourceSelectionChange() {
66                 Display.getDefault().asyncExec(new Runnable() {
67
68                     @Override
69                     public void run() {
70                         if (null != tableViewer) {
71                             updateViewer(getData());
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();
100         if (null != propertyList) {
101             updateViewer(propertyList);
102         }
103
104     }
105
106     private List<MetaProperty> getData() {
107         SimulatorResource resourceInSelection = resourceManagerRef
108                 .getCurrentResourceInSelection();
109         if (null != resourceInSelection) {
110             List<MetaProperty> metaPropertyList = resourceManagerRef
111                     .getMetaProperties(resourceInSelection);
112             return metaPropertyList;
113         } else {
114             return null;
115         }
116     }
117
118     private void updateViewer(List<MetaProperty> metaPropertyList) {
119         if (null != tableViewer) {
120             Table tbl = tableViewer.getTable();
121             if (null != metaPropertyList) {
122                 tableViewer.setInput(metaPropertyList.toArray());
123                 if (!tbl.isDisposed()) {
124                     tbl.setLinesVisible(true);
125                 }
126             } else {
127                 if (!tbl.isDisposed()) {
128                     tbl.removeAll();
129                     tbl.setLinesVisible(false);
130                 }
131             }
132         }
133     }
134
135     public void createColumns(TableViewer tableViewer) {
136         TableViewerColumn propName = new TableViewerColumn(tableViewer,
137                 SWT.NONE);
138         propName.getColumn().setWidth(columnWidth[0]);
139         propName.getColumn().setText(columnHeaders[0]);
140         propName.setLabelProvider(new ColumnLabelProvider() {
141             @Override
142             public String getText(Object element) {
143                 MetaProperty prop = (MetaProperty) element;
144                 if (null != prop) {
145                     return prop.getPropName();
146                 } else {
147                     return "";
148                 }
149             }
150         });
151
152         TableViewerColumn propValue = new TableViewerColumn(tableViewer,
153                 SWT.NONE);
154         propValue.getColumn().setWidth(columnWidth[1]);
155         propValue.getColumn().setText(columnHeaders[1]);
156         propValue.setLabelProvider(new ColumnLabelProvider() {
157             @Override
158             public String getText(Object element) {
159                 MetaProperty prop = (MetaProperty) element;
160                 if (null != prop) {
161                     return prop.getPropValue();
162                 } else {
163                     return "";
164                 }
165             }
166         });
167     }
168
169     private void addManagerListeners() {
170         resourceManagerRef
171                 .addResourceSelectionChangedUIListener(resourceSelectionChangedListener);
172     }
173
174     class PropertycontentProvider implements IStructuredContentProvider {
175
176         @Override
177         public void dispose() {
178         }
179
180         @Override
181         public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
182         }
183
184         @Override
185         public Object[] getElements(Object element) {
186             return (Object[]) element;
187         }
188
189     }
190
191     @Override
192     public void dispose() {
193         // Unregister the listener
194         if (null != resourceSelectionChangedListener) {
195             resourceManagerRef
196                     .removeResourceSelectionChangedUIListener(resourceSelectionChangedListener);
197         }
198         super.dispose();
199     }
200
201     @Override
202     public void setFocus() {
203     }
204 }