/* * 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.ats.simulation; import org.eclipse.core.runtime.ListenerList; import org.eclipsetrader.core.trading.BrokerException; import org.eclipsetrader.core.trading.IBroker; import org.eclipsetrader.core.trading.IOrder; import org.eclipsetrader.core.trading.IOrderMonitor; import org.eclipsetrader.core.trading.IOrderMonitorListener; import org.eclipsetrader.core.trading.IOrderStatus; import org.eclipsetrader.core.trading.OrderMonitorEvent; public class OrderMonitor implements IOrderMonitor { private String id; private final Broker broker; private final IOrder order; private IOrderStatus status; private Long filledQuantity; private Double averagePrice; private Transaction transaction; private final ListenerList listeners = new ListenerList(ListenerList.IDENTITY); public OrderMonitor(Broker broker, IOrder order) { this.broker = broker; this.order = order; this.status = IOrderStatus.New; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#getId() */ @Override public String getId() { return id; } public void setId(String id) { this.id = id; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#getOrder() */ @Override public IOrder getOrder() { return order; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#getBrokerConnector() */ @Override public IBroker getBrokerConnector() { return broker; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#addOrderMonitorListener(org.eclipsetrader.core.trading.IOrderMonitorListener) */ @Override public void addOrderMonitorListener(IOrderMonitorListener listener) { listeners.add(listener); } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#removeOrderMonitorListener(org.eclipsetrader.core.trading.IOrderMonitorListener) */ @Override public void removeOrderMonitorListener(IOrderMonitorListener listener) { listeners.remove(listener); } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#submit() */ @Override public void submit() throws BrokerException { } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#cancel() */ @Override public void cancel() throws BrokerException { } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#allowModify() */ @Override public boolean allowModify() { return false; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#modify(org.eclipsetrader.core.trading.IOrder) */ @Override public void modify(IOrder order) throws BrokerException { throw new UnsupportedOperationException("Modify not allowed"); } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#getStatus() */ @Override public IOrderStatus getStatus() { return status; } public void setStatus(IOrderStatus status) { this.status = status; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#getFilledQuantity() */ @Override public Long getFilledQuantity() { return filledQuantity; } public void setFilledQuantity(Long filledQuantity) { this.filledQuantity = filledQuantity; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#getAveragePrice() */ @Override public Double getAveragePrice() { return averagePrice; } public void setAveragePrice(Double averagePrice) { this.averagePrice = averagePrice; } /* (non-Javadoc) * @see org.eclipsetrader.core.trading.IOrderMonitor#getMessage() */ @Override public String getMessage() { return null; } public Transaction getTransaction() { return transaction; } public void setTransaction(Transaction transaction) { this.transaction = transaction; } protected void fireOrderCompletedEvent() { OrderMonitorEvent event = new OrderMonitorEvent(this, order); Object[] l = listeners.getListeners(); for (int i = 0; i < l.length; i++) { try { ((IOrderMonitorListener) l[i]).orderCompleted(event); } catch (Throwable e) { e.printStackTrace(); } } } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "OrderMonitor: status=" + getStatus() + ", filledQuantity=" + getFilledQuantity() + ", averagePrice=" + getAveragePrice() + " [" + order.toString() + "]"; } }