/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.ui.internal.views; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.util.HashMap; import java.util.Map; import org.eclipse.core.databinding.observable.list.ObservableList; import org.eclipsetrader.core.feed.IBook; import org.eclipsetrader.core.feed.ILastClose; import org.eclipsetrader.core.feed.IPrice; import org.eclipsetrader.core.feed.IQuote; import org.eclipsetrader.core.feed.ITodayOHL; import org.eclipsetrader.core.feed.ITrade; import org.eclipsetrader.core.instruments.ISecurity; import org.eclipsetrader.core.views.Holding; import org.eclipsetrader.core.views.IWatchListElement; import org.eclipsetrader.ui.internal.ats.ViewItem; public class WatchListViewItem implements ViewItem { public static final String PROP_QUANTITY = "position"; public static final String PROP_PRICE = "purchasePrice"; private final WatchListViewModel parent; private final IWatchListElement element; private final ISecurity security; private IPrice price; private ITrade trade; private IQuote quote; private ITodayOHL todayOHL; private ILastClose lastClose; private IBook book; private Long position; private Double purchasePrice; private final Map<String, Object> values = new HashMap<String, Object>(); private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); public WatchListViewItem(WatchListViewModel parent, IWatchListElement element) { this.parent = parent; this.element = element; this.security = element.getSecurity(); this.position = element.getPosition(); this.purchasePrice = element.getPurchasePrice(); } public IWatchListElement getElement() { return element; } /* (non-Javadoc) * @see org.eclipsetrader.ui.internal.ats.ViewItem#addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener) */ @Override public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.addPropertyChangeListener(propertyName, listener); } /* (non-Javadoc) * @see org.eclipsetrader.ui.internal.ats.ViewItem#removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener) */ @Override public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { changeSupport.removePropertyChangeListener(propertyName, listener); } /* (non-Javadoc) * @see org.eclipsetrader.ui.internal.ats.ViewItem#getValue(java.lang.String) */ @Override public Object getValue(String name) { return values.get(name); } /* (non-Javadoc) * @see org.eclipsetrader.ui.internal.ats.ViewItem#putValue(java.lang.String, java.lang.Object) */ @Override public void putValue(final String name, final Object value) { Object oldValue = values.put(name, value); changeSupport.firePropertyChange(name, oldValue, value); } /* (non-Javadoc) * @see org.eclipsetrader.ui.internal.ats.ViewItem#getParent() */ @Override public ViewItem getParent() { return null; } /* (non-Javadoc) * @see org.eclipsetrader.ui.internal.ats.ViewItem#hasChildren() */ @Override public boolean hasChildren() { return false; } /* (non-Javadoc) * @see org.eclipsetrader.ui.internal.ats.ViewItem#getItems() */ @Override public ObservableList getItems() { return null; } public ISecurity getSecurity() { return security; } public void setPriceData(Object obj) { if (obj instanceof IPrice) { price = (IPrice) obj; } if (obj instanceof ITrade) { trade = (ITrade) obj; } if (obj instanceof IQuote) { quote = (IQuote) obj; } if (obj instanceof ILastClose) { lastClose = (ILastClose) obj; } if (obj instanceof ITodayOHL) { todayOHL = (ITodayOHL) obj; } if (obj instanceof IBook) { book = (IBook) obj; } } public IPrice getPrice() { return price; } public void setPrice(IPrice price) { this.price = price; } public ITrade getTrade() { return trade; } public void setTrade(ITrade trade) { this.trade = trade; } public IQuote getQuote() { return quote; } public void setQuote(IQuote quote) { this.quote = quote; } public ITodayOHL getTodayOHL() { return todayOHL; } public void setTodayOHL(ITodayOHL todayOHL) { this.todayOHL = todayOHL; } public ILastClose getLastClose() { return lastClose; } public void setLastClose(ILastClose lastClose) { this.lastClose = lastClose; } public IBook getBook() { return book; } public void setBook(IBook book) { this.book = book; } public Long getPosition() { return position; } public Double getPurchasePrice() { return purchasePrice; } /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Object getAdapter(Class adapter) { if (security != null) { Object obj = security.getAdapter(adapter); if (obj != null) { return obj; } } if (adapter.isAssignableFrom(Holding.class)) { return new Holding() { @Override public Long getPosition() { return WatchListViewItem.this.position; } @Override public void setPosition(Long position) { changeSupport.firePropertyChange(PROP_QUANTITY, WatchListViewItem.this.position, WatchListViewItem.this.position = position); } @Override public Double getPurchasePrice() { return WatchListViewItem.this.purchasePrice; } @Override public void setPurchasePrice(Double purchasePrice) { changeSupport.firePropertyChange(WatchListViewItem.PROP_PRICE, WatchListViewItem.this.purchasePrice, WatchListViewItem.this.purchasePrice = purchasePrice); } }; } if (adapter.isAssignableFrom(IPrice.class)) { return price; } if (adapter.isAssignableFrom(ITrade.class)) { return trade; } if (adapter.isAssignableFrom(IQuote.class)) { return quote; } if (adapter.isAssignableFrom(ITodayOHL.class)) { return todayOHL; } if (adapter.isAssignableFrom(ILastClose.class)) { return lastClose; } if (adapter.isAssignableFrom(IBook.class)) { return book; } if (adapter.isAssignableFrom(element.getClass())) { return element; } Object result = element.getAdapter(adapter); if (result != null) { return result; } result = parent.getAdapter(adapter); if (result != null) { return result; } if (adapter.isAssignableFrom(getClass())) { return this; } return null; } }