From 60bad80c5922d686b380b4987ec92ee8d4554d67 Mon Sep 17 00:00:00 2001 From: Robert Moffat Date: Mon, 14 Sep 2020 16:22:14 +0100 Subject: [PATCH] Second commit of chat workflow --- NOTICE | 2 +- bindings/pom.xml | 7 - chat-workflow/pom.xml | 69 ++++ .../workflow/AbstractNeedsWorkflow.java | 12 + .../symphony/workflow/AbstractWorkflow.java | 119 ++++++ .../symphony/workflow/Workflow.java | 53 +++ .../workflow/content/Addressable.java | 5 + .../symphony/workflow/content/Author.java | 13 + .../symphony/workflow/content/Content.java | 35 ++ .../symphony/workflow/content/ID.java | 21 + .../symphony/workflow/content/Message.java | 51 +++ .../symphony/workflow/content/Paragraph.java | 51 +++ .../workflow/content/PastedTable.java | 16 + .../symphony/workflow/content/Room.java | 20 + .../symphony/workflow/content/RoomDef.java | 71 ++++ .../symphony/workflow/content/Tag.java | 30 ++ .../symphony/workflow/content/TagDef.java | 80 ++++ .../symphony/workflow/content/User.java | 15 + .../symphony/workflow/content/UserDef.java | 69 ++++ .../symphony/workflow/content/Word.java | 42 ++ .../symphony/workflow/form/Button.java | 42 ++ .../symphony/workflow/history/History.java | 15 + .../workflow/java/ClassBasedWorkflow.java | 275 +++++++++++++ .../workflow/java/ConfigurableWorkflow.java | 8 + .../symphony/workflow/java/Exposed.java | 17 + .../symphony/workflow/java/Work.java | 22 + .../workflow/response/AttachmentResponse.java | 28 ++ .../workflow/response/DataResponse.java | 48 +++ .../workflow/response/ErrorResponse.java | 20 + .../workflow/response/FormResponse.java | 69 ++++ .../workflow/response/MessageResponse.java | 26 ++ .../symphony/workflow/response/Response.java | 19 + .../symphony/workflow/room/Rooms.java | 16 + .../workflow/sources/symphony/Action.java | 11 + .../sources/symphony/SymphonyBot.java | 49 +++ .../symphony/SymphonyEventHandler.java | 9 + .../SymphonyWorkflowComponentsConfig.java | 54 +++ .../symphony/SymphonyWorkflowConfig.java | 108 +++++ .../workflow/sources/symphony/TagSupport.java | 103 +++++ .../elements/AbstractElementsConsumer.java | 5 + .../symphony/elements/ElementsAction.java | 104 +++++ .../symphony/elements/ElementsConsumer.java | 16 + .../symphony/elements/ElementsHandler.java | 117 ++++++ .../symphony/elements/FormConverter.java | 140 +++++++ .../elements/MethodCallElementsConsumer.java | 32 ++ .../symphony/elements/WorkflowModule.java | 92 +++++ .../edit/EditActionElementsConsumer.java | 29 ++ .../symphony/elements/edit/TableAddRow.java | 65 +++ .../elements/edit/TableDeleteRows.java | 78 ++++ .../symphony/elements/edit/TableEditRow.java | 67 +++ .../symphony/handlers/AttachmentHandler.java | 8 + .../handlers/EntityJsonConverter.java | 99 +++++ .../handlers/FormMessageMLConverter.java | 389 ++++++++++++++++++ .../symphony/handlers/ResponseHandler.java | 9 + .../handlers/SymphonyResponseHandler.java | 87 ++++ .../jersey/JerseyAttachmentHandlerConfig.java | 38 ++ .../symphony/history/MessageHistory.java | 80 ++++ .../messages/HelpMessageConsumer.java | 47 +++ .../messages/MethodCallMessageConsumer.java | 19 + .../messages/PresentationMLHandler.java | 118 ++++++ .../messages/SimpleMessageAction.java | 50 +++ .../messages/SimpleMessageConsumer.java | 18 + .../messages/SimpleMessageParser.java | 328 +++++++++++++++ .../sources/symphony/room/SymphonyRooms.java | 22 + .../symphony/room/SymphonyRoomsImpl.java | 137 ++++++ .../workflow/validation/ErrorHelp.java | 41 ++ .../main/resources/META-INF/spring.factories | 3 + .../workflow/AbstractMockSymphonyTest.java | 80 ++++ .../workflow/TestEntityJsonConversion.java | 79 ++++ .../symphony/workflow/TestFormConverter.java | 67 +++ .../symphony/workflow/TestFormMessageML.java | 148 +++++++ .../symphony/workflow/TestHistory.java | 19 + .../workflow/TestRoomAndUsersBuilder.java | 97 +++++ .../workflow/TestSimpleMessageParser.java | 71 ++++ .../workflow/TestSymphonyResponseHandler.java | 115 ++++++ .../symphony/workflow/TestTableEdit.java | 100 +++++ .../symphony/workflow/TestWorkflow.java | 80 ++++ .../symphony/workflow/fixture/TestOb3.java | 87 ++++ .../symphony/workflow/fixture/TestOb4.java | 118 ++++++ .../symphony/workflow/fixture/TestObject.java | 150 +++++++ .../workflow/fixture/TestObjects.java | 87 ++++ .../workflow/fixture/TestWorkflowConfig.java | 84 ++++ pom.xml | 3 +- 83 files changed, 5334 insertions(+), 9 deletions(-) create mode 100644 chat-workflow/pom.xml create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractNeedsWorkflow.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractWorkflow.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/Workflow.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Addressable.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Author.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Content.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/ID.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Message.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Paragraph.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/PastedTable.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Room.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/RoomDef.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Tag.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/TagDef.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/User.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/UserDef.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/content/Word.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/form/Button.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/history/History.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/java/ClassBasedWorkflow.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/java/ConfigurableWorkflow.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/java/Exposed.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/java/Work.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/response/AttachmentResponse.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/response/DataResponse.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/response/ErrorResponse.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/response/FormResponse.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/response/MessageResponse.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/response/Response.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/room/Rooms.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/Action.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/SymphonyBot.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/SymphonyEventHandler.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/SymphonyWorkflowComponentsConfig.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/SymphonyWorkflowConfig.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/TagSupport.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/AbstractElementsConsumer.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/ElementsAction.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/ElementsConsumer.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/ElementsHandler.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/FormConverter.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/MethodCallElementsConsumer.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/WorkflowModule.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/edit/EditActionElementsConsumer.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/edit/TableAddRow.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/edit/TableDeleteRows.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/elements/edit/TableEditRow.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/handlers/AttachmentHandler.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/handlers/EntityJsonConverter.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/handlers/FormMessageMLConverter.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/handlers/ResponseHandler.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/handlers/SymphonyResponseHandler.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/handlers/jersey/JerseyAttachmentHandlerConfig.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/history/MessageHistory.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/messages/HelpMessageConsumer.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/messages/MethodCallMessageConsumer.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/messages/PresentationMLHandler.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/messages/SimpleMessageAction.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/messages/SimpleMessageConsumer.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/messages/SimpleMessageParser.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/room/SymphonyRooms.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/sources/symphony/room/SymphonyRoomsImpl.java create mode 100644 chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/validation/ErrorHelp.java create mode 100644 chat-workflow/src/main/resources/META-INF/spring.factories create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/AbstractMockSymphonyTest.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestEntityJsonConversion.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestFormConverter.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestFormMessageML.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestHistory.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestRoomAndUsersBuilder.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestSimpleMessageParser.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestSymphonyResponseHandler.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestTableEdit.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/TestWorkflow.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/fixture/TestOb3.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/fixture/TestOb4.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/fixture/TestObject.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/fixture/TestObjects.java create mode 100644 chat-workflow/src/test/java/com/github/deutschebank/symphony/workflow/fixture/TestWorkflowConfig.java diff --git a/NOTICE b/NOTICE index ee156852e..4ba39e80d 100644 --- a/NOTICE +++ b/NOTICE @@ -1,4 +1,4 @@ Symphony Java Toolkit - FINOS -Copyright 2019 - 2020 Deutsche Bank AG deutsche-symphony-practice@db.com +Copyright 2019 - 2020 Deutsche Bank AG symphony-practice@list.db.com This product includes software developed at the Fintech Open Source Foundation (https://www.finos.org/) and Deutsche Bank AG. diff --git a/bindings/pom.xml b/bindings/pom.xml index e9adc6560..b93d16969 100644 --- a/bindings/pom.xml +++ b/bindings/pom.xml @@ -13,13 +13,6 @@ 4.59.1-SNAPSHOT - - - Rob Moffat - robert.moffat@db.com - - - 1.8 1.8 diff --git a/chat-workflow/pom.xml b/chat-workflow/pom.xml new file mode 100644 index 000000000..f44a1f388 --- /dev/null +++ b/chat-workflow/pom.xml @@ -0,0 +1,69 @@ + + 4.0.0 + chat-workflow + Chat Workflow + Build Workflows Using Enterprise Chat + + + com.github.deutschebank.symphony + symphony-java-client-parent + 4.59.1-SNAPSHOT + + + + 1.8 + 2.2.0.RELEASE + + + + + com.github.deutschebank.symphony + symphony-api-spring-boot-starter + 4.59.1-SNAPSHOT + + + com.github.deutschebank.symphony + symphony-java-client-entity-json + 4.59.1-SNAPSHOT + + + com.github.deutschebank.symphony + symphony-shared-stream + 4.59.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-web + ${spring-boot.version} + + + org.springframework.boot + spring-boot-starter-validation + ${spring-boot.version} + + + javax.validation + validation-api + 2.0.1.Final + + + + + org.glassfish.jersey.media + jersey-media-multipart + provided + 2.28 + + + + + org.springframework.boot + spring-boot-starter-test + test + ${spring-boot.version} + + + + + diff --git a/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractNeedsWorkflow.java b/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractNeedsWorkflow.java new file mode 100644 index 000000000..e713bd27d --- /dev/null +++ b/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractNeedsWorkflow.java @@ -0,0 +1,12 @@ +package com.github.deutschebank.symphony.workflow; + +public abstract class AbstractNeedsWorkflow { + + protected Workflow wf; + + public AbstractNeedsWorkflow(Workflow wf) { + this.wf = wf; + } + + +} diff --git a/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractWorkflow.java b/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractWorkflow.java new file mode 100644 index 000000000..a4ecc9fac --- /dev/null +++ b/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/AbstractWorkflow.java @@ -0,0 +1,119 @@ +package com.github.deutschebank.symphony.workflow; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import com.github.deutschebank.symphony.workflow.content.Addressable; +import com.github.deutschebank.symphony.workflow.content.Room; +import com.github.deutschebank.symphony.workflow.content.User; +import com.github.deutschebank.symphony.workflow.history.History; +import com.github.deutschebank.symphony.workflow.room.Rooms; + +/** + * Represents workflows which can use the state of the conversation, and knows which rooms it is in. + * + * @author Rob Moffat + * + */ +public abstract class AbstractWorkflow implements Workflow { + + protected List historyProviders = new ArrayList();; + protected List roomsProviders = new ArrayList<>(); + private String namespace; + private List admins; + private Rooms rooms; + private History history; + List keyRooms; + + public AbstractWorkflow(String namespace, List admins, List keyRooms) { + super(); + this.history = createHistoryDelegate(); + this.rooms = createRoomsDelegate(); + this.keyRooms = keyRooms; + this.admins = admins; + } + + @Override + public String getNamespace() { + return namespace; + } + + @Override + public Rooms getRoomsApi() { + return rooms; + } + + @Override + public History getHistoryApi() { + return history; + } + + + private Rooms createRoomsDelegate() { + return new Rooms() { + + @Override + public Set getAllRooms() { + return roomsProviders.stream() + .flatMap(rp -> rp.getAllRooms().stream()) + .collect(Collectors.toSet()); + } + + @Override + public Room ensureRoom(Room r) { + return roomsProviders.stream() + .map(rp -> rp.ensureRoom(r)) + .findFirst() + .orElseThrow(() -> new UnsupportedOperationException("Couldn't ensure room "+r)); + } + }; + } + + private History createHistoryDelegate() { + return new History() { + + @Override + public Optional getLastFromHistory(Class type, Addressable address) { + return historyProviders.stream() + .map(hp -> hp.getLastFromHistory(type, address)) + .filter(Optional::isPresent) + .map(Optional::get) + .findFirst(); + } + + @Override + public List getFromHistory(Class type, Addressable address, Instant since) { + return historyProviders.stream() + .flatMap(hp -> hp.getFromHistory(type, address, since).stream()) + .collect(Collectors.toList()); + } + + }; + } + + @Override + public List getKeyRooms() { + return keyRooms; + } + + @Override + public List getAdministrators() { + return admins; + } + + @Override + public void registerHistoryProvider(History h) { + historyProviders.add(h); + } + + @Override + public void registerRoomsProvider(Rooms r) { + roomsProviders.add(r); + } + + +} diff --git a/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/Workflow.java b/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/Workflow.java new file mode 100644 index 000000000..d4ce90283 --- /dev/null +++ b/chat-workflow/src/main/java/com/github/deutschebank/symphony/workflow/Workflow.java @@ -0,0 +1,53 @@ +package com.github.deutschebank.symphony.workflow; + +import java.util.List; +import java.util.Map; + +import com.github.deutschebank.symphony.workflow.content.Message; +import com.github.deutschebank.symphony.workflow.content.Room; +import com.github.deutschebank.symphony.workflow.content.User; +import com.github.deutschebank.symphony.workflow.form.Button; +import com.github.deutschebank.symphony.workflow.history.History; +import com.github.deutschebank.symphony.workflow.response.Response; +import com.github.deutschebank.symphony.workflow.room.Rooms; + +/** + * A workflow is a collection of steps, which can be triggered by messages posted in a Symphony room. + * + * @author Rob Moffat + * + */ +public interface Workflow { + + public String getNamespace(); + + public Map getCommands(Room r); + + public List applyCommand(User u, Room r, String commandName, Object argument, Message m); + + List