package org.marketcetera.photon.ui.databinding; import java.util.Collections; import org.apache.commons.lang.StringUtils; import org.marketcetera.photon.commons.databinding.ITypedObservableValue; import org.marketcetera.photon.commons.databinding.TypedObservableValueDecorator; import org.marketcetera.trade.Equity; import org.marketcetera.trade.Instrument; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * Manages and {@link Equity} binding made up of a symbol string. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: EquityObservable.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: EquityObservable.java 16154 2012-07-14 16:34:05Z colin $") public class EquityObservable extends CompoundObservableManager<ITypedObservableValue<Instrument>> { private final ITypedObservableValue<String> mSymbol; public EquityObservable(ITypedObservableValue<Instrument> instrument) { super(instrument); mSymbol = TypedObservableValueDecorator.create(String.class); init(Collections.singleton(mSymbol)); } @Override protected void updateChildren() { Instrument instrument = getParent().getTypedValue(); if (instrument instanceof Equity) { Equity equity = (Equity) instrument; setIfChanged(mSymbol, equity.getSymbol()); } else { setIfChanged(mSymbol, null); } } @Override protected void updateParent() { String symbol = mSymbol.getTypedValue(); Equity newValue = null; if (StringUtils.isNotBlank(symbol)) { newValue = new Equity(symbol); } ITypedObservableValue<Instrument> instrument = getParent(); setIfChanged(instrument, newValue); } /** * Returns an observable tied to the equity's symbol. * * @return an observable for the equity's symbol */ public ITypedObservableValue<String> observeSymbol() { return mSymbol; } }