Skip to content
This repository has been archived by the owner on Feb 13, 2021. It is now read-only.

Commit

Permalink
Implementation of signalReceived event (#247)
Browse files Browse the repository at this point in the history
  • Loading branch information
CTI777 authored and erdemedeiros committed Apr 2, 2019
1 parent c43fad8 commit c971ba3
Show file tree
Hide file tree
Showing 11 changed files with 447 additions and 44 deletions.
4 changes: 2 additions & 2 deletions .travis.yml
Expand Up @@ -24,8 +24,8 @@ after_success:
bash <(curl -s https://codecov.io/bash)

after_failure:
- cat **/target/surefire-reports/*.xml | grep -B 1 -A 10 "<error"
- cat **/target/failsafe-reports/*.xml | grep -B 1 -A 10 "<error"
- cat **/target/surefire-reports/*.xml | grep -B 1 -A 30 "<error"
- cat **/target/failsafe-reports/*.xml | grep -B 1 -A 30 "<error"

env:
global:
Expand Down
Expand Up @@ -33,6 +33,7 @@
import org.activiti.cloud.services.events.listeners.CloudProcessSuspendedProducer;
import org.activiti.cloud.services.events.listeners.CloudProcessUpdatedProducer;
import org.activiti.cloud.services.events.listeners.CloudSequenceFlowTakenProducer;
import org.activiti.cloud.services.events.listeners.CloudSignalReceivedProducer;
import org.activiti.cloud.services.events.listeners.CloudTaskActivatedProducer;
import org.activiti.cloud.services.events.listeners.CloudTaskAssignedProducer;
import org.activiti.cloud.services.events.listeners.CloudTaskCancelledProducer;
Expand Down Expand Up @@ -307,6 +308,14 @@ public CloudActivityCancelledProducer cloudActivityCancelledProducer(ToCloudProc
return new CloudActivityCancelledProducer(converter,
eventsAggregator);
}

@Bean
@ConditionalOnMissingBean
public CloudSignalReceivedProducer cloudSignalReceivedProducer(ToCloudProcessRuntimeEventConverter converter,
ProcessEngineEventsAggregator eventsAggregator) {
return new CloudSignalReceivedProducer(converter,
eventsAggregator);
}

@Bean
@ConditionalOnMissingBean
Expand Down
Expand Up @@ -19,8 +19,9 @@
import org.activiti.api.process.model.events.BPMNActivityCancelledEvent;
import org.activiti.api.process.model.events.BPMNActivityCompletedEvent;
import org.activiti.api.process.model.events.BPMNActivityStartedEvent;
import org.activiti.api.process.model.events.ProcessDeployedEvent;
import org.activiti.api.process.model.events.BPMNSequenceFlowTakenEvent;
import org.activiti.api.process.model.events.BPMNSignalReceivedEvent;
import org.activiti.api.process.model.events.ProcessDeployedEvent;
import org.activiti.api.process.runtime.events.ProcessCancelledEvent;
import org.activiti.api.process.runtime.events.ProcessCompletedEvent;
import org.activiti.api.process.runtime.events.ProcessCreatedEvent;
Expand All @@ -30,6 +31,7 @@
import org.activiti.api.process.runtime.events.ProcessUpdatedEvent;
import org.activiti.cloud.api.process.model.events.CloudBPMNActivityCancelledEvent;
import org.activiti.cloud.api.process.model.events.CloudBPMNActivityCompletedEvent;
import org.activiti.cloud.api.process.model.events.CloudBPMNSignalReceivedEvent;
import org.activiti.cloud.api.process.model.events.CloudBPMNActivityStartedEvent;
import org.activiti.cloud.api.process.model.events.CloudProcessCancelledEvent;
import org.activiti.cloud.api.process.model.events.CloudProcessCompletedEvent;
Expand All @@ -42,6 +44,7 @@
import org.activiti.cloud.api.process.model.events.CloudSequenceFlowTakenEvent;
import org.activiti.cloud.api.process.model.impl.events.CloudBPMNActivityCancelledEventImpl;
import org.activiti.cloud.api.process.model.impl.events.CloudBPMNActivityCompletedEventImpl;
import org.activiti.cloud.api.process.model.impl.events.CloudBPMNSignalReceivedEventImpl;
import org.activiti.cloud.api.process.model.impl.events.CloudBPMNActivityStartedEventImpl;
import org.activiti.cloud.api.process.model.impl.events.CloudProcessCancelledEventImpl;
import org.activiti.cloud.api.process.model.impl.events.CloudProcessCompletedEventImpl;
Expand Down Expand Up @@ -129,6 +132,14 @@ public CloudBPMNActivityCancelledEvent from(BPMNActivityCancelledEvent event) {
runtimeBundleInfoAppender.appendRuntimeBundleInfoTo(cloudEvent);
return cloudEvent;
}

public CloudBPMNSignalReceivedEvent from(BPMNSignalReceivedEvent event) {
CloudBPMNSignalReceivedEventImpl cloudEvent = new CloudBPMNSignalReceivedEventImpl(event.getEntity(),
event.getEntity().getProcessDefinitionId(),
event.getEntity().getProcessInstanceId());
runtimeBundleInfoAppender.appendRuntimeBundleInfoTo(cloudEvent);
return cloudEvent;
}

public CloudSequenceFlowTakenEvent from(BPMNSequenceFlowTakenEvent event) {
CloudSequenceFlowTakenImpl cloudEvent = new CloudSequenceFlowTakenImpl(event.getEntity());
Expand Down
@@ -0,0 +1,38 @@
/*
* Copyright 2018 Alfresco, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.activiti.cloud.services.events.listeners;

import org.activiti.api.process.model.events.BPMNSignalReceivedEvent;
import org.activiti.api.process.runtime.events.listener.BPMNElementEventListener;
import org.activiti.cloud.services.events.converter.ToCloudProcessRuntimeEventConverter;

public class CloudSignalReceivedProducer implements BPMNElementEventListener<BPMNSignalReceivedEvent> {

private final ToCloudProcessRuntimeEventConverter eventConverter;
private final ProcessEngineEventsAggregator eventsAggregator;

public CloudSignalReceivedProducer(ToCloudProcessRuntimeEventConverter eventConverter,
ProcessEngineEventsAggregator eventsAggregator) {
this.eventConverter = eventConverter;
this.eventsAggregator = eventsAggregator;
}

@Override
public void onEvent(BPMNSignalReceivedEvent event) {
eventsAggregator.add(eventConverter.from(event));
}
}
Expand Up @@ -24,6 +24,7 @@
import org.activiti.cloud.api.model.shared.events.CloudVariableEvent;
import org.activiti.cloud.api.model.shared.impl.events.CloudRuntimeEventImpl;
import org.activiti.cloud.api.process.model.events.CloudBPMNActivityEvent;
import org.activiti.cloud.api.process.model.events.CloudBPMNSignalEvent;
import org.activiti.cloud.api.process.model.events.CloudIntegrationEvent;
import org.activiti.cloud.api.process.model.events.CloudProcessRuntimeEvent;
import org.activiti.cloud.api.process.model.events.CloudSequenceFlowEvent;
Expand Down Expand Up @@ -126,6 +127,8 @@ protected String resolveExecutionId(CloudRuntimeEvent<?, ?> element) {
return ((CloudTaskCandidateUserEvent) element).getProcessInstanceId();
} else if(element instanceof CloudTaskCandidateGroupEvent) {
return ((CloudTaskCandidateGroupEvent) element).getProcessInstanceId();
} else if(element instanceof CloudBPMNSignalEvent) {
return ((CloudBPMNSignalEvent) element).getEntity().getProcessInstanceId();
}

return null;
Expand Down
Expand Up @@ -16,7 +16,10 @@

package org.activiti.cloud.services.events.converter;

import org.activiti.api.runtime.event.impl.BPMNSignalReceivedEventImpl;
import org.activiti.api.runtime.model.impl.BPMNSignalImpl;
import org.activiti.cloud.api.model.shared.impl.events.CloudRuntimeEventImpl;
import org.activiti.cloud.api.process.model.events.CloudBPMNSignalReceivedEvent;
import org.activiti.cloud.api.process.model.events.CloudProcessStartedEvent;
import org.activiti.runtime.api.event.impl.ProcessStartedEventImpl;
import org.activiti.api.runtime.model.impl.ProcessInstanceImpl;
Expand Down Expand Up @@ -67,4 +70,22 @@ public void fromShouldConvertInternalProcessStartedEventToExternalEvent() {

verify(runtimeBundleInfoAppender).appendRuntimeBundleInfoTo(ArgumentMatchers.any(CloudRuntimeEventImpl.class));
}

@Test
public void shouldConvertBPMNSignalReceivedEventToCloudBPMNSignalReceivedEvent() {
//given
BPMNSignalImpl signal = new BPMNSignalImpl();
signal.setProcessDefinitionId("procDefId");
signal.setProcessInstanceId("procInstId");
BPMNSignalReceivedEventImpl signalReceivedEvent = new BPMNSignalReceivedEventImpl(signal);

//when
CloudBPMNSignalReceivedEvent cloudEvent = converter.from(signalReceivedEvent);
assertThat(cloudEvent.getEntity()).isEqualTo(signal);
assertThat(cloudEvent.getProcessDefinitionId()).isEqualTo("procDefId");
assertThat(cloudEvent.getProcessInstanceId()).isEqualTo("procInstId");

//then
verify(runtimeBundleInfoAppender).appendRuntimeBundleInfoTo(ArgumentMatchers.any(CloudRuntimeEventImpl.class));
}
}
@@ -0,0 +1,60 @@
/*
* Copyright 2019 Alfresco, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.activiti.cloud.services.events.listeners;

import org.activiti.api.runtime.event.impl.BPMNSignalReceivedEventImpl;
import org.activiti.api.runtime.model.impl.BPMNSignalImpl;
import org.activiti.cloud.api.process.model.impl.events.CloudBPMNSignalReceivedEventImpl;
import org.activiti.cloud.services.events.converter.ToCloudProcessRuntimeEventConverter;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;

import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks;

public class CloudSignalReceivedProducerTest {

@InjectMocks
private CloudSignalReceivedProducer cloudSignalReceivedProducer;

@Mock
private ToCloudProcessRuntimeEventConverter eventConverter;
@Mock
private ProcessEngineEventsAggregator eventsAggregator;

@Before
public void setUp() {
initMocks(this);
}

@Test
public void onEventShouldConvertEventToCloudEventAndAddToAggregator() {
//given
BPMNSignalReceivedEventImpl event = new BPMNSignalReceivedEventImpl(new BPMNSignalImpl());
CloudBPMNSignalReceivedEventImpl cloudEvent = new CloudBPMNSignalReceivedEventImpl();
given(eventConverter.from(event)).willReturn(cloudEvent);

//when
cloudSignalReceivedProducer.onEvent(event);

//then
verify(eventsAggregator).add(cloudEvent);
}
}
@@ -0,0 +1,50 @@
/*
* Copyright 2019 Alfresco, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.activiti.cloud.starter.tests.helper;

import org.activiti.api.process.model.payloads.SignalPayload;
import org.springframework.boot.test.context.TestComponent;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import static org.activiti.cloud.starter.tests.helper.ProcessInstanceRestTemplate.PROCESS_INSTANCES_RELATIVE_URL;
import static org.assertj.core.api.Assertions.assertThat;

@TestComponent
public class SignalRestTemplate {

private TestRestTemplate testRestTemplate;

public SignalRestTemplate(TestRestTemplate testRestTemplate) {
this.testRestTemplate = testRestTemplate;
}

public void signal(SignalPayload signalProcessInstancesCmd) {
ResponseEntity<Void> responseEntity = testRestTemplate.exchange(PROCESS_INSTANCES_RELATIVE_URL + "/signal",
HttpMethod.POST,
new HttpEntity<>(signalProcessInstancesCmd),
new ParameterizedTypeReference<Void>() {
});

assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
}

}

0 comments on commit c971ba3

Please sign in to comment.