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 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;
38 import java.util.Iterator;
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;
52 * This class manages and shows the resource observer view in the perspective.
54 public class ResourceObserverView extends ViewPart {
55 public static final String VIEW_ID = "oic.simulator.serviceprovider.view.observer";
57 private TableViewer tblViewer;
59 private final String[] columnHeaders = { "Client Address",
62 private final Integer[] columnWidth = { 150, 75, 50 };
64 private ISelectionChangedListener resourceSelectionChangedListener;
66 private IObserverListChangedListener resourceObserverListChangedListener;
68 private ResourceManager resourceManagerRef;
70 public ResourceObserverView() {
72 resourceManagerRef = Activator.getDefault().getResourceManager();
74 resourceSelectionChangedListener = new ISelectionChangedListener() {
77 public void onResourceSelectionChange(final Resource resource) {
78 Display.getDefault().asyncExec(new Runnable() {
82 if (null != tblViewer) {
84 updateViewer(getData(resource));
91 resourceObserverListChangedListener = new IObserverListChangedListener() {
94 public void onObserverListChanged(final Resource resource) {
95 Display.getDefault().asyncExec(new Runnable() {
99 if (null == resource) {
102 Resource resourceInSelection = resourceManagerRef
103 .getCurrentResourceInSelection();
104 if (null == resourceInSelection) {
107 if (resource == resourceInSelection) {
108 if (null != tblViewer) {
109 updateViewer(getData(resource));
119 private Map<Integer, ObserverDetail> getData(Resource 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() {
232 UiListenerHandler.getInstance().addResourceSelectionChangedUIListener(
233 resourceSelectionChangedListener);
234 UiListenerHandler.getInstance().addObserverListChangedUIListener(
235 resourceObserverListChangedListener);
238 private static class ObserverContentProvider implements
239 IStructuredContentProvider {
242 public void dispose() {
246 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
250 public Object[] getElements(Object element) {
251 return (Object[]) element;
256 class NotifyEditor extends EditingSupport {
258 private final TableViewer viewer;
260 public NotifyEditor(TableViewer viewer) {
262 this.viewer = viewer;
266 protected boolean canEdit(Object arg0) {
271 protected CellEditor getCellEditor(Object element) {
272 return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
276 protected Object getValue(Object element) {
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 // Change the button status of all the resources
285 changeButtonStatus();
287 @SuppressWarnings("unchecked")
288 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
289 observer.getValue().setClicked(true);
292 // Call Native Method
293 resourceManagerRef.notifyObserverRequest(
294 resourceManagerRef.getCurrentResourceInSelection(),
295 observer.getValue().getObserverInfo().getId());
299 private void changeButtonStatus() {
300 Resource resource = resourceManagerRef.getCurrentResourceInSelection();
301 if (null == resource) {
304 Map<Integer, ObserverDetail> observerMap = resource.getObserver();
305 if (null == observerMap) {
308 Set<Integer> keySet = observerMap.keySet();
309 Iterator<Integer> itr = keySet.iterator();
310 while (itr.hasNext()) {
311 observerMap.get(itr.next()).setClicked(false);
316 public void dispose() {
317 // Unregister the listener
318 if (null != resourceSelectionChangedListener) {
319 UiListenerHandler.getInstance()
320 .removeResourceSelectionChangedUIListener(
321 resourceSelectionChangedListener);
324 if (null != resourceObserverListChangedListener) {
325 UiListenerHandler.getInstance()
326 .removeObserverListChangedUIListener(
327 resourceObserverListChangedListener);
333 public void setFocus() {