Class: Operaton::Bpm::Client::Variable::Impl::DefaultValueMappers

Inherits:
Object
  • Object
show all
Includes:
ValueMappers
Defined in:
lib/operaton/bpm/client/variable/impl/default_value_mappers.rb

Overview

Mirrors org.operaton.bpm.client.variable.impl.DefaultValueMappers

Instance Method Summary collapse

Constructor Details

#initialize(default_serialization_format) ⇒ DefaultValueMappers

Returns a new instance of DefaultValueMappers.



15
16
17
18
# File 'lib/operaton/bpm/client/variable/impl/default_value_mappers.rb', line 15

def initialize(default_serialization_format)
  @serializer_list = []
  @default_serialization_format = default_serialization_format
end

Instance Method Details

#add_mapper(serializer) ⇒ Object



56
57
58
59
# File 'lib/operaton/bpm/client/variable/impl/default_value_mappers.rb', line 56

def add_mapper(serializer)
  @serializer_list << serializer
  self
end

#find_mapper_for_typed_value(typed_value) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/operaton/bpm/client/variable/impl/default_value_mappers.rb', line 20

def find_mapper_for_typed_value(typed_value)
  type = typed_value.type
  raise logger.value_mapper_exception_while_serializing_abstract_value(type.name) if type&.abstract?

  matched_serializers = []
  @serializer_list.each do |serializer|
    next unless serializer.can_handle_typed_value(typed_value)

    matched_serializers << serializer
    break if serializer.type.primitive_value_type?
  end

  case matched_serializers.size
  when 1
    matched_serializers.first
  when 0
    raise logger.value_mapper_exception_due_to_serializer_not_found_for_typed_value(typed_value)
  else
    # ambiguous match, use default serializer
    matched_serializers.find { |s| s.serialization_dataformat == @default_serialization_format } ||
      matched_serializers.first
  end
end

#find_mapper_for_typed_value_field(typed_value_field) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
# File 'lib/operaton/bpm/client/variable/impl/default_value_mappers.rb', line 44

def find_mapper_for_typed_value_field(typed_value_field)
  matched_serializer = @serializer_list.find { |s| s.can_handle_typed_value_field(typed_value_field) }

  if matched_serializer.nil?
    raise logger.value_mapper_exception_due_to_serializer_not_found_for_typed_value_field(
      typed_value_field.value
    )
  end

  matched_serializer
end