package org.marketcetera.photon.ui.marketdata;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.marketcetera.marketdata.FeedStatus;
import org.marketcetera.photon.Messages;
import org.marketcetera.photon.PhotonPlugin;
import org.marketcetera.photon.marketdata.IFeedStatusChangedListener;
import org.marketcetera.photon.marketdata.IMarketDataManager;
import org.marketcetera.photon.ui.StatusIndicatorContributionItem;
import org.marketcetera.util.log.I18NMessage1P;
import org.marketcetera.util.misc.ClassVersion;
/* $License$ */
/**
* Contribution item that displays the status of the active market data feed.
*
* @author <a href="mailto:will@marketcetera.com">Will Horn</a>
* @version $Id: MarketDataStatusIndicator.java 16854 2014-03-12 01:54:42Z colin $
* @since 1.0.0
*/
@ClassVersion("$Id: MarketDataStatusIndicator.java 16854 2014-03-12 01:54:42Z colin $")//$NON-NLS-1$
public class MarketDataStatusIndicator extends StatusIndicatorContributionItem {
private Label imageLabel;
private final IMarketDataManager mMarketDataManager = PhotonPlugin
.getDefault().getMarketDataManager();
private IFeedStatusChangedListener mListener;
@Override
protected Control createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
FillLayout layout = new FillLayout();
layout.marginWidth = 2;
composite.setLayout(layout);
imageLabel = new Label(composite, SWT.NONE);
mListener = new IFeedStatusChangedListener() {
@Override
public void feedStatusChanged(IFeedStatusEvent event) {
imageLabel.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
updateLabel();
}
});
}
};
mMarketDataManager.addActiveFeedStatusChangedListener(mListener);
updateLabel();
return composite;
}
@Override
public void dispose() {
if (mListener != null) {
mMarketDataManager
.removeActiveFeedStatusChangedListener(mListener);
mListener = null;
}
super.dispose();
}
private void updateLabel() {
FeedStatus newStatus = mMarketDataManager.getFeedStatus();
String name = "Market Data Nexus";//mMarketDataManager.getActiveFeedName();
Image image;
I18NMessage1P tooltip;
switch (newStatus) {
case AVAILABLE:
image = getOnImage();
tooltip = Messages.MARKET_DATA_STATUS_ON_TOOLTIP;
break;
case ERROR:
image = getErrorImage();
tooltip = Messages.MARKET_DATA_STATUS_ERROR_TOOLTIP;
break;
default:
image = getOffImage();
tooltip = Messages.MARKET_DATA_STATUS_OFF_TOOLTIP;
break;
}
imageLabel.setImage(image);
if (name == null) {
imageLabel.setToolTipText(Messages.MARKET_DATA_STATUS_NO_FEED_TOOLTIP.getText());
} else {
imageLabel.setToolTipText(tooltip.getText(name));
}
}
}