All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.marketcetera.marketdata.yahoo.YahooFeed Maven / Gradle / Ivy

There is a newer version: 4.1.1
Show newest version
package org.marketcetera.marketdata.yahoo;

import static org.marketcetera.marketdata.AssetClass.EQUITY;
import static org.marketcetera.marketdata.AssetClass.FUTURE;
import static org.marketcetera.marketdata.AssetClass.OPTION;
import static org.marketcetera.marketdata.Capability.EVENT_BOUNDARY;
import static org.marketcetera.marketdata.Capability.LATEST_TICK;
import static org.marketcetera.marketdata.Capability.MARKET_STAT;
import static org.marketcetera.marketdata.Capability.TOP_OF_BOOK;

import java.util.*;
import java.util.concurrent.atomic.AtomicLong;

import javax.annotation.concurrent.GuardedBy;

import org.marketcetera.core.NoMoreIDsException;
import org.marketcetera.marketdata.*;
import org.marketcetera.util.misc.ClassVersion;

/* $License$ */

/**
 * Market data feed implementation for the Yahoo market data supplier.
 *
 * @author Colin DuPlantis
 * @version $Id: YahooFeed.java 16154 2012-07-14 16:34:05Z colin $
 * @since 2.1.4
 */
@ClassVersion("$Id: YahooFeed.java 16154 2012-07-14 16:34:05Z colin $")
class YahooFeed
        extends AbstractMarketDataFeed,
                                       YahooFeed>
        implements YahooFeedServices
{
    /* (non-Javadoc)
     * @see org.marketcetera.marketdata.MarketDataFeed#getCapabilities()
     */
    @Override
    public Set getCapabilities()
    {
        return capabilities;
    }
    /* (non-Javadoc)
     * @see org.marketcetera.marketdata.MarketDataFeed#getSupportedAssetClasses()
     */
    @Override
    public Set getSupportedAssetClasses()
    {
        return assetClasses;
    }
    /* (non-Javadoc)
     * @see org.marketcetera.marketdata.yahoo.FeedServices#doDataReceived(java.lang.String, java.lang.Object)
     */
    @Override
    public void doDataReceived(String inHandle,
                               Object inData)
    {
        dataReceived(inHandle,
                     inData);
    }
    /* (non-Javadoc)
     * @see org.marketcetera.marketdata.yahoo.FeedServices#getRefreshInterval()
     */
    @Override
    public int getRefreshInterval()
    {
        return refreshInterval;
    }
    /**
     * Resets the request counter.
     */
    void resetCounter()
    {
        client.resetRequestcounter();
    }
    /**
     * Gets the current request counter. 
     *
     * @return a long value
     */
    long getRequestCounter()
    {
        return client.getRequestCounter();
    }
    /**
     * Create a new YahooFeed instance.
     *
     * @param inProviderName a String value
     * @throws NoMoreIDsException if the feed cannot be constructed
     */
    YahooFeed(String inProviderName,
              YahooClientFactory inFactory)
            throws NoMoreIDsException
    {
        super(FeedType.DELAYED,
              inProviderName);
        client = inFactory.getClient(this);
    }
    /**
     * Sets the refresh interval for retrieving market data.
     * 
     * 

Changing this value takes effect immediately. * * @param inRefreshInterval an int value */ void setRefreshInterval(int inRefreshInterval) { refreshInterval = inRefreshInterval; } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#doCancel(java.lang.String) */ @Override protected void doCancel(String inHandle) { synchronized(requests) { YahooRequest request = requests.remove(inHandle); if(request != null) { client.cancel(request); } } } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#doLogin(org.marketcetera.marketdata.MarketDataFeedCredentials) */ @Override protected boolean doLogin(YahooFeedCredentials inCredentials) { return client.login(inCredentials); } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#doLogout() */ @Override protected void doLogout() { client.logout(); } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#isLoggedIn() */ @Override protected boolean isLoggedIn() { return client.isLoggedIn(); } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#doMarketDataRequest(java.lang.Object) */ @Override protected List doMarketDataRequest(List inRequests) throws FeedException { List handles = new ArrayList(); synchronized(requests) { for(YahooRequest request : inRequests) { String handle = generateHandle(); handles.add(handle); request.setHandle(handle); requests.put(handle, request); client.request(request); } return handles; } } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#generateToken(org.marketcetera.marketdata.MarketDataFeedTokenSpec) */ @Override protected YahooFeedToken generateToken(MarketDataFeedTokenSpec inTokenSpec) throws FeedException { return new YahooFeedToken(inTokenSpec, this); } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#getEventTranslator() */ @Override protected YahooFeedEventTranslator getEventTranslator() { return YahooFeedEventTranslator.INSTANCE; } /* (non-Javadoc) * @see org.marketcetera.marketdata.AbstractMarketDataFeed#getMessageTranslator() */ @Override protected YahooFeedMessageTranslator getMessageTranslator() { return YahooFeedMessageTranslator.INSTANCE; } /** * Generates a request handle. * * @return a String value */ private String generateHandle() { return String.format("yahoo-%s", //$NON-NLS-1$ counter.incrementAndGet()); } /** * default interval at which to refresh the market data */ private volatile int refreshInterval = 250; /** * asset classes supported by this adapter */ private static final Set assetClasses = new HashSet(Arrays.asList(new AssetClass[] { EQUITY,OPTION,FUTURE })); /** * capabilities of this adapter */ private static final Set capabilities = new HashSet(Arrays.asList(new Capability[] { TOP_OF_BOOK,LATEST_TICK,MARKET_STAT,EVENT_BOUNDARY })); /** * stores the active requests */ @GuardedBy("requests") private final Map requests = new HashMap(); /** * counter used to count requests */ private final AtomicLong counter = new AtomicLong(0); /** * client implementation to use */ private final YahooClient client; }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy