package org.marketcetera.photon.ui;
import org.eclipse.core.databinding.observable.list.WritableList;
import org.eclipse.jface.databinding.viewers.ObservableListContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.marketcetera.core.ClassVersion;
import org.marketcetera.photon.Messages;
import org.marketcetera.photon.PhotonPlugin;
import quickfix.Message;
import quickfix.field.MDEntryType;
import quickfix.field.NoMDEntries;
import quickfix.fix42.MarketDataSnapshotFullRefresh;
/* $License$ */
/**
* Organizes Level II or Depth-of-Book data to be displayed in a UI list.
*
* @author gmiller
* @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a>
* @version $Id: Level2ContentProvider.java 16154 2012-07-14 16:34:05Z colin $
* @since 0.6.0
*/
@ClassVersion("$Id: Level2ContentProvider.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$
public class Level2ContentProvider
extends ObservableListContentProvider
implements Messages
{
/**
* stores the last message received
*/
private Message currentMessage;
/**
* the most recent state of the display list
*/
private WritableList currentList;
/**
* indicates the type of provider, containing a <code>MDEntryType</code>
*/
private final char entryType;
/**
* the list to which the UI widget is bound
*/
private final WritableList mViewList;
/**
* Create a new Level2ContentProvider instance.
*
* @param entryType a <code>char</code> value indicating the <code>MDEntryType</code> to use
* @param inViewList a <code>WritableList</code> value containing the <code>Collection</code> to which the display widget is bound
*/
public Level2ContentProvider(char entryType,
WritableList inViewList)
{
this.entryType = entryType;
mViewList = inViewList;
}
@Override
public void inputChanged(Viewer viewer,
Object oldInput,
Object newInput)
{
if(newInput instanceof Message) {
currentMessage = (Message)newInput;
try {
int noEntries = currentMessage.getInt(NoMDEntries.FIELD);
for (int i = 0; i < noEntries; i++) {
MarketDataSnapshotFullRefresh.NoMDEntries group = new MarketDataSnapshotFullRefresh.NoMDEntries();
currentMessage.getGroup(i+1, group);
char currentEntryType = group.getChar(MDEntryType.FIELD);
if (entryType==currentEntryType) {
mViewList.add(group);
}
}
} catch (Throwable ex){
PhotonPlugin.getMainConsoleLogger().error(CANNOT_PARSE_LEVEL_TWO_DATA.getText());
}
}
super.inputChanged(viewer,
currentList,
mViewList);
currentList = mViewList;
}
}