
import com.dukascopy.api.IAccount;
import com.dukascopy.api.IBar;
import com.dukascopy.api.IContext;
import com.dukascopy.api.IEngine;
import com.dukascopy.api.IMessage;
import com.dukascopy.api.IOrder;
import com.dukascopy.api.IStrategy;
import com.dukascopy.api.ITick;
import com.dukascopy.api.Instrument;
import com.dukascopy.api.JFException;
import com.dukascopy.api.Period;
import com.dukascopy.api.system.ClientFactory;
import com.dukascopy.api.system.IClient;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.slf4j.LoggerFactory;


public class InstrumentSubscriptionTest {
    
    final String url = "https://www.dukascopy.com/client/demo/jclient/jforex.jnlp";
    final String login = "DEMO2CdqpP";
    final String password = "CdqpP";    
    
    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(InstrumentSubscriptionTest.class);    
    
    public static void main(String[] args) throws Exception {
            InstrumentSubscriptionTest testApp = new InstrumentSubscriptionTest();
            testApp.startTest();
    }

    private void startTest() throws Exception {
        
        IClient client = ClientFactory.getDefaultInstance();

        client.connect(url, login, password);

        int i = 10;
        while (i > 0 && !client.isConnected()) {
                Thread.sleep(1000);
                i--;
        }
        
        if (!client.isConnected()) {System.exit(1);}
        
        Set<Instrument> instrumentsClient = new HashSet();
        instrumentsClient.add(Instrument.EURSEK);
        client.setSubscribedInstruments(instrumentsClient);
        Thread.sleep(5000);
        
        System.out.println("Subscribed instruments [IClinet]: " + client.getSubscribedInstruments());
        
        client.startStrategy(new IStrategy(){
           
            IContext context;
            
            public void onStart(IContext context) throws JFException {
                this.context = context;     
                Set<Instrument> instrumentsContext = new HashSet();
                instrumentsContext.add(Instrument.EURJPY);
                instrumentsContext.add(Instrument.GBPUSD);
                context.setSubscribedInstruments(instrumentsContext);
            }

            public void onTick(Instrument instrument, ITick tick) throws JFException {
                System.out.println(
                        instrument.name() 
                        + ", subscribed instruments [IContext]: "
                        + context.getSubscribedInstruments() + " " 
                        + context.getSubscribedInstruments().size());         
            }

            public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}

            public void onMessage(IMessage message) throws JFException {}

            public void onAccount(IAccount account) throws JFException {}

            public void onStop() throws JFException {}
            
        });  
    }    
}
