File: ea_support.rb

package info (click to toggle)
ruby-rgen 0.10.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,428 kB
  • sloc: ruby: 11,344; xml: 1,368; yacc: 72; makefile: 10
file content (54 lines) | stat: -rw-r--r-- 1,748 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
require 'ea_support/uml13_ea_metamodel'
require 'ea_support/uml13_ea_metamodel_ext'
require 'ea_support/uml13_to_uml13_ea'
require 'ea_support/uml13_ea_to_uml13'
require 'ea_support/id_store'
require 'rgen/serializer/xmi11_serializer'
require 'rgen/instantiator/xmi11_instantiator'
require 'rgen/environment'

module EASupport
  
  FIXMAP = {
    :tags => {
      "EAStub" => proc { |tag, attr| 
        UML13EA::Class.new(:name => attr["name"]) if attr["UMLType"] == "Class"
      }
    }
  }
  
  INFO = XMI11Instantiator::INFO
  WARN = XMI11Instantiator::WARN
  ERROR = XMI11Instantiator::ERROR
  
  def self.instantiateUML13FromXMI11(envUML, fileName, options={})
    envUMLEA = RGen::Environment.new
    xmiInst = XMI11Instantiator.new(envUMLEA, FIXMAP, options[:loglevel] || ERROR)
    xmiInst.add_metamodel("omg.org/UML1.3", UML13EA)
    File.open(fileName) do |f|
      xmiInst.instantiate(f.read)
    end
    trans = UML13EAToUML13.new(envUMLEA, envUML)
    trans.transform
    trans.cleanModel if options[:clean_model]
  end

  def self.serializeUML13ToXMI11(envUML, fileName, options={})
    envUMLEA = RGen::Environment.new
    
    UML13EA.idStore = options[:keep_ids] ? 
      IdStore.new(File.dirname(fileName)+"/"+File.basename(fileName)+".ids") : IdStore.new
    
    UML13ToUML13EA.new(envUML, envUMLEA).transform
    
    File.open(fileName, "w") do |f|
      xmiSer = RGen::Serializer::XMI11Serializer.new(f)
      xmiSer.setNamespace("UML","omg.org/UML1.3")
      xmiSer.serialize(envUMLEA.find(:class => UML13EA::Model).first, 
        {:documentation => {:exporter => "Enterprise Architect", :exporterVersion => "2.5"}})
    end
    
    UML13EA.idStore.store
  end
  
end