示例#1
0
        private void createMessageCorrelationBuilderMock()
        {
            mockMessageCorrelationBuilder = mock(typeof(MessageCorrelationBuilder));
            mockMessageCorrelationResult  = mock(typeof(MessageCorrelationResult));

            when(mockRuntimeService.createMessageCorrelation(anyString())).thenReturn(mockMessageCorrelationBuilder);
            when(mockMessageCorrelationBuilder.correlateWithResult()).thenReturn(mockMessageCorrelationResult);
            when(mockMessageCorrelationBuilder.processInstanceId(anyString())).thenReturn(mockMessageCorrelationBuilder);
            when(mockMessageCorrelationBuilder.processInstanceBusinessKey(anyString())).thenReturn(mockMessageCorrelationBuilder);
            when(mockMessageCorrelationBuilder.processInstanceVariableEquals(anyString(), any())).thenReturn(mockMessageCorrelationBuilder);
            when(mockMessageCorrelationBuilder.setVariables(Matchers.any <IDictionary <string, object> >())).thenReturn(mockMessageCorrelationBuilder);
            when(mockMessageCorrelationBuilder.setVariable(anyString(), any())).thenReturn(mockMessageCorrelationBuilder);
        }
示例#2
0
        public virtual Response deliverMessage(CorrelationMessageDto messageDto)
        {
            if (string.ReferenceEquals(messageDto.MessageName, null))
            {
                throw new InvalidRequestException(Status.BAD_REQUEST, "No message name supplied");
            }
            if (!string.ReferenceEquals(messageDto.TenantId, null) && messageDto.WithoutTenantId)
            {
                throw new InvalidRequestException(Status.BAD_REQUEST, "Parameter 'tenantId' cannot be used together with parameter 'withoutTenantId'.");
            }
            bool variablesInResultEnabled = messageDto.VariablesInResultEnabled;

            if (!messageDto.ResultEnabled && variablesInResultEnabled)
            {
                throw new InvalidRequestException(Status.BAD_REQUEST, "Parameter 'variablesInResultEnabled' cannot be used without 'resultEnabled' set to true.");
            }

            IList <MessageCorrelationResultDto> resultDtos = new List <MessageCorrelationResultDto>();

            try
            {
                MessageCorrelationBuilder correlation = createMessageCorrelationBuilder(messageDto);
                if (!variablesInResultEnabled)
                {
                    ((IList <MessageCorrelationResultDto>)resultDtos).AddRange(correlate(messageDto, correlation));
                }
                else
                {
                    ((IList <MessageCorrelationResultDto>)resultDtos).AddRange(correlateWithVariablesEnabled(messageDto, correlation));
                }
            }
            catch (RestException e)
            {
                string errorMessage = string.Format("Cannot deliver message: {0}", e.Message);
                throw new InvalidRequestException(e.Status, e, errorMessage);
            }
            catch (MismatchingMessageCorrelationException e)
            {
                throw new RestException(Status.BAD_REQUEST, e);
            }
            return(createResponse(resultDtos, messageDto));
        }
示例#3
0
        protected internal virtual IList <MessageCorrelationResultDto> correlate(CorrelationMessageDto messageDto, MessageCorrelationBuilder correlation)
        {
            IList <MessageCorrelationResultDto> resultDtos = new List <MessageCorrelationResultDto>();

            if (!messageDto.All)
            {
                MessageCorrelationResult result = correlation.correlateWithResult();
                resultDtos.Add(MessageCorrelationResultDto.fromMessageCorrelationResult(result));
            }
            else
            {
                IList <MessageCorrelationResult> results = correlation.correlateAllWithResult();
                foreach (MessageCorrelationResult result in results)
                {
                    resultDtos.Add(MessageCorrelationResultDto.fromMessageCorrelationResult(result));
                }
            }
            return(resultDtos);
        }
示例#4
0
        protected internal virtual MessageCorrelationBuilder createMessageCorrelationBuilder(CorrelationMessageDto messageDto)
        {
            RuntimeService runtimeService = processEngine.RuntimeService;

            ObjectMapper objectMapper = ObjectMapper;
            IDictionary <string, object> correlationKeys       = VariableValueDto.toMap(messageDto.CorrelationKeys, processEngine, objectMapper);
            IDictionary <string, object> localCorrelationKeys  = VariableValueDto.toMap(messageDto.LocalCorrelationKeys, processEngine, objectMapper);
            IDictionary <string, object> processVariables      = VariableValueDto.toMap(messageDto.ProcessVariables, processEngine, objectMapper);
            IDictionary <string, object> processVariablesLocal = VariableValueDto.toMap(messageDto.ProcessVariablesLocal, processEngine, objectMapper);

            MessageCorrelationBuilder builder = runtimeService.createMessageCorrelation(messageDto.MessageName);

            if (processVariables != null)
            {
                builder.Variables = processVariables;
            }
            if (processVariablesLocal != null)
            {
                builder.VariablesLocal = processVariablesLocal;
            }
            if (!string.ReferenceEquals(messageDto.BusinessKey, null))
            {
                builder.processInstanceBusinessKey(messageDto.BusinessKey);
            }

            if (correlationKeys != null && correlationKeys.Count > 0)
            {
                foreach (KeyValuePair <string, object> correlationKey in correlationKeys.SetOfKeyValuePairs())
                {
                    string name  = correlationKey.Key;
                    object value = correlationKey.Value;
                    builder.processInstanceVariableEquals(name, value);
                }
            }

            if (localCorrelationKeys != null && localCorrelationKeys.Count > 0)
            {
                foreach (KeyValuePair <string, object> correlationKey in localCorrelationKeys.SetOfKeyValuePairs())
                {
                    string name  = correlationKey.Key;
                    object value = correlationKey.Value;
                    builder.localVariableEquals(name, value);
                }
            }

            if (!string.ReferenceEquals(messageDto.TenantId, null))
            {
                builder.tenantId(messageDto.TenantId);
            }
            else if (messageDto.WithoutTenantId)
            {
                builder.withoutTenantId();
            }

            string processInstanceId = messageDto.ProcessInstanceId;

            if (!string.ReferenceEquals(processInstanceId, null))
            {
                builder.processInstanceId(processInstanceId);
            }

            return(builder);
        }