Class: RGen::Instantiator::JsonInstantiator

Inherits:
Object
  • Object
show all
Defined in:
lib/rgen/instantiator/json_instantiator.rb

Instance Method Summary collapse

Constructor Details

#initialize(env, mm, options = {}) ⇒ JsonInstantiator

Returns a new instance of JsonInstantiator.



10
11
12
13
14
15
16
# File 'lib/rgen/instantiator/json_instantiator.rb', line 10

def initialize(env, mm, options={})
  @env = env
  @mm = mm
  @options = options
  @unresolvedReferences = []
  @parser = JsonParser.new(self)
end

Instance Method Details

#createObject(hash) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/rgen/instantiator/json_instantiator.rb', line 27

def createObject(hash)
  className = hash["_class"]
  raise "no class information" unless className
  clazz = @mm.const_get(className)
  raise "class not found: #{className}" unless clazz
  hash.delete("_class")
  urefs = []
  hash.keys.each do |k|
    f = eFeature(k, clazz)
    hash[k] = [hash[k]] if f.many && !hash[k].is_a?(Array)
    if f.is_a?(RGen::ECore::EReference) && !f.containment
      if f.many
        idents = hash[k]
        hash[k] = idents.collect do |i|
          proxy = RGen::MetamodelBuilder::MMProxy.new(i)
          urefs << ReferenceResolver::UnresolvedReference.new(nil, k, proxy)
          proxy
        end
      else
        ident = hash[k]
        ident = ident.first if ident.is_a?(Array)
        proxy = RGen::MetamodelBuilder::MMProxy.new(ident)
        hash[k] = proxy
        urefs << ReferenceResolver::UnresolvedReference.new(nil, k, proxy)
      end
    elsif f.eType.is_a?(RGen::ECore::EEnum)
      hash[k] = hash[k].to_sym
    elsif f.eType.instanceClassName == "Float"
      hash[k] = hash[k].to_f
    end
  end  
  obj = @env.new(clazz, hash)
  urefs.each do |r|
    r.element = obj
    @unresolvedReferences << r 
  end
  obj
end

#instantiate(str) ⇒ Object

creates the elements described by the json string str returns an array of ReferenceResolver::UnresolvedReference describing the references which could not be resolved



21
22
23
24
25
# File 'lib/rgen/instantiator/json_instantiator.rb', line 21

def instantiate(str)
  root = @parser.parse(str)
  resolver = QualifiedNameResolver.new(root, @options)
  resolver.resolveReferences(@unresolvedReferences)
end