Java tutorial
/* * Copyright 2015 Samsung Electronics All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package oic.simulator.serviceprovider.view; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.CheckboxCellEditor; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.EditingSupport; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.ui.part.ViewPart; import java.util.Iterator; import java.util.Map; import java.util.Set; import oic.simulator.serviceprovider.Activator; import oic.simulator.serviceprovider.listener.IObserverListChangedListener; import oic.simulator.serviceprovider.listener.ISelectionChangedListener; import oic.simulator.serviceprovider.manager.ResourceManager; import oic.simulator.serviceprovider.manager.UiListenerHandler; import oic.simulator.serviceprovider.model.ObserverDetail; import oic.simulator.serviceprovider.model.Resource; import oic.simulator.serviceprovider.utils.Constants; /** * This class manages and shows the resource observer view in the perspective. */ public class ResourceObserverView extends ViewPart { public static final String VIEW_ID = "oic.simulator.serviceprovider.view.observer"; private TableViewer tblViewer; private final String[] columnHeaders = { "Client Address", "Port", "Notify" }; private final Integer[] columnWidth = { 150, 75, 50 }; private ISelectionChangedListener resourceSelectionChangedListener; private IObserverListChangedListener resourceObserverListChangedListener; private ResourceManager resourceManagerRef; public ResourceObserverView() { resourceManagerRef = Activator.getDefault().getResourceManager(); resourceSelectionChangedListener = new ISelectionChangedListener() { @Override public void onResourceSelectionChange(final Resource resource) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if (null != tblViewer) { changeButtonStatus(); updateViewer(getData(resource)); } } }); } }; resourceObserverListChangedListener = new IObserverListChangedListener() { @Override public void onObserverListChanged(final Resource resource) { Display.getDefault().asyncExec(new Runnable() { @Override public void run() { if (null == resource) { return; } Resource resourceInSelection = resourceManagerRef.getCurrentResourceInSelection(); if (null == resourceInSelection) { return; } if (resource == resourceInSelection) { if (null != tblViewer) { updateViewer(getData(resource)); } } } }); } }; } private Map<Integer, ObserverDetail> getData(Resource resource) { if (null == resource) { return null; } return resource.getObserver(); } private void updateViewer(Map<Integer, ObserverDetail> observer) { if (null != tblViewer) { Table tbl = tblViewer.getTable(); if (null != observer && observer.size() > 0) { tblViewer.setInput(observer.entrySet().toArray()); if (!tbl.isDisposed()) { tbl.setLinesVisible(true); } } else { if (!tbl.isDisposed()) { tbl.removeAll(); tbl.setLinesVisible(false); } } } } @Override public void createPartControl(Composite parent) { parent.setLayout(new GridLayout(1, false)); tblViewer = new TableViewer(parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); createColumns(tblViewer); // Make lines and header visible final Table table = tblViewer.getTable(); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); table.setHeaderVisible(true); table.setLinesVisible(true); tblViewer.setContentProvider(new ObserverContentProvider()); addManagerListeners(); // Check whether there is any resource selected already Map<Integer, ObserverDetail> observerList = getData(resourceManagerRef.getCurrentResourceInSelection()); if (null != observerList) { updateViewer(observerList); } } public void createColumns(TableViewer tableViewer) { TableViewerColumn addressColumn = new TableViewerColumn(tableViewer, SWT.NONE); addressColumn.getColumn().setWidth(columnWidth[0]); addressColumn.getColumn().setText(columnHeaders[0]); addressColumn.setLabelProvider(new StyledCellLabelProvider() { @Override public void update(ViewerCell cell) { Object element = cell.getElement(); if (element instanceof Map.Entry) { @SuppressWarnings("unchecked") Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element; cell.setText(observer.getValue().getObserverInfo().getAddress()); } } }); TableViewerColumn portColumn = new TableViewerColumn(tableViewer, SWT.NONE); portColumn.getColumn().setWidth(columnWidth[1]); portColumn.getColumn().setText(columnHeaders[1]); portColumn.setLabelProvider(new StyledCellLabelProvider() { @Override public void update(ViewerCell cell) { Object element = cell.getElement(); if (element instanceof Map.Entry) { @SuppressWarnings("unchecked") Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element; cell.setText(String.valueOf(observer.getValue().getObserverInfo().getPort())); } } }); TableViewerColumn notifyColumn = new TableViewerColumn(tableViewer, SWT.NONE); notifyColumn.getColumn().setWidth(columnWidth[2]); notifyColumn.getColumn().setText(columnHeaders[2]); notifyColumn.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { return ""; } @Override public Image getImage(Object element) { @SuppressWarnings("unchecked") Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element; if (observer.getValue().isClicked()) { return Activator.getDefault().getImageRegistry().get(Constants.NOTIFY_BUTTON_SELECTED); } return Activator.getDefault().getImageRegistry().get(Constants.NOTIFY_BUTTON_UNSELECTED); } }); notifyColumn.setEditingSupport(new NotifyEditor(tableViewer)); } private void addManagerListeners() { UiListenerHandler.getInstance().addResourceSelectionChangedUIListener(resourceSelectionChangedListener); UiListenerHandler.getInstance().addObserverListChangedUIListener(resourceObserverListChangedListener); } private static class ObserverContentProvider implements IStructuredContentProvider { @Override public void dispose() { } @Override public void inputChanged(Viewer arg0, Object arg1, Object arg2) { } @Override public Object[] getElements(Object element) { return (Object[]) element; } } class NotifyEditor extends EditingSupport { private final TableViewer viewer; public NotifyEditor(TableViewer viewer) { super(viewer); this.viewer = viewer; } @Override protected boolean canEdit(Object arg0) { return true; } @Override protected CellEditor getCellEditor(Object element) { return new CheckboxCellEditor(null, SWT.CHECK | SWT.READ_ONLY); } @Override protected Object getValue(Object element) { @SuppressWarnings("unchecked") Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element; return observer.getValue().isClicked(); } @Override protected void setValue(Object element, Object value) { // Change the button status of all the resources changeButtonStatus(); @SuppressWarnings("unchecked") Map.Entry<Integer, ObserverDetail> observer = (Map.Entry<Integer, ObserverDetail>) element; observer.getValue().setClicked(true); viewer.refresh(); // Call Native Method resourceManagerRef.notifyObserverRequest(resourceManagerRef.getCurrentResourceInSelection(), observer.getValue().getObserverInfo().getId()); } } private void changeButtonStatus() { Resource resource = resourceManagerRef.getCurrentResourceInSelection(); if (null == resource) { return; } Map<Integer, ObserverDetail> observerMap = resource.getObserver(); if (null == observerMap) { return; } Set<Integer> keySet = observerMap.keySet(); Iterator<Integer> itr = keySet.iterator(); while (itr.hasNext()) { observerMap.get(itr.next()).setClicked(false); } } @Override public void dispose() { // Unregister the listener if (null != resourceSelectionChangedListener) { UiListenerHandler.getInstance() .removeResourceSelectionChangedUIListener(resourceSelectionChangedListener); } if (null != resourceObserverListChangedListener) { UiListenerHandler.getInstance() .removeObserverListChangedUIListener(resourceObserverListChangedListener); } super.dispose(); } @Override public void setFocus() { } }