2 * Copyright 2015 Samsung Electronics All Rights Reserved.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package oic.simulator.serviceprovider.view;
19 import java.util.Iterator;
23 import oic.simulator.serviceprovider.Activator;
24 import oic.simulator.serviceprovider.listener.IObserverListChangedUIListener;
25 import oic.simulator.serviceprovider.listener.IResourceSelectionChangedUIListener;
26 import oic.simulator.serviceprovider.manager.ResourceManager;
27 import oic.simulator.serviceprovider.resource.ObserverDetail;
28 import oic.simulator.serviceprovider.resource.SimulatorResource;
29 import oic.simulator.serviceprovider.utils.Constants;
31 import org.eclipse.jface.viewers.CellEditor;
32 import org.eclipse.jface.viewers.CheckboxCellEditor;
33 import org.eclipse.jface.viewers.ColumnLabelProvider;
34 import org.eclipse.jface.viewers.EditingSupport;
35 import org.eclipse.jface.viewers.IStructuredContentProvider;
36 import org.eclipse.jface.viewers.StyledCellLabelProvider;
37 import org.eclipse.jface.viewers.TableViewer;
38 import org.eclipse.jface.viewers.TableViewerColumn;
39 import org.eclipse.jface.viewers.Viewer;
40 import org.eclipse.jface.viewers.ViewerCell;
41 import org.eclipse.swt.SWT;
42 import org.eclipse.swt.graphics.Image;
43 import org.eclipse.swt.layout.GridData;
44 import org.eclipse.swt.layout.GridLayout;
45 import org.eclipse.swt.widgets.Composite;
46 import org.eclipse.swt.widgets.Display;
47 import org.eclipse.swt.widgets.Table;
48 import org.eclipse.ui.part.ViewPart;
51 * This class manages and shows the resource observer view in the perspective.
53 public class ResourceObserverView extends ViewPart {
54 public static final String VIEW_ID = "oic.simulator.serviceprovider.view.observer";
56 private TableViewer tblViewer;
58 private final String[] columnHeaders = {
59 "Client Address", "Port", "Notify" };
61 private final Integer[] columnWidth = { 150, 75, 50 };
63 private IResourceSelectionChangedUIListener resourceSelectionChangedListener;
65 private IObserverListChangedUIListener resourceObserverListChangedListener;
67 private ResourceManager resourceManagerRef;
69 public ResourceObserverView() {
71 resourceManagerRef = Activator.getDefault().getResourceManager();
73 resourceSelectionChangedListener = new IResourceSelectionChangedUIListener() {
76 public void onResourceSelectionChange() {
77 Display.getDefault().asyncExec(new Runnable() {
81 if (null != tblViewer) {
83 updateViewer(getData(resourceManagerRef
84 .getCurrentResourceInSelection()));
91 resourceObserverListChangedListener = new IObserverListChangedUIListener() {
94 public void onObserverListChanged(final String resourceURI) {
95 Display.getDefault().asyncExec(new Runnable() {
99 if (null == resourceURI) {
102 SimulatorResource resource = resourceManagerRef
103 .getCurrentResourceInSelection();
104 if (null == resource) {
107 if (resource.getResourceURI().equals(resourceURI)) {
108 if (null != tblViewer) {
109 updateViewer(getData(resource));
119 private Map<Integer, ObserverDetail> getData(SimulatorResource resource) {
120 if (null == resource) {
123 return resource.getObserver();
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);
135 if (!tbl.isDisposed()) {
137 tbl.setLinesVisible(false);
144 public void createPartControl(Composite parent) {
145 parent.setLayout(new GridLayout(1, false));
147 tblViewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL
148 | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
150 createColumns(tblViewer);
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);
158 tblViewer.setContentProvider(new ObserverContentProvider());
160 addManagerListeners();
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);
170 public void createColumns(TableViewer tableViewer) {
171 TableViewerColumn addressColumn = new TableViewerColumn(tableViewer,
173 addressColumn.getColumn().setWidth(columnWidth[0]);
174 addressColumn.getColumn().setText(columnHeaders[0]);
175 addressColumn.setLabelProvider(new StyledCellLabelProvider() {
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()
188 TableViewerColumn portColumn = new TableViewerColumn(tableViewer,
190 portColumn.getColumn().setWidth(columnWidth[1]);
191 portColumn.getColumn().setText(columnHeaders[1]);
192 portColumn.setLabelProvider(new StyledCellLabelProvider() {
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()));
205 TableViewerColumn notifyColumn = new TableViewerColumn(tableViewer,
207 notifyColumn.getColumn().setWidth(columnWidth[2]);
208 notifyColumn.getColumn().setText(columnHeaders[2]);
209 notifyColumn.setLabelProvider(new ColumnLabelProvider() {
212 public String getText(Object element) {
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);
224 return Activator.getDefault().getImageRegistry()
225 .get(Constants.NOTIFY_BUTTON_UNSELECTED);
228 notifyColumn.setEditingSupport(new NotifyEditor(tableViewer));
231 private void addManagerListeners() {
233 .addResourceSelectionChangedUIListener(resourceSelectionChangedListener);
235 .addObserverListChangedUIListener(resourceObserverListChangedListener);
238 class ObserverContentProvider implements IStructuredContentProvider {
241 public void dispose() {
245 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
249 public Object[] getElements(Object element) {
250 return (Object[]) element;
255 class NotifyEditor extends EditingSupport {
257 private final TableViewer viewer;
259 public NotifyEditor(TableViewer viewer) {
261 this.viewer = viewer;
265 protected boolean canEdit(Object arg0) {
270 protected CellEditor getCellEditor(Object element) {
271 return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
275 protected Object getValue(Object element) {
276 System.out.println("getValue()");
277 @SuppressWarnings("unchecked")
278 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
279 return observer.getValue().isClicked();
283 protected void setValue(Object element, Object value) {
284 System.out.println("setValue()");
285 // Change the button status of all the resources
286 changeButtonStatus();
288 @SuppressWarnings("unchecked")
289 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
290 observer.getValue().setClicked(true);
293 // Call Native Method
294 resourceManagerRef.notifyObserverRequest(
295 resourceManagerRef.getCurrentResourceInSelection(),
296 observer.getValue().getObserverInfo().getId());
300 private void changeButtonStatus() {
301 SimulatorResource resource = resourceManagerRef
302 .getCurrentResourceInSelection();
303 if (null == resource) {
306 Map<Integer, ObserverDetail> observerMap = resource.getObserver();
307 if (null == observerMap) {
310 Set<Integer> keySet = observerMap.keySet();
311 Iterator<Integer> itr = keySet.iterator();
312 while (itr.hasNext()) {
313 observerMap.get(itr.next()).setClicked(false);
318 public void dispose() {
319 // Unregister the listener
320 if (null != resourceSelectionChangedListener) {
322 .removeResourceSelectionChangedUIListener(resourceSelectionChangedListener);
325 if (null != resourceObserverListChangedListener) {
327 .removeObserverListChangedUIListener(resourceObserverListChangedListener);
333 public void setFocus() {