def associateWithContextElement(element, contextElement, asRole)
return unless contextElement
contextClass = contextElement.class.ecore
if asRole
asRoleRef = eAllReferences(contextClass).find{|r| r.name == asRole.to_s}
raise "Context class #{contextClass.name} has no reference named #{asRole}" unless asRoleRef
ref = asRoleRef
else
possibleContainmentRefs = containmentRefs(contextClass, element.class.ecore)
if possibleContainmentRefs.size == 1
ref = possibleContainmentRefs.first
elsif possibleContainmentRefs.size == 0
raise "Context class #{contextClass.name} can not contain a #{element.class.ecore.name}"
else
raise "Context class #{contextClass.name} has several containment references to a #{element.class.ecore.name}." +
" Clearify using \":as => <role>\""
end
end
if ref.many
contextElement.addGeneric(ref.name, element)
else
contextElement.setGeneric(ref.name, element)
end
end