/* (non-Javadoc) * @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object) */ @Override public ISecurity unmarshal(String v) throws Exception { if (v == null) { return null; } URI uri = new URI(v); if (repositoryService == null) { try { BundleContext context = CoreActivator.getDefault().getBundle().getBundleContext(); ServiceReference serviceReference = context.getServiceReference(IRepositoryService.class.getName()); repositoryService = (IRepositoryService) context.getService(serviceReference); context.ungetService(serviceReference); } catch (Exception e) { Status status = new Status( IStatus.ERROR, CoreActivator.PLUGIN_ID, 0, "Error reading repository service", e); CoreActivator.log(status); } } ISecurity security = repositoryService != null ? repositoryService.getSecurityFromURI(uri) : null; if (security == null) { Status status = new Status( IStatus.WARNING, CoreActivator.PLUGIN_ID, 0, "Failed to load security " + uri.toString(), null); CoreActivator.log(status); return new FailsafeSecurity(uri); } return security; }
/* (non-Javadoc) * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento) */ @Override public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); BundleContext bundleContext = UIActivator.getDefault().getBundle().getBundleContext(); ServiceReference<ITradingSystemService> serviceReference = bundleContext.getServiceReference(ITradingSystemService.class); tradingSystemService = bundleContext.getService(serviceReference); activator = CoreActivator.getDefault(); IDialogSettings rootDialogSettings = UIActivator.getDefault().getDialogSettings(); dialogSettings = rootDialogSettings.getSection(VIEW_ID); if (dialogSettings == null) { dialogSettings = rootDialogSettings.addNewSection(VIEW_ID); dialogSettings.put( COLUMNS, new String[] { "org.eclipsetrader.ui.providers.LastTrade", //$NON-NLS-1$ "org.eclipsetrader.ui.providers.BidPrice", //$NON-NLS-1$ "org.eclipsetrader.ui.providers.AskPrice", //$NON-NLS-1$ "org.eclipsetrader.ui.providers.Position", //$NON-NLS-1$ "org.eclipsetrader.ui.providers.LastTradeDateTime", //$NON-NLS-1$ "org.eclipsetrader.ui.providers.gain", //$NON-NLS-1$ }); IDialogSettings section = dialogSettings.addNewSection(COLUMN_NAMES); section.put("org.eclipsetrader.ui.providers.LastTrade", "Last"); // $NON-NLS-1$ section.put("org.eclipsetrader.ui.providers.BidPrice", "Bid"); // $NON-NLS-1$ section.put("org.eclipsetrader.ui.providers.AskPrice", "Ask"); // $NON-NLS-1$ section.put("org.eclipsetrader.ui.providers.Position", "Position"); // $NON-NLS-1$ section.put("org.eclipsetrader.ui.providers.LastTradeDateTime", "Date / Time"); // $NON-NLS-1$ section.put("org.eclipsetrader.ui.providers.gain", "Gain"); // $NON-NLS-1$ dialogSettings.addNewSection(COLUMN_WIDTHS); } settingsAction = new SettingsAction(site.getShell(), this); IActionBars actionBars = site.getActionBars(); actionBars.setGlobalActionHandler(settingsAction.getId(), settingsAction); actionBars.updateActionBars(); }
/* (non-Javadoc) * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ @Override public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.FULL_SELECTION | SWT.MULTI); viewer.getTree().setHeaderVisible(true); viewer.getTree().setLinesVisible(false); createContextMenu(); model = new TradingSystemsViewModel(tradingSystemService); String[] columns = dialogSettings.getArray(COLUMNS); IDialogSettings namesSection = dialogSettings.getSection(COLUMN_NAMES); List<ViewColumn> list = new ArrayList<ViewColumn>(); for (int i = 0; i < columns.length; i++) { String name = namesSection.get(columns[i]); list.add(new ViewColumn(name, activator.getDataProviderFactory(columns[i]))); } model.setDataProviders(list); for (final TradingSystemItem item : model.getList()) { PropertyChangeSupport changeSupport = (PropertyChangeSupport) item.getTradingSystem().getAdapter(PropertyChangeSupport.class); if (changeSupport != null) { changeSupport.addPropertyChangeListener( new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { Display.getDefault() .asyncExec( new Runnable() { @Override public void run() { if (viewer.getControl().isDisposed()) { return; } viewer.refresh(item); } }); } }); } } final ObservableListTreeContentProvider contentProvider = new ObservableListTreeContentProvider(model, model); viewer.setContentProvider(contentProvider); IDialogSettings widthSettings = dialogSettings.getSection(COLUMN_WIDTHS); TreeViewerColumn viewerColumn = new TreeViewerColumn(viewer, SWT.NONE); int width = 300; if (widthSettings.get(LABEL_COLUMN) != null) { width = widthSettings.getInt(LABEL_COLUMN); } viewerColumn.getColumn().setWidth(width); viewerColumn.getColumn().addControlListener(columnControlListener); final List<IObservableMap> properties = new ArrayList<IObservableMap>(); properties.add(new ViewerObservableMap(contentProvider.getKnownElements(), LABEL_COLUMN)); for (ViewColumn column : model.getDataProviders()) { viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT); viewerColumn.getColumn().setText(column.getName()); width = 100; if (widthSettings.get(column.getDataProviderFactory().getId()) != null) { width = widthSettings.getInt(column.getDataProviderFactory().getId()); } viewerColumn.getColumn().setWidth(width); viewerColumn.getColumn().addControlListener(columnControlListener); column.addPropertyChangeListener(ViewColumn.PROP_NAME, columnPropertiesChangeListener); properties.add( new ViewerObservableMap( contentProvider.getKnownElements(), column.getDataProviderFactory().getId())); } createLabelProvider(properties.toArray(new IObservableMap[properties.size()])); model .getObservableDataProviders() .addListChangeListener( new IListChangeListener() { @Override public void handleListChange(ListChangeEvent event) { event.diff.accept( new ListDiffVisitor() { @Override public void handleRemove(int index, Object element) { TreeColumn treeColumn = viewer.getTree().getColumn(index + 1); treeColumn.dispose(); ViewColumn column = (ViewColumn) element; column.removePropertyChangeListener( ViewColumn.PROP_NAME, columnPropertiesChangeListener); IObservableMap observableMap = properties.remove(index + 1); if (observableMap != null) { observableMap.dispose(); } } @Override public void handleAdd(int index, Object element) { ViewColumn column = (ViewColumn) element; TreeViewerColumn viewerColumn = new TreeViewerColumn(viewer, SWT.RIGHT, index + 1); viewerColumn.getColumn().setText(column.getName()); int width = 100; IDialogSettings widthSettings = dialogSettings.getSection(COLUMN_WIDTHS); if (widthSettings.get(column.getDataProviderFactory().getId()) != null) { width = widthSettings.getInt(column.getDataProviderFactory().getId()); } viewerColumn.getColumn().setWidth(width); viewerColumn.getColumn().addControlListener(columnControlListener); column.addPropertyChangeListener( ViewColumn.PROP_NAME, columnPropertiesChangeListener); properties.add( index + 1, new ViewerObservableMap( contentProvider.getKnownElements(), column.getDataProviderFactory().getId())); } }); createLabelProvider(properties.toArray(new IObservableMap[properties.size()])); IDialogSettings namesSection = dialogSettings.getSection(COLUMN_NAMES); List<String> list = new ArrayList<String>(); for (ViewColumn column : model.getDataProviders()) { list.add(column.getDataProviderFactory().getId()); namesSection.put(column.getDataProviderFactory().getId(), column.getName()); } dialogSettings.put(COLUMNS, list.toArray(new String[list.size()])); } }); viewer.setComparator(new ViewerComparator()); getSite().setSelectionProvider(viewer); viewer.setInput(model); viewer.expandAll(); }