def set_attribute(attr, value)
return unless @elementstack.last
if attr == "xmi.id"
@element_by_id[value] = @elementstack.last
else
attr_name = map_feature_name(attr) || attr
eFeat = eAllStructuralFeatures(@elementstack.last).find{|a| a.name == attr_name}
unless eFeat
log WARN, "No structural feature found for #{attr_name} on #{@elementstack.last}"
return
end
if eFeat.is_a?(RGen::ECore::EReference)
if map_feature_value(attr_name, value).is_a?(eFeat.eType.instanceClass)
@elementstack.last.setGeneric(attr_name, map_feature_value(attr_name, value))
else
rd = ResolverDescription.new
rd.object = @elementstack.last
rd.attribute = attr_name
rd.value = value
rd.many = eFeat.many
@resolver_descs << rd
end
else
value = map_feature_value(attr_name, value) || value
value = true if value == "true" && eFeat.eType == EBoolean
value = false if value == "false" && eFeat.eType == EBoolean
value = value.to_i if eFeat.eType == EInt
value = value.to_f if eFeat.eType == EFloat
value = value.to_sym if eFeat.eType.is_a?(EEnum)
@elementstack.last.setGeneric(attr_name, value)
end
end
end