package de.ralfebert.rcpsnippets.snippet02stocks; import java.math.BigDecimal; import java.util.Collection; import org.eclipse.core.databinding.beans.BeanProperties; import org.eclipse.core.databinding.observable.list.IObservableList; import org.eclipse.core.databinding.observable.list.WritableList; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.databinding.viewers.ViewerSupport; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.part.ViewPart; import de.ralfebert.rcputils.databinding.Realms; import de.ralfebert.rcputils.random.RandomData; import de.ralfebert.rcputils.tables.TableViewerBuilder; public class Snippet02Stocks extends ViewPart { @Override public void createPartControl(Composite parent) { TableViewerBuilder t = new TableViewerBuilder(parent); t.createColumn("Stock").build(); t.createColumn("Rate").alignRight().build(); ViewerSupport.bind(t.getTableViewer(), createStocks(), BeanProperties.values(new String[] { "name", "rate" })); } private IObservableList createStocks() { final WritableList stocks = new WritableList(Realms.WHATEVER); final RandomData rand = new RandomData(); for (int i = 0; i < 50; i++) { stocks.add(new Stock(rand.someCharacters(4, RandomData.UPPERCASE_CHARS), new BigDecimal(rand.someNumber(1d, 200d)))); rand.newData(); } Job job = new Job("stock exchange") { @Override @SuppressWarnings("unchecked") protected IStatus run(IProgressMonitor monitor) { for (Stock stock : (Collection<Stock>) stocks) { rand.newData(); stock.setRate(stock.getRate().add( new BigDecimal(rand.someNumber(-20, 20)).divide(new BigDecimal(100)))); } this.schedule(200); return Status.OK_STATUS; } }; job.schedule(); return stocks; } @Override public void setFocus() { // TODO Auto-generated method stub } }