Module: RGen::XSD::MetamodelModificationHelper

Defined in:
lib/rgen/xsd/metamodel_modification_helper.rb

Instance Method Summary collapse

Instance Method Details

#attribute_to_reference(env, desc, target) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/rgen/xsd/metamodel_modification_helper.rb', line 12

def attribute_to_reference(env, desc, target)
  a = find_feature(env, desc)
  r = env.new(RGen::ECore::EReference, Hash[
    RGen::ECore::EStructuralFeature.ecore.eAllStructuralFeatures.collect do |f| 
      next if f.derived
      p = [f.name, a.getGeneric(f.name)]
      if f.many
        a.setGeneric(f.name, [])
      else
        a.setGeneric(f.name, nil)
      end
      p
    end])
  r.eType = target
  r
end

#create_opposite(env, desc, name, upper_bound) ⇒ Object



29
30
31
32
33
34
# File 'lib/rgen/xsd/metamodel_modification_helper.rb', line 29

def create_opposite(env, desc, name, upper_bound)
  r = find_feature(env, desc)
  r.eOpposite = 
    env.new(RGen::ECore::EReference, :name => name, :eType => r.eContainingClass, 
      :eContainingClass => r.eType, :upperBound => upper_bound, :eOpposite => r)
end

#find_feature(env, desc) ⇒ Object



7
8
9
10
# File 'lib/rgen/xsd/metamodel_modification_helper.rb', line 7

def find_feature(env, desc)
  env.find(:class => RGen::ECore::EStructuralFeature, :name => desc.split("#").last).
    find{|f| f.eContainingClass.name == desc.split("#").first}
end