1 package oic.simulator.serviceprovider.view;
3 import java.util.Iterator;
7 import oic.simulator.serviceprovider.Activator;
8 import oic.simulator.serviceprovider.listener.IObserverListChangedUIListener;
9 import oic.simulator.serviceprovider.listener.IResourceSelectionChangedUIListener;
10 import oic.simulator.serviceprovider.manager.ResourceManager;
11 import oic.simulator.serviceprovider.resource.ObserverDetail;
12 import oic.simulator.serviceprovider.resource.SimulatorResource;
13 import oic.simulator.serviceprovider.utils.Constants;
15 import org.eclipse.jface.viewers.CellEditor;
16 import org.eclipse.jface.viewers.CheckboxCellEditor;
17 import org.eclipse.jface.viewers.ColumnLabelProvider;
18 import org.eclipse.jface.viewers.EditingSupport;
19 import org.eclipse.jface.viewers.IStructuredContentProvider;
20 import org.eclipse.jface.viewers.StyledCellLabelProvider;
21 import org.eclipse.jface.viewers.TableViewer;
22 import org.eclipse.jface.viewers.TableViewerColumn;
23 import org.eclipse.jface.viewers.Viewer;
24 import org.eclipse.jface.viewers.ViewerCell;
25 import org.eclipse.swt.SWT;
26 import org.eclipse.swt.graphics.Image;
27 import org.eclipse.swt.layout.GridData;
28 import org.eclipse.swt.layout.GridLayout;
29 import org.eclipse.swt.widgets.Composite;
30 import org.eclipse.swt.widgets.Display;
31 import org.eclipse.swt.widgets.Table;
32 import org.eclipse.ui.part.ViewPart;
34 public class ResourceObserverView extends ViewPart {
35 public static final String VIEW_ID = "oic.simulator.serviceprovider.view.observer";
37 private TableViewer tblViewer;
39 private final String[] columnHeaders = {
40 "Client Address", "Port", "Notify" };
42 private final Integer[] columnWidth = { 150, 75, 50 };
44 private IResourceSelectionChangedUIListener resourceSelectionChangedListener;
46 private IObserverListChangedUIListener resourceObserverListChangedListener;
48 private ResourceManager resourceManagerRef;
50 public ResourceObserverView() {
52 resourceManagerRef = Activator.getDefault().getResourceManager();
54 resourceSelectionChangedListener = new IResourceSelectionChangedUIListener() {
57 public void onResourceSelectionChange() {
58 Display.getDefault().asyncExec(new Runnable() {
62 if (null != tblViewer) {
64 updateViewer(getData(resourceManagerRef
65 .getCurrentResourceInSelection()));
72 resourceObserverListChangedListener = new IObserverListChangedUIListener() {
75 public void onObserverListChanged(final String resourceURI) {
76 Display.getDefault().asyncExec(new Runnable() {
80 if (null == resourceURI) {
83 SimulatorResource resource = resourceManagerRef
84 .getCurrentResourceInSelection();
85 if (null == resource) {
88 if (resource.getResourceURI().equals(resourceURI)) {
89 if (null != tblViewer) {
90 updateViewer(getData(resource));
100 private Map<Integer, ObserverDetail> getData(SimulatorResource resource) {
101 if (null == resource) {
104 return resource.getObserver();
107 private void updateViewer(Map<Integer, ObserverDetail> observer) {
108 if (null != tblViewer) {
109 Table tbl = tblViewer.getTable();
110 if (null != observer && observer.size() > 0) {
111 tblViewer.setInput(observer.entrySet().toArray());
112 if (!tbl.isDisposed()) {
113 tbl.setLinesVisible(true);
116 if (!tbl.isDisposed()) {
118 tbl.setLinesVisible(false);
125 public void createPartControl(Composite parent) {
126 parent.setLayout(new GridLayout(1, false));
128 tblViewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL
129 | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER);
131 createColumns(tblViewer);
133 // make lines and header visible
134 final Table table = tblViewer.getTable();
135 table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
136 table.setHeaderVisible(true);
137 table.setLinesVisible(true);
139 tblViewer.setContentProvider(new ObserverContentProvider());
141 addManagerListeners();
143 // Check whether there is any resource selected already
144 Map<Integer, ObserverDetail> observerList = getData(resourceManagerRef
145 .getCurrentResourceInSelection());
146 if (null != observerList) {
147 updateViewer(observerList);
151 public void createColumns(TableViewer tableViewer) {
152 TableViewerColumn addressColumn = new TableViewerColumn(tableViewer,
154 addressColumn.getColumn().setWidth(columnWidth[0]);
155 addressColumn.getColumn().setText(columnHeaders[0]);
156 addressColumn.setLabelProvider(new StyledCellLabelProvider() {
158 public void update(ViewerCell cell) {
159 Object element = cell.getElement();
160 if (element instanceof Map.Entry) {
161 @SuppressWarnings("unchecked")
162 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
163 cell.setText(observer.getValue().getObserverInfo()
169 TableViewerColumn portColumn = new TableViewerColumn(tableViewer,
171 portColumn.getColumn().setWidth(columnWidth[1]);
172 portColumn.getColumn().setText(columnHeaders[1]);
173 portColumn.setLabelProvider(new StyledCellLabelProvider() {
175 public void update(ViewerCell cell) {
176 Object element = cell.getElement();
177 if (element instanceof Map.Entry) {
178 @SuppressWarnings("unchecked")
179 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
180 cell.setText(String.valueOf(observer.getValue()
181 .getObserverInfo().getPort()));
186 TableViewerColumn notifyColumn = new TableViewerColumn(tableViewer,
188 notifyColumn.getColumn().setWidth(columnWidth[2]);
189 notifyColumn.getColumn().setText(columnHeaders[2]);
190 notifyColumn.setLabelProvider(new ColumnLabelProvider() {
193 public String getText(Object element) {
198 public Image getImage(Object element) {
199 @SuppressWarnings("unchecked")
200 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
201 if (observer.getValue().isClicked()) {
202 return Activator.getDefault().getImageRegistry()
203 .get(Constants.NOTIFY_BUTTON_SELECTED);
205 return Activator.getDefault().getImageRegistry()
206 .get(Constants.NOTIFY_BUTTON_UNSELECTED);
209 notifyColumn.setEditingSupport(new NotifyEditor(tableViewer));
212 private void addManagerListeners() {
214 .addResourceSelectionChangedUIListener(resourceSelectionChangedListener);
216 .addObserverListChangedUIListener(resourceObserverListChangedListener);
219 class ObserverContentProvider implements IStructuredContentProvider {
222 public void dispose() {
226 public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
230 public Object[] getElements(Object element) {
231 return (Object[]) element;
236 class NotifyEditor extends EditingSupport {
238 private final TableViewer viewer;
240 public NotifyEditor(TableViewer viewer) {
242 this.viewer = viewer;
246 protected boolean canEdit(Object arg0) {
251 protected CellEditor getCellEditor(Object element) {
252 return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY);
256 protected Object getValue(Object element) {
257 System.out.println("getValue()");
258 @SuppressWarnings("unchecked")
259 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
260 return observer.getValue().isClicked();
264 protected void setValue(Object element, Object value) {
265 System.out.println("setValue()");
266 // Change the button status of all the resources
267 changeButtonStatus();
269 @SuppressWarnings("unchecked")
270 Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element;
271 observer.getValue().setClicked(true);
274 // Call Native Method
275 resourceManagerRef.notifyObserverRequest(
276 resourceManagerRef.getCurrentResourceInSelection(),
277 observer.getValue().getObserverInfo().getId());
281 private void changeButtonStatus() {
282 SimulatorResource resource = resourceManagerRef
283 .getCurrentResourceInSelection();
284 if (null == resource) {
287 Map<Integer, ObserverDetail> observerMap = resource.getObserver();
288 if (null == observerMap) {
291 Set<Integer> keySet = observerMap.keySet();
292 Iterator<Integer> itr = keySet.iterator();
293 while (itr.hasNext()) {
294 observerMap.get(itr.next()).setClicked(false);
299 public void dispose() {
300 // Unregister the listener
301 if (null != resourceSelectionChangedListener) {
303 .removeResourceSelectionChangedUIListener(resourceSelectionChangedListener);
306 if (null != resourceObserverListChangedListener) {
308 .removeObserverListChangedUIListener(resourceObserverListChangedListener);
314 public void setFocus() {