From e848ddae9959cfd64bd43a0637e6474a256952e3 Mon Sep 17 00:00:00 2001 From: Colin DuPlantis Date: Thu, 16 Mar 2023 13:22:30 -0700 Subject: [PATCH] MATP-1102 Add strategy message events --- .../ui/strategy/view/StrategyView.java | 5 +- .../strategy/events/StrategyMessageEvent.java | 18 ++++ .../events/SimpleStrategyMessageEvent.java | 88 +++++++++++++++++++ .../strategy/StrategyRpcUtil.java | 16 ++++ .../src/main/proto/rpc_strategy_types.proto | 2 + .../src/test/resources/code-generator.xml | 4 +- .../strategy/StrategyServiceImpl.java | 2 + 7 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 strategy/strategy-api/src/main/java/org/marketcetera/strategy/events/StrategyMessageEvent.java create mode 100644 strategy/strategy-core/src/main/java/org/marketcetera/strategy/events/SimpleStrategyMessageEvent.java diff --git a/photon/src/main/java/org/marketcetera/ui/strategy/view/StrategyView.java b/photon/src/main/java/org/marketcetera/ui/strategy/view/StrategyView.java index 60c4cd124d..f760377c67 100644 --- a/photon/src/main/java/org/marketcetera/ui/strategy/view/StrategyView.java +++ b/photon/src/main/java/org/marketcetera/ui/strategy/view/StrategyView.java @@ -30,6 +30,7 @@ import org.marketcetera.strategy.StrategyPermissions; import org.marketcetera.strategy.StrategyStatus; import org.marketcetera.strategy.events.StrategyEvent; +import org.marketcetera.strategy.events.StrategyMessageEvent; import org.marketcetera.strategy.events.StrategyStartFailedEvent; import org.marketcetera.strategy.events.StrategyStartedEvent; import org.marketcetera.strategy.events.StrategyStatusChangedEvent; @@ -223,13 +224,15 @@ public void run() displayStrategyInstance.strategyStatusProperty().set(event.getNewValue()); } else if(inEvent instanceof StrategyUnloadedEvent) { strategyTable.getItems().remove(displayStrategyInstance); + } else if(inEvent instanceof StrategyMessageEvent) { + updateEvents(); } }} ); } else { updateStrategies(); + updateEvents(); } - updateEvents(); } /* (non-Javadoc) * @see org.marketcetera.ui.view.ContentView#getScene() diff --git a/strategy/strategy-api/src/main/java/org/marketcetera/strategy/events/StrategyMessageEvent.java b/strategy/strategy-api/src/main/java/org/marketcetera/strategy/events/StrategyMessageEvent.java new file mode 100644 index 0000000000..52360b4263 --- /dev/null +++ b/strategy/strategy-api/src/main/java/org/marketcetera/strategy/events/StrategyMessageEvent.java @@ -0,0 +1,18 @@ +// +// this file is automatically generated +// +package org.marketcetera.strategy.events; + +/* $License$ */ + +/** + * Indicates that a strategy message was added. + * + * @author Colin DuPlantis + * @version $Id$ + * @since $Release$ + */ +public interface StrategyMessageEvent + extends org.marketcetera.strategy.HasStrategyMessage,org.marketcetera.strategy.events.StrategyEvent +{ +} diff --git a/strategy/strategy-core/src/main/java/org/marketcetera/strategy/events/SimpleStrategyMessageEvent.java b/strategy/strategy-core/src/main/java/org/marketcetera/strategy/events/SimpleStrategyMessageEvent.java new file mode 100644 index 0000000000..67ed4cdbc1 --- /dev/null +++ b/strategy/strategy-core/src/main/java/org/marketcetera/strategy/events/SimpleStrategyMessageEvent.java @@ -0,0 +1,88 @@ +// +// this file is automatically generated +// +package org.marketcetera.strategy.events; + +import org.marketcetera.core.Preserve; +import org.marketcetera.strategy.StrategyMessage; + +/* $License$ */ + +/** + * Indicates that a strategy message was added. + * + * @author Colin DuPlantis + * @version $Id$ + * @since $Release$ + */ +@Preserve +public class SimpleStrategyMessageEvent + implements StrategyMessageEvent +{ + /** + * Create a new SimpleStrategyMessageEvent instance. + */ + public SimpleStrategyMessageEvent() {} + /** + * Create a new SimpleStrategyMessageEvent instance. + * + * @param inStrategyMessage a StrategyMessage value + */ + public SimpleStrategyMessageEvent(StrategyMessage inStrategyMessage) + { + strategyMessage = inStrategyMessage; + } + /** + * Get the strategyMessage value. + * + * @return an org.marketcetera.strategy.StrategyMessage value + */ + @Override + public org.marketcetera.strategy.StrategyMessage getStrategyMessage() + { + return strategyMessage; + } + /** + * Set the strategyMessage value. + * + * @param inStrategyMessage an org.marketcetera.strategy.StrategyMessage value + */ + public void setStrategyMessage(org.marketcetera.strategy.StrategyMessage inStrategyMessage) + { + strategyMessage = inStrategyMessage; + } + /** + * Get the strategyInstance value. + * + * @return an org.marketcetera.strategy.StrategyInstance value + */ + @Override + public org.marketcetera.strategy.StrategyInstance getStrategyInstance() + { + return strategyMessage.getStrategyInstance(); + } + /** + * Set the strategyInstance value. + * + * @param inStrategyInstance an org.marketcetera.strategy.StrategyInstance value + */ + public void setStrategyInstance(org.marketcetera.strategy.StrategyInstance inStrategyInstance) + { + strategyMessage.setStrategyInstance(inStrategyInstance); + } + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("StrategyMessageEvent [") + .append("strategyMessage=").append(strategyMessage).append("]"); + return builder.toString(); + } + /** + * strategy message that was created + */ + private org.marketcetera.strategy.StrategyMessage strategyMessage; +} diff --git a/strategy/strategy-rpc-core/src/main/java/org/marketcetera/strategy/StrategyRpcUtil.java b/strategy/strategy-rpc-core/src/main/java/org/marketcetera/strategy/StrategyRpcUtil.java index ebff290df7..b56efc685a 100644 --- a/strategy/strategy-rpc-core/src/main/java/org/marketcetera/strategy/StrategyRpcUtil.java +++ b/strategy/strategy-rpc-core/src/main/java/org/marketcetera/strategy/StrategyRpcUtil.java @@ -8,6 +8,7 @@ import org.marketcetera.admin.UserFactory; import org.marketcetera.core.Preserve; import org.marketcetera.rpc.base.BaseRpcUtil; +import org.marketcetera.strategy.events.SimpleStrategyMessageEvent; import org.marketcetera.strategy.events.SimpleStrategyStartFailedEvent; import org.marketcetera.strategy.events.SimpleStrategyStartedEvent; import org.marketcetera.strategy.events.SimpleStrategyStatusChangedEvent; @@ -16,6 +17,7 @@ import org.marketcetera.strategy.events.SimpleStrategyUploadFailedEvent; import org.marketcetera.strategy.events.SimpleStrategyUploadSucceededEvent; import org.marketcetera.strategy.events.StrategyEvent; +import org.marketcetera.strategy.events.StrategyMessageEvent; import org.marketcetera.strategy.events.StrategyStartFailedEvent; import org.marketcetera.strategy.events.StrategyStartedEvent; import org.marketcetera.strategy.events.StrategyStatusChangedEvent; @@ -212,6 +214,11 @@ public static void setStrategyEvent(StrategyEvent inStrategyEvent, StrategyStatusChangedEvent statusChangedEvent = (StrategyStatusChangedEvent)inStrategyEvent; getRpcStrategyStatus(statusChangedEvent.getNewValue()).ifPresent(rpcStrategyStatus -> rpcEventBuilder.setNewStatusValue(rpcStrategyStatus)); getRpcStrategyStatus(statusChangedEvent.getOldValue()).ifPresent(rpcStrategyStatus -> rpcEventBuilder.setOldStatusValue(rpcStrategyStatus)); + } else if(inStrategyEvent instanceof StrategyMessageEvent) { + StrategyMessageEvent messageEvent = (StrategyMessageEvent)inStrategyEvent; + rpcEventBuilder.setMessage(messageEvent.getStrategyMessage().getMessage()); + getRpcStrategyMessageSeverity(messageEvent.getStrategyMessage().getSeverity()).ifPresent(rpcSeverity -> rpcEventBuilder.setSeverity(rpcSeverity)); + BaseRpcUtil.getTimestampValue(messageEvent.getStrategyMessage().getMessageTimestamp()).ifPresent(rpcTimestamp -> rpcEventBuilder.setMessageTimestamp(rpcTimestamp)); } else { throw new UnsupportedOperationException("Unexpected strategy event type: " + inStrategyEvent.getClass().getSimpleName()); } @@ -238,6 +245,15 @@ public static StrategyEvent getStrategyEvent(StrategyRpc.StrategyEventListenerRe if(strategyInstanceOption.isPresent()) { StrategyInstance strategyInstance = strategyInstanceOption.get(); switch(rpcEvent.getEventType()) { + case "SimpleStrategyMessageEvent": + SimpleStrategyMessageEvent messageEvent = new SimpleStrategyMessageEvent(); + SimpleStrategyMessage message = new SimpleStrategyMessage(); + message.setMessage(rpcEvent.getMessage()); + getStrategyMessageSeverity(rpcEvent.getSeverity()).ifPresent(severity -> message.setSeverity(severity)); + BaseRpcUtil.getDateValue(rpcEvent.getMessageTimestamp()).ifPresent(timestamp -> message.setMessageTimestamp(timestamp)); + message.setStrategyInstance(strategyInstance); + messageEvent.setStrategyMessage(message); + return messageEvent; case "SimpleStrategyStartedEvent": SimpleStrategyStartedEvent startEvent = new SimpleStrategyStartedEvent(); startEvent.setStrategyInstance(strategyInstance); diff --git a/strategy/strategy-rpc-core/src/main/proto/rpc_strategy_types.proto b/strategy/strategy-rpc-core/src/main/proto/rpc_strategy_types.proto index e1e000ed87..cc215c9626 100644 --- a/strategy/strategy-rpc-core/src/main/proto/rpc_strategy_types.proto +++ b/strategy/strategy-rpc-core/src/main/proto/rpc_strategy_types.proto @@ -68,4 +68,6 @@ message StrategyEvent { string eventType = 3; StrategyStatus oldStatusValue = 4; StrategyStatus newStatusValue = 5; + StrategyMessageSeverity severity = 6; + google.protobuf.Timestamp messageTimestamp = 7; } diff --git a/strategy/strategy-rpc-core/src/test/resources/code-generator.xml b/strategy/strategy-rpc-core/src/test/resources/code-generator.xml index cb67cdd4d0..7540d9f186 100644 --- a/strategy/strategy-rpc-core/src/test/resources/code-generator.xml +++ b/strategy/strategy-rpc-core/src/test/resources/code-generator.xml @@ -63,13 +63,15 @@ type="org.marketcetera.strategy.StrategyStatus" pojoType="org.marketcetera.strategy.StrategyStatus" apiType="org.marketcetera.strategy.StrategyStatus"/> - + <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> + diff --git a/strategy/strategy-server/src/main/java/org/marketcetera/strategy/StrategyServiceImpl.java b/strategy/strategy-server/src/main/java/org/marketcetera/strategy/StrategyServiceImpl.java index 04064c5fef..1ee07072bd 100644 --- a/strategy/strategy-server/src/main/java/org/marketcetera/strategy/StrategyServiceImpl.java +++ b/strategy/strategy-server/src/main/java/org/marketcetera/strategy/StrategyServiceImpl.java @@ -44,6 +44,7 @@ import org.marketcetera.strategy.dao.QPersistentStrategyMessage; import org.marketcetera.strategy.dao.StrategyInstanceDao; import org.marketcetera.strategy.dao.StrategyMessageDao; +import org.marketcetera.strategy.events.SimpleStrategyMessageEvent; import org.marketcetera.strategy.events.SimpleStrategyStartFailedEvent; import org.marketcetera.strategy.events.SimpleStrategyStartedEvent; import org.marketcetera.strategy.events.SimpleStrategyStatusChangedEvent; @@ -501,6 +502,7 @@ public PersistentStrategyMessage createStrategyMessage(StrategyMessage inStrateg Validate.isTrue(strategyInstanceOption.isPresent()); strategyMessage.setStrategyInstance(strategyInstanceOption.get()); strategyMessage = strategyMessageDao.save(strategyMessage); + eventBusService.post(new SimpleStrategyMessageEvent(strategyMessage)); return strategyMessage; } /**