/*
* Copyright (c) 2004-2011 Marco Maccaferri and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Marco Maccaferri - initial API and implementation
*/
package org.eclipsetrader.core.internal.ats.repository;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipsetrader.core.instruments.ISecurity;
import org.eclipsetrader.core.internal.CoreActivator;
import org.eclipsetrader.core.trading.BrokerException;
import org.eclipsetrader.core.trading.IAccount;
import org.eclipsetrader.core.trading.IBroker;
import org.eclipsetrader.core.trading.IOrder;
import org.eclipsetrader.core.trading.IOrderChangeListener;
import org.eclipsetrader.core.trading.IOrderMonitor;
import org.eclipsetrader.core.trading.IOrderRoute;
import org.eclipsetrader.core.trading.IOrderSide;
import org.eclipsetrader.core.trading.IOrderType;
import org.eclipsetrader.core.trading.IOrderValidity;
import org.eclipsetrader.core.trading.ITradingService;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
public class BrokerAdapter extends XmlAdapter<String, IBroker> {
public class FailsafeBroker implements IBroker {
private String id;
public FailsafeBroker(String id) {
this.id = id;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getId()
*/
@Override
public String getId() {
return id;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getName()
*/
@Override
public String getName() {
return id;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#canTrade(org.eclipsetrader.core.instruments.ISecurity)
*/
@Override
public boolean canTrade(ISecurity security) {
return false;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#connect()
*/
@Override
public void connect() {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#disconnect()
*/
@Override
public void disconnect() {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getAllowedSides()
*/
@Override
public IOrderSide[] getAllowedSides() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getAllowedTypes()
*/
@Override
public IOrderType[] getAllowedTypes() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getAllowedValidity()
*/
@Override
public IOrderValidity[] getAllowedValidity() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getAllowedRoutes()
*/
@Override
public IOrderRoute[] getAllowedRoutes() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getOrders()
*/
@Override
public IOrderMonitor[] getOrders() {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#prepareOrder(org.eclipsetrader.core.trading.IOrder)
*/
@Override
public IOrderMonitor prepareOrder(IOrder order) throws BrokerException {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getSecurityFromSymbol(java.lang.String)
*/
@Override
public ISecurity getSecurityFromSymbol(String symbol) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getSymbolFromSecurity(org.eclipsetrader.core.instruments.ISecurity)
*/
@Override
public String getSymbolFromSecurity(ISecurity security) {
return null;
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#addOrderChangeListener(org.eclipsetrader.core.trading.IOrderChangeListener)
*/
@Override
public void addOrderChangeListener(IOrderChangeListener listener) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#removeOrderChangeListener(org.eclipsetrader.core.trading.IOrderChangeListener)
*/
@Override
public void removeOrderChangeListener(IOrderChangeListener listener) {
}
/* (non-Javadoc)
* @see org.eclipsetrader.core.trading.IBroker#getAccounts()
*/
@Override
public IAccount[] getAccounts() {
return new IAccount[0];
}
}
public BrokerAdapter() {
}
/* (non-Javadoc)
* @see javax.xml.bind.annotation.adapters.XmlAdapter#marshal(java.lang.Object)
*/
@Override
public String marshal(IBroker v) throws Exception {
return v != null ? v.getId() : null;
}
/* (non-Javadoc)
* @see javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal(java.lang.Object)
*/
@Override
public IBroker unmarshal(String v) throws Exception {
if (v == null) {
return null;
}
IBroker connector = null;
try {
BundleContext context = CoreActivator.getDefault().getBundle().getBundleContext();
ServiceReference serviceReference = context.getServiceReference(ITradingService.class.getName());
ITradingService tradingService = (ITradingService) context.getService(serviceReference);
connector = tradingService.getBroker(v);
context.ungetService(serviceReference);
} catch (Exception e) {
Status status = new Status(IStatus.ERROR, CoreActivator.PLUGIN_ID, 0, "Error reading feed service", e);
CoreActivator.log(status);
}
if (connector == null) {
Status status = new Status(IStatus.WARNING, CoreActivator.PLUGIN_ID, 0, "Failed to load broker " + v, null);
CoreActivator.log(status);
return new FailsafeBroker(v);
}
return connector;
}
}