def createObject(hash)
className = hash["_class"]
return hash unless className
if @classes[className]
clazz = @classes[className].instanceClass
elsif @short_class_names && @classes_flat[className]
clazz = @classes_flat[className].instanceClass
else
raise "class not found: #{className}"
end
hash.delete("_class")
@ignore_keys.each do |k|
hash.delete(k)
end
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