Updated the order of imports in the source files of simulator plugins.
[platform/upstream/iotivity.git] / service / simulator / java / eclipse-plugin / ServiceProviderPlugin / src / oic / simulator / serviceprovider / view / ResourceObserverView.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 org.eclipse.jface.viewers.CellEditor;
20 import org.eclipse.jface.viewers.CheckboxCellEditor;
21 import org.eclipse.jface.viewers.ColumnLabelProvider;
22 import org.eclipse.jface.viewers.EditingSupport;
23 import org.eclipse.jface.viewers.IStructuredContentProvider;
24 import org.eclipse.jface.viewers.StyledCellLabelProvider;
25 import org.eclipse.jface.viewers.TableViewer;
26 import org.eclipse.jface.viewers.TableViewerColumn;
27 import org.eclipse.jface.viewers.Viewer;
28 import org.eclipse.jface.viewers.ViewerCell;
29 import org.eclipse.swt.SWT;
30 import org.eclipse.swt.graphics.Image;
31 import org.eclipse.swt.layout.GridData;
32 import org.eclipse.swt.layout.GridLayout;
33 import org.eclipse.swt.widgets.Composite;
34 import org.eclipse.swt.widgets.Display;
35 import org.eclipse.swt.widgets.Table;
36 import org.eclipse.ui.part.ViewPart;
37
38 import java.util.Iterator;
39 import java.util.Map;
40 import java.util.Set;
41
42 import oic.simulator.serviceprovider.Activator;
43 import oic.simulator.serviceprovider.listener.IObserverListChangedListener;
44 import oic.simulator.serviceprovider.listener.ISelectionChangedListener;
45 import oic.simulator.serviceprovider.manager.ResourceManager;
46 import oic.simulator.serviceprovider.manager.UiListenerHandler;
47 import oic.simulator.serviceprovider.model.ObserverDetail;
48 import oic.simulator.serviceprovider.model.Resource;
49 import oic.simulator.serviceprovider.utils.Constants;
50
51 /**
52  * This class manages and shows the resource observer view in the perspective.
53  */
54 public class ResourceObserverView extends ViewPart {
55     public static final String           VIEW_ID       = "oic.simulator.serviceprovider.view.observer";
56
57     private TableViewer                  tblViewer;
58
59     private final String[]               columnHeaders = { "Client Address",
60             "Port", "Notify"                          };
61
62     private final Integer[]              columnWidth   = { 150, 75, 50 };
63
64     private ISelectionChangedListener    resourceSelectionChangedListener;
65
66     private IObserverListChangedListener resourceObserverListChangedListener;
67
68     private ResourceManager              resourceManagerRef;
69
70     public ResourceObserverView() {
71
72         resourceManagerRef = Activator.getDefault().getResourceManager();
73
74         resourceSelectionChangedListener = new ISelectionChangedListener() {
75
76             @Override
77             public void onResourceSelectionChange(final Resource resource) {
78                 Display.getDefault().asyncExec(new Runnable() {
79
80                     @Override
81                     public void run() {
82                         if (null != tblViewer) {
83                             changeButtonStatus();
84                             updateViewer(getData(resource));
85                         }
86                     }
87                 });
88             }
89         };
90
91         resourceObserverListChangedListener = new IObserverListChangedListener() {
92
93             @Override
94             public void onObserverListChanged(final Resource resource) {
95                 Display.getDefault().asyncExec(new Runnable() {
96
97                     @Override
98                     public void run() {
99                         if (null == resource) {
100                             return;
101                         }
102                         Resource resourceInSelection = resourceManagerRef
103                                 .getCurrentResourceInSelection();
104                         if (null == resourceInSelection) {
105                             return;
106                         }
107                         if (resource == resourceInSelection) {
108                             if (null != tblViewer) {
109                                 updateViewer(getData(resource));
110                             }
111                         }
112                     }
113                 });
114
115             }
116         };
117     }
118
119     private Map<Integer, ObserverDetail> getData(Resource resource) {
120         if (null == resource) {
121             return null;
122         }
123         return resource.getObserver();
124     }
125
126     private void updateViewer(Map<Integer, ObserverDetail> observer) {
127         if (null != tblViewer) {
128             Table tbl = tblViewer.getTable();
129             if (null != observer && observer.size() > 0) {
130                 tblViewer.setInput(observer.entrySet().toArray());
131                 if (!tbl.isDisposed()) {
132                     tbl.setLinesVisible(true);
133                 }
134             } else {
135                 if (!tbl.isDisposed()) {
136                     tbl.removeAll();
137                     tbl.setLinesVisible(false);
138                 }
139             }
140         }
141     }
142
143     @Override
144     public void createPartControl(Composite parent) {
145         parent.setLayout(new GridLayout(1, false));
146
147         tblViewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL
148                 | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
149
150         createColumns(tblViewer);
151
152         // Make lines and header visible
153         final Table table = tblViewer.getTable();
154         table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
155         table.setHeaderVisible(true);
156         table.setLinesVisible(true);
157
158         tblViewer.setContentProvider(new ObserverContentProvider());
159
160         addManagerListeners();
161
162         // Check whether there is any resource selected already
163         Map<Integer, ObserverDetail> observerList = getData(resourceManagerRef
164                 .getCurrentResourceInSelection());
165         if (null != observerList) {
166             updateViewer(observerList);
167         }
168     }
169
170     public void createColumns(TableViewer tableViewer) {
171         TableViewerColumn addressColumn = new TableViewerColumn(tableViewer,
172                 SWT.NONE);
173         addressColumn.getColumn().setWidth(columnWidth[0]);
174         addressColumn.getColumn().setText(columnHeaders[0]);
175         addressColumn.setLabelProvider(new StyledCellLabelProvider() {
176             @Override
177             public void update(ViewerCell cell) {
178                 Object element = cell.getElement();
179                 if (element instanceof Map.Entry) {
180                     @SuppressWarnings("unchecked")
181                     Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
182                     cell.setText(observer.getValue().getObserverInfo()
183                             .getAddress());
184                 }
185             }
186         });
187
188         TableViewerColumn portColumn = new TableViewerColumn(tableViewer,
189                 SWT.NONE);
190         portColumn.getColumn().setWidth(columnWidth[1]);
191         portColumn.getColumn().setText(columnHeaders[1]);
192         portColumn.setLabelProvider(new StyledCellLabelProvider() {
193             @Override
194             public void update(ViewerCell cell) {
195                 Object element = cell.getElement();
196                 if (element instanceof Map.Entry) {
197                     @SuppressWarnings("unchecked")
198                     Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
199                     cell.setText(String.valueOf(observer.getValue()
200                             .getObserverInfo().getPort()));
201                 }
202             }
203         });
204
205         TableViewerColumn notifyColumn = new TableViewerColumn(tableViewer,
206                 SWT.NONE);
207         notifyColumn.getColumn().setWidth(columnWidth[2]);
208         notifyColumn.getColumn().setText(columnHeaders[2]);
209         notifyColumn.setLabelProvider(new ColumnLabelProvider() {
210
211             @Override
212             public String getText(Object element) {
213                 return "";
214             }
215
216             @Override
217             public Image getImage(Object element) {
218                 @SuppressWarnings("unchecked")
219                 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
220                 if (observer.getValue().isClicked()) {
221                     return Activator.getDefault().getImageRegistry()
222                             .get(Constants.NOTIFY_BUTTON_SELECTED);
223                 }
224                 return Activator.getDefault().getImageRegistry()
225                         .get(Constants.NOTIFY_BUTTON_UNSELECTED);
226             }
227         });
228         notifyColumn.setEditingSupport(new NotifyEditor(tableViewer));
229     }
230
231     private void addManagerListeners() {
232         UiListenerHandler.getInstance().addResourceSelectionChangedUIListener(
233                 resourceSelectionChangedListener);
234         UiListenerHandler.getInstance().addObserverListChangedUIListener(
235                 resourceObserverListChangedListener);
236     }
237
238     class ObserverContentProvider implements IStructuredContentProvider {
239
240         @Override
241         public void dispose() {
242         }
243
244         @Override
245         public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
246         }
247
248         @Override
249         public Object[] getElements(Object element) {
250             return (Object[]) element;
251         }
252
253     }
254
255     class NotifyEditor extends EditingSupport {
256
257         private final TableViewer viewer;
258
259         public NotifyEditor(TableViewer viewer) {
260             super(viewer);
261             this.viewer = viewer;
262         }
263
264         @Override
265         protected boolean canEdit(Object arg0) {
266             return true;
267         }
268
269         @Override
270         protected CellEditor getCellEditor(Object element) {
271             return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
272         }
273
274         @Override
275         protected Object getValue(Object element) {
276             @SuppressWarnings("unchecked")
277             Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
278             return observer.getValue().isClicked();
279         }
280
281         @Override
282         protected void setValue(Object element, Object value) {
283             // Change the button status of all the resources
284             changeButtonStatus();
285
286             @SuppressWarnings("unchecked")
287             Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
288             observer.getValue().setClicked(true);
289             viewer.refresh();
290
291             // Call Native Method
292             resourceManagerRef.notifyObserverRequest(
293                     resourceManagerRef.getCurrentResourceInSelection(),
294                     observer.getValue().getObserverInfo().getId());
295         }
296     }
297
298     private void changeButtonStatus() {
299         Resource resource = resourceManagerRef.getCurrentResourceInSelection();
300         if (null == resource) {
301             return;
302         }
303         Map<Integer, ObserverDetail> observerMap = resource.getObserver();
304         if (null == observerMap) {
305             return;
306         }
307         Set<Integer> keySet = observerMap.keySet();
308         Iterator<Integer> itr = keySet.iterator();
309         while (itr.hasNext()) {
310             observerMap.get(itr.next()).setClicked(false);
311         }
312     }
313
314     @Override
315     public void dispose() {
316         // Unregister the listener
317         if (null != resourceSelectionChangedListener) {
318             UiListenerHandler.getInstance()
319                     .removeResourceSelectionChangedUIListener(
320                             resourceSelectionChangedListener);
321         }
322
323         if (null != resourceObserverListChangedListener) {
324             UiListenerHandler.getInstance()
325                     .removeObserverListChangedUIListener(
326                             resourceObserverListChangedListener);
327         }
328         super.dispose();
329     }
330
331     @Override
332     public void setFocus() {
333     }
334
335 }