diff --git a/src/main/java/com/jforex/programming/order/event/OrderEvent.java b/src/main/java/com/jforex/programming/order/event/OrderEvent.java index 2383cc06..59d68ea7 100644 --- a/src/main/java/com/jforex/programming/order/event/OrderEvent.java +++ b/src/main/java/com/jforex/programming/order/event/OrderEvent.java @@ -5,6 +5,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import com.dukascopy.api.IMessage; import com.dukascopy.api.IOrder; /** @@ -16,13 +17,16 @@ public final class OrderEvent { private final IOrder order; + private final IMessage message; private final OrderEventType type; private final boolean isInternal; public OrderEvent(final IOrder order, + final IMessage message, final OrderEventType type, final boolean isInternal) { this.order = order; + this.message = message; this.type = type; this.isInternal = isInternal; } @@ -36,6 +40,15 @@ public final IOrder order() { return order; } + /** + * Returns the message instance of this event. + * + * @return the order + */ + public final IMessage message() { + return message; + } + /** * Returns the type of this event. * @@ -61,6 +74,7 @@ public final boolean isInternal() { public int hashCode() { final HashCodeBuilder builder = new HashCodeBuilder(); builder.append(order); + builder.append(message); builder.append(type); builder.append(isInternal); @@ -79,6 +93,7 @@ public boolean equals(final Object obj) { final OrderEvent other = (OrderEvent) obj; final EqualsBuilder builder = new EqualsBuilder(); builder.append(order, other.order); + builder.append(message, other.message); builder.append(type, other.type); builder.append(isInternal, other.isInternal); diff --git a/src/main/java/com/jforex/programming/order/event/OrderEventFactory.java b/src/main/java/com/jforex/programming/order/event/OrderEventFactory.java index 08984800..f3bc8f7e 100644 --- a/src/main/java/com/jforex/programming/order/event/OrderEventFactory.java +++ b/src/main/java/com/jforex/programming/order/event/OrderEventFactory.java @@ -35,7 +35,9 @@ private void registerOrderCallRequest(final OrderCallRequest orderCallRequest) { public OrderEvent fromMessage(final IMessage message) { final IOrder order = message.getOrder(); final OrderEventType orderEventType = calculateType(message); - final OrderEvent orderEvent = evaluateToOrderEvent(order, orderEventType); + final OrderEvent orderEvent = evaluateToOrderEvent(order, + message, + orderEventType); cleanUpRegisteredOrder(order); return orderEvent; @@ -49,10 +51,15 @@ private final OrderEventType calculateType(final IMessage message) { } private final OrderEvent evaluateToOrderEvent(final IOrder order, + final IMessage message, final OrderEventType orderEventType) { return callReasonByOrder.keySet().contains(order) - ? eventForInternalOrder(order, orderEventType) - : eventForExternalOrder(order, orderEventType); + ? eventForInternalOrder(order, + message, + orderEventType) + : eventForExternalOrder(order, + message, + orderEventType); } private final void cleanUpRegisteredOrder(final IOrder order) { @@ -64,19 +71,23 @@ private final void cleanUpRegisteredOrder(final IOrder order) { } private final OrderEvent eventForInternalOrder(final IOrder order, + final IMessage message, final OrderEventType rawOrderEventType) { final OrderEventType orderEventType = infoEvents.contains(rawOrderEventType) ? rawOrderEventType : eventTypeForDoneTrigger(order, rawOrderEventType); return new OrderEvent(order, + message, orderEventType, true); } private final OrderEvent eventForExternalOrder(final IOrder order, + final IMessage message, final OrderEventType orderEventType) { return new OrderEvent(order, + message, orderEventType, false); } diff --git a/src/main/java/com/jforex/programming/order/event/OrderEventGateway.java b/src/main/java/com/jforex/programming/order/event/OrderEventGateway.java index 11266259..a981c63a 100644 --- a/src/main/java/com/jforex/programming/order/event/OrderEventGateway.java +++ b/src/main/java/com/jforex/programming/order/event/OrderEventGateway.java @@ -39,6 +39,7 @@ public Observable observable() { public void importOrder(final IOrder order) { final OrderEvent orderEvent = new OrderEvent(order, + null, OrderEventType.SUBMIT_OK, true); logger.debug("Importing order " + order.getLabel() + " for " + order.getInstrument()); diff --git a/src/test/java/com/jforex/programming/order/task/test/TaskRetryTest.java b/src/test/java/com/jforex/programming/order/task/test/TaskRetryTest.java index 03afa84d..bb98a415 100644 --- a/src/test/java/com/jforex/programming/order/task/test/TaskRetryTest.java +++ b/src/test/java/com/jforex/programming/order/task/test/TaskRetryTest.java @@ -38,6 +38,7 @@ public void setUp() { private OrderEvent sendEvent(final OrderEventType orderEventType) { final OrderEvent orderEvent = new OrderEvent(buyOrderEURUSD, + messageMock, orderEventType, true); subject.onNext(orderEvent); diff --git a/src/test/java/com/jforex/programming/order/test/OrderUtilHandlerTest.java b/src/test/java/com/jforex/programming/order/test/OrderUtilHandlerTest.java index 4e781a69..5c380beb 100644 --- a/src/test/java/com/jforex/programming/order/test/OrderUtilHandlerTest.java +++ b/src/test/java/com/jforex/programming/order/test/OrderUtilHandlerTest.java @@ -85,6 +85,7 @@ public void setUpMocks() { private OrderEvent sendOrderEvent(final IOrder order, final OrderEventType orderEventType) { final OrderEvent orderEvent = new OrderEvent(order, + messageMock, orderEventType, true); orderEventSubject.onNext(orderEvent); diff --git a/src/test/java/com/jforex/programming/position/test/PositionTest.java b/src/test/java/com/jforex/programming/position/test/PositionTest.java index 48ebbee2..17c573b8 100644 --- a/src/test/java/com/jforex/programming/position/test/PositionTest.java +++ b/src/test/java/com/jforex/programming/position/test/PositionTest.java @@ -40,6 +40,7 @@ public void setUp() { private void sendOrderEvent(final IOrder order, final OrderEventType orderEventType) { final OrderEvent orderEvent = new OrderEvent(order, + messageMock, orderEventType, true); orderEventSubject.onNext(orderEvent); @@ -57,6 +58,7 @@ public void createdOrdersAreAddedWhenInternal() { public void createdOrdersAreNotAddedWhenNotInternal() { createEvents.forEach(eventType -> { orderEventSubject.onNext(new OrderEvent(buyOrderEURUSD, + messageMock, eventType, false)); assertFalse(position.contains(buyOrderEURUSD)); @@ -67,6 +69,7 @@ public void createdOrdersAreNotAddedWhenNotInternal() { public void externalOrdersAreNotAdded() { allEvents.forEach(eventType -> { orderEventSubject.onNext(new OrderEvent(buyOrderEURUSD, + messageMock, eventType, false)); assertFalse(position.contains(buyOrderEURUSD)); diff --git a/src/test/java/com/jforex/programming/test/common/CommonUtilForTest.java b/src/test/java/com/jforex/programming/test/common/CommonUtilForTest.java index 49c99f3c..6edfa012 100644 --- a/src/test/java/com/jforex/programming/test/common/CommonUtilForTest.java +++ b/src/test/java/com/jforex/programming/test/common/CommonUtilForTest.java @@ -81,6 +81,8 @@ public class CommonUtilForTest extends BDDMockito { protected TickQuoteProvider tickQuoteHandlerMock; @Mock protected BarQuoteProvider barQuoteHandlerMock; + @Mock + protected IMessage messageMock; protected JFException jfException = new JFException("JFException for test"); @@ -230,6 +232,7 @@ protected final Observable eventObservable(final OrderEvent orderEve protected final Observable eventObservable(final IOrder order, final OrderEventType type) { final OrderEvent orderEvent = new OrderEvent(order, + messageMock, type, true); return eventObservable(orderEvent); @@ -251,6 +254,7 @@ protected final void testEqualsContract(final T instance) { protected OrderEvent createEvent(final OrderEventType type) { return new OrderEvent(buyOrderEURUSD, + messageMock, type, true); }