package org.marketcetera.photon.marketdata.ui;
import java.util.concurrent.atomic.AtomicBoolean;
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.marketcetera.photon.marketdata.IMarketDataManager;
import org.marketcetera.util.misc.ClassVersion;
/* $License$ */
/**
* Reconnects the market data connection.
*
* @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a>
* @version $Id: ReconnectMarketDataJob.java 16901 2014-05-11 16:14:11Z colin $
* @since 2.4.0
*/
@ClassVersion("$Id: ReconnectMarketDataJob.java 16901 2014-05-11 16:14:11Z colin $")
public class ReconnectMarketDataJob
extends Job
{
/**
* Create a new ReconnectMarketDataJob instance.
*/
public ReconnectMarketDataJob()
{
super("Connecting to Market Data Nexus");
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.jobs.Job#shouldSchedule()
*/
@Override
public boolean shouldSchedule()
{
return sScheduled.compareAndSet(false,
true);
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected IStatus run(IProgressMonitor inArg0)
{
try {
marketDataManager.reconnectFeed();
return Status.OK_STATUS;
} catch (Exception e) {
return Status.CANCEL_STATUS;
} finally {
sScheduled.set(false);
}
}
/**
* Sets the market data manager value.
*
* @param inMarketDataManager an <code>IMarketDataManager</code> value
*/
public void setMarketDataManager(IMarketDataManager inMarketDataManager)
{
marketDataManager = inMarketDataManager;
}
/**
* market data manager value
*/
private IMarketDataManager marketDataManager;
/**
* indicates if a current reconnection job is scheduled or not
*/
private static final AtomicBoolean sScheduled = new AtomicBoolean();
}