Top Level Namespace

Defined Under Namespace

Modules: CodeModels, EMF, EObjectUtil, JSON Classes: Model

Instance Method Summary collapse

Instance Method Details

#jsonize_attr_value(map, e_object, e_attr) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/emf/emf_to_json.rb', line 12

def jsonize_attr_value(map,e_object,e_attr)
  value = e_object.eGet e_attr
  if e_attr.upperBound==1
    map["attr_#{e_attr.name}"] = value
  else
    l = []
    (0..(value.size-1)).each do |i|
      l << value.get(i)
    end
    map["attr_#{e_attr.name}"] = l
  end
end

#jsonize_obj(e_object, adapters = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/emf/emf_to_json.rb', line 50

def jsonize_obj(e_object, adapters={})
  if not e_object
    nil
  else 
    map = { 'type' => qname(e_object), 'id' => serialization_id(e_object) }
    e_class = e_object.eClass
    e_class.eAllAttributes.each do |a|    
      jsonize_attr_value(map,e_object,a)
    end
    e_class.eAllReferences.each do |r|
      #puts "ref #{r.name} #{r.containment}"
      jsonize_ref_value(map,e_object,r,adapters)
    end
    if adapters.has_key? qname(e_object)
      adapters[qname(e_object)].adapt(e_object,map)
    end
    map
  end
end

#jsonize_ref_single_el(single_value, containment, adapters) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/emf/emf_to_json.rb', line 25

def jsonize_ref_single_el(single_value,containment,adapters)
  if containment
    jsonize_obj(single_value,adapters)
  else
    serialization_id(single_value)
  end
end

#jsonize_ref_value(map, e_object, e_ref, adapters) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/emf/emf_to_json.rb', line 33

def jsonize_ref_value(map,e_object,e_ref,adapters)
  value = e_object.eGet e_ref

  propname = "relcont_#{e_ref.name}" if e_ref.containment
  propname = "relnoncont_#{e_ref.name}" if not e_ref.containment

  if e_ref.upperBound==1   
    map[propname] = jsonize_ref_single_el(value,e_ref.containment,adapters)
  else
    l = []
    (0..(value.size-1)).each do |i|
      l << jsonize_ref_single_el(value.get(i),e_ref.containment,adapters)
    end
    map[propname] = l
  end
end

#qname(e_object) ⇒ Object



6
7
8
9
10
# File 'lib/emf/emf_to_json.rb', line 6

def qname(e_object)
  e_class = e_object.eClass
  e_package = e_class.ePackage
  "#{e_package.nsURI}##{e_class.name}"
end

#serialization_id(obj) ⇒ Object



4
5
6
7
8
9
10
# File 'lib/emf/ast_serialization.rb', line 4

def serialization_id(obj)
  unless $serialization_ids[obj]   
    $serialization_ids[obj] = $next_serialization_id
    $next_serialization_id += 1
  end
  $serialization_ids[obj]
end