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.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +134 -0
  3. data/lib/operaton/bpm/client/backoff/backoff_strategy.rb +20 -0
  4. data/lib/operaton/bpm/client/backoff/error_aware_backoff_strategy.rb +22 -0
  5. data/lib/operaton/bpm/client/backoff/exponential_backoff_strategy.rb +38 -0
  6. data/lib/operaton/bpm/client/backoff/exponential_error_backoff_strategy.rb +38 -0
  7. data/lib/operaton/bpm/client/exceptions.rb +74 -0
  8. data/lib/operaton/bpm/client/external_task_client.rb +20 -0
  9. data/lib/operaton/bpm/client/external_task_client_builder.rb +18 -0
  10. data/lib/operaton/bpm/client/impl/engine_client.rb +132 -0
  11. data/lib/operaton/bpm/client/impl/engine_client_exception.rb +25 -0
  12. data/lib/operaton/bpm/client/impl/engine_client_logger.rb +54 -0
  13. data/lib/operaton/bpm/client/impl/engine_rest_exception_dto.rb +28 -0
  14. data/lib/operaton/bpm/client/impl/external_task_client_builder_impl.rb +349 -0
  15. data/lib/operaton/bpm/client/impl/external_task_client_impl.rb +41 -0
  16. data/lib/operaton/bpm/client/impl/external_task_client_logger.rb +236 -0
  17. data/lib/operaton/bpm/client/impl/object_mapper.rb +44 -0
  18. data/lib/operaton/bpm/client/impl/permanent_url_resolver.rb +22 -0
  19. data/lib/operaton/bpm/client/impl/request_dto.rb +24 -0
  20. data/lib/operaton/bpm/client/impl/request_executor.rb +143 -0
  21. data/lib/operaton/bpm/client/interceptor/auth/basic_auth_provider.rb +42 -0
  22. data/lib/operaton/bpm/client/interceptor/client_request_context.rb +16 -0
  23. data/lib/operaton/bpm/client/interceptor/client_request_interceptor.rb +18 -0
  24. data/lib/operaton/bpm/client/interceptor/impl/client_request_context_impl.rb +28 -0
  25. data/lib/operaton/bpm/client/interceptor/impl/request_interceptor_handler.rb +43 -0
  26. data/lib/operaton/bpm/client/spi/data_format.rb +32 -0
  27. data/lib/operaton/bpm/client/spi/data_format_configurator.rb +31 -0
  28. data/lib/operaton/bpm/client/spi/data_format_provider.rb +31 -0
  29. data/lib/operaton/bpm/client/task/external_task.rb +22 -0
  30. data/lib/operaton/bpm/client/task/external_task_handler.rb +28 -0
  31. data/lib/operaton/bpm/client/task/external_task_service.rb +18 -0
  32. data/lib/operaton/bpm/client/task/impl/dto/bpmn_error_request_dto.rb +35 -0
  33. data/lib/operaton/bpm/client/task/impl/dto/complete_request_dto.rb +33 -0
  34. data/lib/operaton/bpm/client/task/impl/dto/extend_lock_request_dto.rb +29 -0
  35. data/lib/operaton/bpm/client/task/impl/dto/failure_request_dto.rb +43 -0
  36. data/lib/operaton/bpm/client/task/impl/dto/lock_request_dto.rb +29 -0
  37. data/lib/operaton/bpm/client/task/impl/dto/set_variables_request_dto.rb +29 -0
  38. data/lib/operaton/bpm/client/task/impl/external_task_impl.rb +128 -0
  39. data/lib/operaton/bpm/client/task/impl/external_task_service_impl.rb +90 -0
  40. data/lib/operaton/bpm/client/task/ordering_config.rb +78 -0
  41. data/lib/operaton/bpm/client/task/sorting_dto.rb +29 -0
  42. data/lib/operaton/bpm/client/topic/impl/dto/fetch_and_lock_request_dto.rb +47 -0
  43. data/lib/operaton/bpm/client/topic/impl/dto/fetch_and_lock_response_dto.rb +32 -0
  44. data/lib/operaton/bpm/client/topic/impl/dto/topic_request_dto.rb +70 -0
  45. data/lib/operaton/bpm/client/topic/impl/topic_subscription_builder_impl.rb +164 -0
  46. data/lib/operaton/bpm/client/topic/impl/topic_subscription_impl.rb +76 -0
  47. data/lib/operaton/bpm/client/topic/impl/topic_subscription_manager.rb +222 -0
  48. data/lib/operaton/bpm/client/topic/impl/topic_subscription_manager_logger.rb +52 -0
  49. data/lib/operaton/bpm/client/topic/topic_subscription.rb +20 -0
  50. data/lib/operaton/bpm/client/topic/topic_subscription_builder.rb +22 -0
  51. data/lib/operaton/bpm/client/url_resolver.rb +15 -0
  52. data/lib/operaton/bpm/client/variable/client_values.rb +33 -0
  53. data/lib/operaton/bpm/client/variable/impl/abstract_typed_value_mapper.rb +59 -0
  54. data/lib/operaton/bpm/client/variable/impl/default_value_mappers.rb +71 -0
  55. data/lib/operaton/bpm/client/variable/impl/format/json/json_data_format.rb +82 -0
  56. data/lib/operaton/bpm/client/variable/impl/format/json/json_data_format_provider.rb +34 -0
  57. data/lib/operaton/bpm/client/variable/impl/mapper/boolean_value_mapper.rb +35 -0
  58. data/lib/operaton/bpm/client/variable/impl/mapper/byte_array_value_mapper.rb +53 -0
  59. data/lib/operaton/bpm/client/variable/impl/mapper/date_value_mapper.rb +61 -0
  60. data/lib/operaton/bpm/client/variable/impl/mapper/double_value_mapper.rb +36 -0
  61. data/lib/operaton/bpm/client/variable/impl/mapper/file_value_mapper.rb +73 -0
  62. data/lib/operaton/bpm/client/variable/impl/mapper/integer_value_mapper.rb +36 -0
  63. data/lib/operaton/bpm/client/variable/impl/mapper/json_value_mapper.rb +35 -0
  64. data/lib/operaton/bpm/client/variable/impl/mapper/long_value_mapper.rb +36 -0
  65. data/lib/operaton/bpm/client/variable/impl/mapper/null_value_mapper.rb +45 -0
  66. data/lib/operaton/bpm/client/variable/impl/mapper/number_value_mapper.rb +25 -0
  67. data/lib/operaton/bpm/client/variable/impl/mapper/object_value_mapper.rb +151 -0
  68. data/lib/operaton/bpm/client/variable/impl/mapper/primitive_value_mapper.rb +44 -0
  69. data/lib/operaton/bpm/client/variable/impl/mapper/short_value_mapper.rb +36 -0
  70. data/lib/operaton/bpm/client/variable/impl/mapper/string_value_mapper.rb +35 -0
  71. data/lib/operaton/bpm/client/variable/impl/mapper/xml_value_mapper.rb +35 -0
  72. data/lib/operaton/bpm/client/variable/impl/type/json_type_impl.rb +24 -0
  73. data/lib/operaton/bpm/client/variable/impl/type/xml_type_impl.rb +24 -0
  74. data/lib/operaton/bpm/client/variable/impl/typed_value_field.rb +36 -0
  75. data/lib/operaton/bpm/client/variable/impl/typed_values.rb +100 -0
  76. data/lib/operaton/bpm/client/variable/impl/value/deferred_file_value_impl.rb +57 -0
  77. data/lib/operaton/bpm/client/variable/impl/value/json_value_impl.rb +26 -0
  78. data/lib/operaton/bpm/client/variable/impl/value/xml_value_impl.rb +26 -0
  79. data/lib/operaton/bpm/client/variable/impl/value_mapper.rb +42 -0
  80. data/lib/operaton/bpm/client/variable/impl/value_mappers.rb +26 -0
  81. data/lib/operaton/bpm/client/variable/impl/variable_value.rb +55 -0
  82. data/lib/operaton/bpm/client/variable/value/deferred_file_value.rb +19 -0
  83. data/lib/operaton/bpm/client/variable/value/json_value.rb +16 -0
  84. data/lib/operaton/bpm/client/variable/value/xml_value.rb +16 -0
  85. data/lib/operaton/bpm/client/version.rb +9 -0
  86. data/lib/operaton/bpm/client.rb +121 -0
  87. data/lib/operaton/bpm/engine/variable/typed_value.rb +153 -0
  88. data/lib/operaton/bpm/engine/variable/value_type.rb +126 -0
  89. data/lib/operaton/bpm/engine/variable/variable_map.rb +72 -0
  90. data/lib/operaton/bpm/engine/variable/variables.rb +197 -0
  91. data/lib/operaton-bpm-client.rb +3 -0
  92. 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