def evaluate_pattern(name, env, connection_points)
prok = @patterns[name]
raise "unknown pattern #{name}" unless prok
raise "wrong number of arguments, expected #{prok.arity-1} connection points)" \
unless connection_points.size == prok.arity-1
prok.call(env, *connection_points)
end
def disconnect_element(element)
return if element.nil?
all_structural_features(element).each do |f|
if f.many
element.setGeneric(f.name, [])
else
element.setGeneric(f.name, nil)
end
end
end
def all_structural_features(element)
@all_structural_features ||= {}
return @all_structural_features[element.class] if @all_structural_features[element.class]
@all_structural_features[element.class] =
element.class.ecore.eAllStructuralFeatures.reject{|f| f.derived}
end
end