operaton-bpm-client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +134 -0
- data/lib/operaton/bpm/client/backoff/backoff_strategy.rb +20 -0
- data/lib/operaton/bpm/client/backoff/error_aware_backoff_strategy.rb +22 -0
- data/lib/operaton/bpm/client/backoff/exponential_backoff_strategy.rb +38 -0
- data/lib/operaton/bpm/client/backoff/exponential_error_backoff_strategy.rb +38 -0
- data/lib/operaton/bpm/client/exceptions.rb +74 -0
- data/lib/operaton/bpm/client/external_task_client.rb +20 -0
- data/lib/operaton/bpm/client/external_task_client_builder.rb +18 -0
- data/lib/operaton/bpm/client/impl/engine_client.rb +132 -0
- data/lib/operaton/bpm/client/impl/engine_client_exception.rb +25 -0
- data/lib/operaton/bpm/client/impl/engine_client_logger.rb +54 -0
- data/lib/operaton/bpm/client/impl/engine_rest_exception_dto.rb +28 -0
- data/lib/operaton/bpm/client/impl/external_task_client_builder_impl.rb +349 -0
- data/lib/operaton/bpm/client/impl/external_task_client_impl.rb +41 -0
- data/lib/operaton/bpm/client/impl/external_task_client_logger.rb +236 -0
- data/lib/operaton/bpm/client/impl/object_mapper.rb +44 -0
- data/lib/operaton/bpm/client/impl/permanent_url_resolver.rb +22 -0
- data/lib/operaton/bpm/client/impl/request_dto.rb +24 -0
- data/lib/operaton/bpm/client/impl/request_executor.rb +143 -0
- data/lib/operaton/bpm/client/interceptor/auth/basic_auth_provider.rb +42 -0
- data/lib/operaton/bpm/client/interceptor/client_request_context.rb +16 -0
- data/lib/operaton/bpm/client/interceptor/client_request_interceptor.rb +18 -0
- data/lib/operaton/bpm/client/interceptor/impl/client_request_context_impl.rb +28 -0
- data/lib/operaton/bpm/client/interceptor/impl/request_interceptor_handler.rb +43 -0
- data/lib/operaton/bpm/client/spi/data_format.rb +32 -0
- data/lib/operaton/bpm/client/spi/data_format_configurator.rb +31 -0
- data/lib/operaton/bpm/client/spi/data_format_provider.rb +31 -0
- data/lib/operaton/bpm/client/task/external_task.rb +22 -0
- data/lib/operaton/bpm/client/task/external_task_handler.rb +28 -0
- data/lib/operaton/bpm/client/task/external_task_service.rb +18 -0
- data/lib/operaton/bpm/client/task/impl/dto/bpmn_error_request_dto.rb +35 -0
- data/lib/operaton/bpm/client/task/impl/dto/complete_request_dto.rb +33 -0
- data/lib/operaton/bpm/client/task/impl/dto/extend_lock_request_dto.rb +29 -0
- data/lib/operaton/bpm/client/task/impl/dto/failure_request_dto.rb +43 -0
- data/lib/operaton/bpm/client/task/impl/dto/lock_request_dto.rb +29 -0
- data/lib/operaton/bpm/client/task/impl/dto/set_variables_request_dto.rb +29 -0
- data/lib/operaton/bpm/client/task/impl/external_task_impl.rb +128 -0
- data/lib/operaton/bpm/client/task/impl/external_task_service_impl.rb +90 -0
- data/lib/operaton/bpm/client/task/ordering_config.rb +78 -0
- data/lib/operaton/bpm/client/task/sorting_dto.rb +29 -0
- data/lib/operaton/bpm/client/topic/impl/dto/fetch_and_lock_request_dto.rb +47 -0
- data/lib/operaton/bpm/client/topic/impl/dto/fetch_and_lock_response_dto.rb +32 -0
- data/lib/operaton/bpm/client/topic/impl/dto/topic_request_dto.rb +70 -0
- data/lib/operaton/bpm/client/topic/impl/topic_subscription_builder_impl.rb +164 -0
- data/lib/operaton/bpm/client/topic/impl/topic_subscription_impl.rb +76 -0
- data/lib/operaton/bpm/client/topic/impl/topic_subscription_manager.rb +222 -0
- data/lib/operaton/bpm/client/topic/impl/topic_subscription_manager_logger.rb +52 -0
- data/lib/operaton/bpm/client/topic/topic_subscription.rb +20 -0
- data/lib/operaton/bpm/client/topic/topic_subscription_builder.rb +22 -0
- data/lib/operaton/bpm/client/url_resolver.rb +15 -0
- data/lib/operaton/bpm/client/variable/client_values.rb +33 -0
- data/lib/operaton/bpm/client/variable/impl/abstract_typed_value_mapper.rb +59 -0
- data/lib/operaton/bpm/client/variable/impl/default_value_mappers.rb +71 -0
- data/lib/operaton/bpm/client/variable/impl/format/json/json_data_format.rb +82 -0
- data/lib/operaton/bpm/client/variable/impl/format/json/json_data_format_provider.rb +34 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/boolean_value_mapper.rb +35 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/byte_array_value_mapper.rb +53 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/date_value_mapper.rb +61 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/double_value_mapper.rb +36 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/file_value_mapper.rb +73 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/integer_value_mapper.rb +36 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/json_value_mapper.rb +35 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/long_value_mapper.rb +36 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/null_value_mapper.rb +45 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/number_value_mapper.rb +25 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/object_value_mapper.rb +151 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/primitive_value_mapper.rb +44 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/short_value_mapper.rb +36 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/string_value_mapper.rb +35 -0
- data/lib/operaton/bpm/client/variable/impl/mapper/xml_value_mapper.rb +35 -0
- data/lib/operaton/bpm/client/variable/impl/type/json_type_impl.rb +24 -0
- data/lib/operaton/bpm/client/variable/impl/type/xml_type_impl.rb +24 -0
- data/lib/operaton/bpm/client/variable/impl/typed_value_field.rb +36 -0
- data/lib/operaton/bpm/client/variable/impl/typed_values.rb +100 -0
- data/lib/operaton/bpm/client/variable/impl/value/deferred_file_value_impl.rb +57 -0
- data/lib/operaton/bpm/client/variable/impl/value/json_value_impl.rb +26 -0
- data/lib/operaton/bpm/client/variable/impl/value/xml_value_impl.rb +26 -0
- data/lib/operaton/bpm/client/variable/impl/value_mapper.rb +42 -0
- data/lib/operaton/bpm/client/variable/impl/value_mappers.rb +26 -0
- data/lib/operaton/bpm/client/variable/impl/variable_value.rb +55 -0
- data/lib/operaton/bpm/client/variable/value/deferred_file_value.rb +19 -0
- data/lib/operaton/bpm/client/variable/value/json_value.rb +16 -0
- data/lib/operaton/bpm/client/variable/value/xml_value.rb +16 -0
- data/lib/operaton/bpm/client/version.rb +9 -0
- data/lib/operaton/bpm/client.rb +121 -0
- data/lib/operaton/bpm/engine/variable/typed_value.rb +153 -0
- data/lib/operaton/bpm/engine/variable/value_type.rb +126 -0
- data/lib/operaton/bpm/engine/variable/variable_map.rb +72 -0
- data/lib/operaton/bpm/engine/variable/variables.rb +197 -0
- data/lib/operaton-bpm-client.rb +3 -0
- metadata +188 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "primitive_value_mapper"
|
|
4
|
+
require_relative "../../../../engine/variable/variables"
|
|
5
|
+
|
|
6
|
+
module Operaton
|
|
7
|
+
module Bpm
|
|
8
|
+
module Client
|
|
9
|
+
module Variable
|
|
10
|
+
module Impl
|
|
11
|
+
module Mapper
|
|
12
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.BooleanValueMapper
|
|
13
|
+
class BooleanValueMapper < PrimitiveValueMapper
|
|
14
|
+
def initialize
|
|
15
|
+
super(Engine::Variable::ValueType::BOOLEAN)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def convert_to_typed_value(untyped_value)
|
|
19
|
+
Engine::Variable::Variables.boolean_value(untyped_value.value)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def read_typed_value(typed_value_field)
|
|
23
|
+
Engine::Variable::Variables.boolean_value(typed_value_field.value)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def write_value(boolean_value, typed_value_field)
|
|
27
|
+
typed_value_field.value = boolean_value.value
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "base64"
|
|
4
|
+
require_relative "primitive_value_mapper"
|
|
5
|
+
require_relative "../../../../engine/variable/variables"
|
|
6
|
+
|
|
7
|
+
module Operaton
|
|
8
|
+
module Bpm
|
|
9
|
+
module Client
|
|
10
|
+
module Variable
|
|
11
|
+
module Impl
|
|
12
|
+
module Mapper
|
|
13
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.ByteArrayValueMapper
|
|
14
|
+
class ByteArrayValueMapper < PrimitiveValueMapper
|
|
15
|
+
def initialize
|
|
16
|
+
super(Engine::Variable::ValueType::BYTES)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def convert_to_typed_value(untyped_value)
|
|
20
|
+
value = untyped_value.value
|
|
21
|
+
byte_arr = value.respond_to?(:read) ? value.read : value
|
|
22
|
+
Engine::Variable::Variables.byte_array_value(byte_arr)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def read_typed_value(typed_value_field)
|
|
26
|
+
byte_arr = nil
|
|
27
|
+
value = typed_value_field.value
|
|
28
|
+
byte_arr = Base64.decode64(value) unless value.nil?
|
|
29
|
+
Engine::Variable::Variables.byte_array_value(byte_arr)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def write_value(bytes_value, typed_value_field)
|
|
33
|
+
bytes = bytes_value.value
|
|
34
|
+
typed_value_field.value = Base64.strict_encode64(bytes) unless bytes.nil?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
protected
|
|
38
|
+
|
|
39
|
+
def can_write_value(typed_value)
|
|
40
|
+
super || typed_value.value.respond_to?(:read)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def can_read_value(typed_value_field)
|
|
44
|
+
value = typed_value_field.value
|
|
45
|
+
value.nil? || value.is_a?(String)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "time"
|
|
4
|
+
require_relative "primitive_value_mapper"
|
|
5
|
+
require_relative "../../../../engine/variable/variables"
|
|
6
|
+
require_relative "../../../impl/external_task_client_logger"
|
|
7
|
+
|
|
8
|
+
module Operaton
|
|
9
|
+
module Bpm
|
|
10
|
+
module Client
|
|
11
|
+
module Variable
|
|
12
|
+
module Impl
|
|
13
|
+
module Mapper
|
|
14
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.DateValueMapper.
|
|
15
|
+
# The date format is a Ruby strftime pattern.
|
|
16
|
+
class DateValueMapper < PrimitiveValueMapper
|
|
17
|
+
def initialize(date_format)
|
|
18
|
+
super(Engine::Variable::ValueType::DATE)
|
|
19
|
+
@date_format = date_format
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def convert_to_typed_value(untyped_value)
|
|
23
|
+
Engine::Variable::Variables.date_value(to_time(untyped_value.value))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def read_typed_value(typed_value_field)
|
|
27
|
+
date = nil
|
|
28
|
+
value = typed_value_field.value
|
|
29
|
+
unless value.nil?
|
|
30
|
+
begin
|
|
31
|
+
date = Time.strptime(value, @date_format)
|
|
32
|
+
rescue ArgumentError => e
|
|
33
|
+
raise Client::Impl::ExternalTaskClientLogger.client_logger
|
|
34
|
+
.value_mapper_exception_while_parsing_date(value, e)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
Engine::Variable::Variables.date_value(date)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def write_value(date_value, typed_value_field)
|
|
41
|
+
date = date_value.value
|
|
42
|
+
typed_value_field.value = to_time(date).strftime(@date_format) unless date.nil?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
protected
|
|
46
|
+
|
|
47
|
+
def can_read_value(typed_value_field)
|
|
48
|
+
value = typed_value_field.value
|
|
49
|
+
value.nil? || value.is_a?(String)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def to_time(value)
|
|
53
|
+
value.is_a?(Time) ? value : value.to_time
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "number_value_mapper"
|
|
4
|
+
require_relative "../../../../engine/variable/variables"
|
|
5
|
+
|
|
6
|
+
module Operaton
|
|
7
|
+
module Bpm
|
|
8
|
+
module Client
|
|
9
|
+
module Variable
|
|
10
|
+
module Impl
|
|
11
|
+
module Mapper
|
|
12
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.DoubleValueMapper
|
|
13
|
+
class DoubleValueMapper < NumberValueMapper
|
|
14
|
+
def initialize
|
|
15
|
+
super(Engine::Variable::ValueType::DOUBLE)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def convert_to_typed_value(untyped_value)
|
|
19
|
+
Engine::Variable::Variables.double_value(untyped_value.value)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def write_value(double_value, typed_value_field)
|
|
23
|
+
typed_value_field.value = double_value.value
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def read_typed_value(typed_value_field)
|
|
27
|
+
value = typed_value_field.value
|
|
28
|
+
Engine::Variable::Variables.double_value(value.nil? ? nil : Float(value))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "base64"
|
|
4
|
+
require_relative "../abstract_typed_value_mapper"
|
|
5
|
+
require_relative "../value/deferred_file_value_impl"
|
|
6
|
+
require_relative "../../../../engine/variable/typed_value"
|
|
7
|
+
|
|
8
|
+
module Operaton
|
|
9
|
+
module Bpm
|
|
10
|
+
module Client
|
|
11
|
+
module Variable
|
|
12
|
+
module Impl
|
|
13
|
+
module Mapper
|
|
14
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.FileValueMapper
|
|
15
|
+
class FileValueMapper < AbstractTypedValueMapper
|
|
16
|
+
VALUE_INFO_FILE_NAME = Engine::Variable::FileValueType::VALUE_INFO_FILE_NAME
|
|
17
|
+
VALUE_INFO_FILE_MIME_TYPE = Engine::Variable::FileValueType::VALUE_INFO_FILE_MIME_TYPE
|
|
18
|
+
VALUE_INFO_FILE_ENCODING = Engine::Variable::FileValueType::VALUE_INFO_FILE_ENCODING
|
|
19
|
+
|
|
20
|
+
def initialize(engine_client)
|
|
21
|
+
super(Engine::Variable::ValueType::FILE)
|
|
22
|
+
@engine_client = engine_client
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def convert_to_typed_value(_untyped_value)
|
|
26
|
+
raise NotImplementedError, "Currently no automatic conversation from UntypedValue to FileValue"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def read_value(typed_value_field, _deserialize_value = true)
|
|
30
|
+
value_info = typed_value_field.value_info || {}
|
|
31
|
+
filename = value_info[VALUE_INFO_FILE_NAME]
|
|
32
|
+
|
|
33
|
+
file_value = Value::DeferredFileValueImpl.new(filename, @engine_client)
|
|
34
|
+
mime_type = value_info[VALUE_INFO_FILE_MIME_TYPE]
|
|
35
|
+
file_value.mime_type = mime_type if mime_type
|
|
36
|
+
encoding = value_info[VALUE_INFO_FILE_ENCODING]
|
|
37
|
+
file_value.encoding = encoding if encoding
|
|
38
|
+
file_value
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def write_value(file_value, typed_value_field)
|
|
42
|
+
value_info = { VALUE_INFO_FILE_NAME => file_value.filename }
|
|
43
|
+
value_info[VALUE_INFO_FILE_ENCODING] = file_value.encoding if file_value.encoding
|
|
44
|
+
value_info[VALUE_INFO_FILE_MIME_TYPE] = file_value.mime_type if file_value.mime_type
|
|
45
|
+
typed_value_field.value_info = value_info
|
|
46
|
+
|
|
47
|
+
bytes = file_value.byte_array
|
|
48
|
+
typed_value_field.value = Base64.strict_encode64(bytes) unless bytes.nil?
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
protected
|
|
52
|
+
|
|
53
|
+
def can_write_value(typed_value)
|
|
54
|
+
return false if typed_value.nil? || typed_value.type.nil? # untyped value
|
|
55
|
+
|
|
56
|
+
typed_value.type.name == value_type.name && !deferred?(typed_value)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def can_read_value(typed_value_field)
|
|
60
|
+
value = typed_value_field.value
|
|
61
|
+
value.nil? || value.is_a?(String)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def deferred?(variable_value)
|
|
65
|
+
variable_value.is_a?(Variable::Value::DeferredFileValue) && !variable_value.loaded?
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "number_value_mapper"
|
|
4
|
+
require_relative "../../../../engine/variable/variables"
|
|
5
|
+
|
|
6
|
+
module Operaton
|
|
7
|
+
module Bpm
|
|
8
|
+
module Client
|
|
9
|
+
module Variable
|
|
10
|
+
module Impl
|
|
11
|
+
module Mapper
|
|
12
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.IntegerValueMapper
|
|
13
|
+
class IntegerValueMapper < NumberValueMapper
|
|
14
|
+
def initialize
|
|
15
|
+
super(Engine::Variable::ValueType::INTEGER)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def convert_to_typed_value(untyped_value)
|
|
19
|
+
Engine::Variable::Variables.integer_value(untyped_value.value)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def write_value(int_value, typed_value_field)
|
|
23
|
+
typed_value_field.value = int_value.value
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def read_typed_value(typed_value_field)
|
|
27
|
+
value = typed_value_field.value
|
|
28
|
+
Engine::Variable::Variables.integer_value(value.nil? ? nil : Integer(value))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "primitive_value_mapper"
|
|
4
|
+
require_relative "../../client_values"
|
|
5
|
+
|
|
6
|
+
module Operaton
|
|
7
|
+
module Bpm
|
|
8
|
+
module Client
|
|
9
|
+
module Variable
|
|
10
|
+
module Impl
|
|
11
|
+
module Mapper
|
|
12
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.JsonValueMapper
|
|
13
|
+
class JsonValueMapper < PrimitiveValueMapper
|
|
14
|
+
def initialize
|
|
15
|
+
super(ClientValues::JSON)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def convert_to_typed_value(untyped_value)
|
|
19
|
+
ClientValues.json_value(untyped_value.value)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def write_value(json_value, typed_value_field)
|
|
23
|
+
typed_value_field.value = json_value.value
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def read_typed_value(typed_value_field)
|
|
27
|
+
ClientValues.json_value(typed_value_field.value)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "number_value_mapper"
|
|
4
|
+
require_relative "../../../../engine/variable/variables"
|
|
5
|
+
|
|
6
|
+
module Operaton
|
|
7
|
+
module Bpm
|
|
8
|
+
module Client
|
|
9
|
+
module Variable
|
|
10
|
+
module Impl
|
|
11
|
+
module Mapper
|
|
12
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.LongValueMapper
|
|
13
|
+
class LongValueMapper < NumberValueMapper
|
|
14
|
+
def initialize
|
|
15
|
+
super(Engine::Variable::ValueType::LONG)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def convert_to_typed_value(untyped_value)
|
|
19
|
+
Engine::Variable::Variables.long_value(untyped_value.value)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def write_value(long_value, typed_value_field)
|
|
23
|
+
typed_value_field.value = long_value.value
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def read_typed_value(typed_value_field)
|
|
27
|
+
value = typed_value_field.value
|
|
28
|
+
Engine::Variable::Variables.long_value(value.nil? ? nil : Integer(value))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../abstract_typed_value_mapper"
|
|
4
|
+
require_relative "../../../../engine/variable/typed_value"
|
|
5
|
+
|
|
6
|
+
module Operaton
|
|
7
|
+
module Bpm
|
|
8
|
+
module Client
|
|
9
|
+
module Variable
|
|
10
|
+
module Impl
|
|
11
|
+
module Mapper
|
|
12
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.NullValueMapper
|
|
13
|
+
class NullValueMapper < AbstractTypedValueMapper
|
|
14
|
+
def initialize
|
|
15
|
+
super(Engine::Variable::ValueType::NULL)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def convert_to_typed_value(_untyped_value)
|
|
19
|
+
Engine::Variable::NullValue::INSTANCE
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def write_value(_typed_value, typed_value_field)
|
|
23
|
+
typed_value_field.value = nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def read_value(_typed_value_field, _deserialize = true)
|
|
27
|
+
Engine::Variable::NullValue::INSTANCE
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
protected
|
|
31
|
+
|
|
32
|
+
def can_write_value(typed_value)
|
|
33
|
+
typed_value.value.nil?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def can_read_value(typed_value_field)
|
|
37
|
+
typed_value_field.value.nil?
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "primitive_value_mapper"
|
|
4
|
+
|
|
5
|
+
module Operaton
|
|
6
|
+
module Bpm
|
|
7
|
+
module Client
|
|
8
|
+
module Variable
|
|
9
|
+
module Impl
|
|
10
|
+
module Mapper
|
|
11
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.NumberValueMapper
|
|
12
|
+
class NumberValueMapper < PrimitiveValueMapper
|
|
13
|
+
protected
|
|
14
|
+
|
|
15
|
+
def can_read_value(typed_value_field)
|
|
16
|
+
value = typed_value_field.value
|
|
17
|
+
value.nil? || value.is_a?(Numeric)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../abstract_typed_value_mapper"
|
|
4
|
+
require_relative "../../../../engine/variable/typed_value"
|
|
5
|
+
require_relative "../../../impl/external_task_client_logger"
|
|
6
|
+
|
|
7
|
+
module Operaton
|
|
8
|
+
module Bpm
|
|
9
|
+
module Client
|
|
10
|
+
module Variable
|
|
11
|
+
module Impl
|
|
12
|
+
module Mapper
|
|
13
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.ObjectValueMapper
|
|
14
|
+
class ObjectValueMapper < AbstractTypedValueMapper
|
|
15
|
+
VALUE_INFO_OBJECT_TYPE_NAME =
|
|
16
|
+
Engine::Variable::ObjectValueType::VALUE_INFO_OBJECT_TYPE_NAME
|
|
17
|
+
VALUE_INFO_SERIALIZATION_DATA_FORMAT =
|
|
18
|
+
Engine::Variable::ObjectValueType::VALUE_INFO_SERIALIZATION_DATA_FORMAT
|
|
19
|
+
|
|
20
|
+
attr_reader :data_format
|
|
21
|
+
|
|
22
|
+
def initialize(serialization_data_format, data_format)
|
|
23
|
+
super(Engine::Variable::ValueType::OBJECT)
|
|
24
|
+
@serialization_data_format = serialization_data_format
|
|
25
|
+
@data_format = data_format
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def serialization_dataformat
|
|
29
|
+
@serialization_data_format
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def convert_to_typed_value(untyped_value)
|
|
33
|
+
Engine::Variable::Variables.object_value(untyped_value.value).create
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def write_value(typed_value, typed_value_field)
|
|
37
|
+
serialized_string_value = typed_value.value_serialized
|
|
38
|
+
|
|
39
|
+
if typed_value.deserialized?
|
|
40
|
+
object_to_serialize = typed_value.instance_variable_get(:@value)
|
|
41
|
+
unless object_to_serialize.nil?
|
|
42
|
+
begin
|
|
43
|
+
serialized_string_value = data_format.write_value(object_to_serialize)
|
|
44
|
+
rescue StandardError => e
|
|
45
|
+
raise logger.value_mapper_exception_while_serializing_object(e)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
typed_value_field.value = serialized_string_value
|
|
51
|
+
update_typed_value(typed_value, serialized_string_value)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def read_value(typed_value_field, deserialize_object_value)
|
|
55
|
+
serialized_string_value = typed_value_field.value
|
|
56
|
+
|
|
57
|
+
if deserialize_object_value
|
|
58
|
+
deserialized_object = nil
|
|
59
|
+
unless serialized_string_value.nil?
|
|
60
|
+
begin
|
|
61
|
+
object_type_name = read_object_name_from_fields(typed_value_field)
|
|
62
|
+
deserialized_object = data_format.read_value(serialized_string_value, object_type_name)
|
|
63
|
+
rescue StandardError => e
|
|
64
|
+
raise logger.value_mapper_exception_while_deserializing_object(e)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
create_deserialized_value(deserialized_object, serialized_string_value, typed_value_field)
|
|
68
|
+
else
|
|
69
|
+
create_serialized_value(serialized_string_value, typed_value_field)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
protected
|
|
74
|
+
|
|
75
|
+
def update_typed_value(value, serialized_value)
|
|
76
|
+
object_type_name = object_type_name_for(value)
|
|
77
|
+
value.object_type_name = object_type_name
|
|
78
|
+
value.serialized_value = serialized_value
|
|
79
|
+
value.serialization_data_format = @serialization_data_format
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def object_type_name_for(value)
|
|
83
|
+
object_type_name = value.object_type_name
|
|
84
|
+
|
|
85
|
+
if object_type_name.nil? && !value.deserialized? && !value.value_serialized.nil?
|
|
86
|
+
raise logger.value_mapper_exception_due_to_no_object_type_name
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
if value.deserialized? && !value.instance_variable_get(:@value).nil?
|
|
90
|
+
object_type_name = data_format.canonical_type_name(value.instance_variable_get(:@value))
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
object_type_name
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def can_write_value(typed_value)
|
|
97
|
+
is_serializable = typed_value.is_a?(Engine::Variable::ObjectValue)
|
|
98
|
+
is_untyped = typed_value.is_a?(Engine::Variable::UntypedValue)
|
|
99
|
+
return false unless is_serializable || is_untyped
|
|
100
|
+
|
|
101
|
+
if is_serializable
|
|
102
|
+
requested_data_format = typed_value.serialization_data_format
|
|
103
|
+
|
|
104
|
+
if typed_value.deserialized?
|
|
105
|
+
raw_value = typed_value.instance_variable_get(:@value)
|
|
106
|
+
can_serialize = raw_value.nil? || data_format.can_map(raw_value)
|
|
107
|
+
can_serialize && (requested_data_format.nil? ||
|
|
108
|
+
@serialization_data_format == requested_data_format)
|
|
109
|
+
else
|
|
110
|
+
# serialized object => dataformat must match
|
|
111
|
+
@serialization_data_format == requested_data_format
|
|
112
|
+
end
|
|
113
|
+
else
|
|
114
|
+
typed_value.value.nil? || data_format.can_map(typed_value.value)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def can_read_value(typed_value_field)
|
|
119
|
+
value_info = typed_value_field.value_info || {}
|
|
120
|
+
serialization_dataformat_of_field = value_info[VALUE_INFO_SERIALIZATION_DATA_FORMAT]
|
|
121
|
+
value = typed_value_field.value
|
|
122
|
+
(value.nil? || value.is_a?(String)) &&
|
|
123
|
+
serialization_dataformat == serialization_dataformat_of_field
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def create_deserialized_value(deserialized_object, serialized_value, typed_value_field)
|
|
127
|
+
object_type_name = read_object_name_from_fields(typed_value_field)
|
|
128
|
+
Engine::Variable::ObjectValue.new(deserialized_object, serialized_value,
|
|
129
|
+
@serialization_data_format, object_type_name, true)
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def create_serialized_value(serialized_value, typed_value_field)
|
|
133
|
+
object_type_name = read_object_name_from_fields(typed_value_field)
|
|
134
|
+
Engine::Variable::ObjectValue.new(nil, serialized_value,
|
|
135
|
+
@serialization_data_format, object_type_name, false)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def read_object_name_from_fields(typed_value_field)
|
|
139
|
+
(typed_value_field.value_info || {})[VALUE_INFO_OBJECT_TYPE_NAME]
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def logger
|
|
143
|
+
Client::Impl::ExternalTaskClientLogger.client_logger
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "../abstract_typed_value_mapper"
|
|
4
|
+
|
|
5
|
+
module Operaton
|
|
6
|
+
module Bpm
|
|
7
|
+
module Client
|
|
8
|
+
module Variable
|
|
9
|
+
module Impl
|
|
10
|
+
module Mapper
|
|
11
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.PrimitiveValueMapper
|
|
12
|
+
class PrimitiveValueMapper < AbstractTypedValueMapper
|
|
13
|
+
def read_value(typed_value_field, _deserialize_object_value = true)
|
|
14
|
+
read_typed_value(typed_value_field)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Subclasses implement the single-argument variant, mirroring the
|
|
18
|
+
# Java abstract readValue(TypedValueField).
|
|
19
|
+
def read_typed_value(typed_value_field)
|
|
20
|
+
raise NotImplementedError
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
protected
|
|
24
|
+
|
|
25
|
+
def assignable?(value)
|
|
26
|
+
value_type.assignable?(value)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def can_write_value(typed_value)
|
|
30
|
+
value = typed_value.value
|
|
31
|
+
value.nil? || assignable?(value)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def can_read_value(typed_value_field)
|
|
35
|
+
value = typed_value_field.value
|
|
36
|
+
value.nil? || assignable?(value)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "number_value_mapper"
|
|
4
|
+
require_relative "../../../../engine/variable/variables"
|
|
5
|
+
|
|
6
|
+
module Operaton
|
|
7
|
+
module Bpm
|
|
8
|
+
module Client
|
|
9
|
+
module Variable
|
|
10
|
+
module Impl
|
|
11
|
+
module Mapper
|
|
12
|
+
# Mirrors org.operaton.bpm.client.variable.impl.mapper.ShortValueMapper
|
|
13
|
+
class ShortValueMapper < NumberValueMapper
|
|
14
|
+
def initialize
|
|
15
|
+
super(Engine::Variable::ValueType::SHORT)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def convert_to_typed_value(untyped_value)
|
|
19
|
+
Engine::Variable::Variables.short_value(untyped_value.value)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def write_value(short_value, typed_value_field)
|
|
23
|
+
typed_value_field.value = short_value.value
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def read_typed_value(typed_value_field)
|
|
27
|
+
value = typed_value_field.value
|
|
28
|
+
Engine::Variable::Variables.short_value(value.nil? ? nil : Integer(value))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|