xmimodel 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/xmimodel.rb +205 -0
- data/lib/xmimodel/action_state.rb +17 -0
- data/lib/xmimodel/activity_graph.rb +81 -0
- data/lib/xmimodel/association.rb +26 -0
- data/lib/xmimodel/attribute.rb +76 -0
- data/lib/xmimodel/clazz.rb +123 -0
- data/lib/xmimodel/data_type.rb +21 -0
- data/lib/xmimodel/final_state.rb +13 -0
- data/lib/xmimodel/generalization.rb +36 -0
- data/lib/xmimodel/namespace.rb +373 -0
- data/lib/xmimodel/operation.rb +51 -0
- data/lib/xmimodel/package.rb +84 -0
- data/lib/xmimodel/parameter.rb +55 -0
- data/lib/xmimodel/pseudo_state.rb +16 -0
- data/lib/xmimodel/signal_event.rb +41 -0
- data/lib/xmimodel/state.rb +66 -0
- data/lib/xmimodel/stereotype.rb +52 -0
- data/lib/xmimodel/tagged_value.rb +41 -0
- data/lib/xmimodel/transition.rb +64 -0
- data/lib/xmimodel/use_case.rb +85 -0
- data/lib/xmimodel/xmihelper.rb +683 -0
- metadata +66 -0
@@ -0,0 +1,84 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'xmimodel/clazz'
|
4
|
+
require 'xmimodel/use_case'
|
5
|
+
require 'xmimodel/namespace'
|
6
|
+
|
7
|
+
class Package
|
8
|
+
|
9
|
+
attr_reader :xml
|
10
|
+
|
11
|
+
attr_reader :name
|
12
|
+
attr_reader :full_name
|
13
|
+
attr_reader :parent_package
|
14
|
+
|
15
|
+
attr_reader :namespace
|
16
|
+
|
17
|
+
def initialize(xml, parent)
|
18
|
+
|
19
|
+
@xml = xml
|
20
|
+
@parent_package = parent.parent unless parent.nil?
|
21
|
+
|
22
|
+
@name = xml.attribute("name").to_s
|
23
|
+
@full_name = XmiHelper.full_package_name(xml)
|
24
|
+
|
25
|
+
if XmiHelper.has_namespace?(xml)
|
26
|
+
namespace = XmiHelper.namespace(xml)
|
27
|
+
@namespace = Namespace.new(namespace, self) unless namespace.nil?
|
28
|
+
end
|
29
|
+
|
30
|
+
self
|
31
|
+
end
|
32
|
+
|
33
|
+
def activity_graphs
|
34
|
+
return Array.new if @namespace.nil?
|
35
|
+
@namespace.activity_graphs
|
36
|
+
end
|
37
|
+
|
38
|
+
def classes
|
39
|
+
return Array.new if @namespace.nil?
|
40
|
+
@namespace.classes
|
41
|
+
end
|
42
|
+
|
43
|
+
def class_by_name(name)
|
44
|
+
return nil if @namespace.nil?
|
45
|
+
clazz = @namespace.classes.select{|c| c.name == name}
|
46
|
+
return clazz[0] if !clazz.nil? && clazz.size > 0
|
47
|
+
nil
|
48
|
+
end
|
49
|
+
|
50
|
+
def packages
|
51
|
+
return Array.new if @namespace.nil?
|
52
|
+
@namespace.packages
|
53
|
+
end
|
54
|
+
|
55
|
+
def use_cases
|
56
|
+
return Array.new if @namespace.nil?
|
57
|
+
@namespace.use_cases
|
58
|
+
end
|
59
|
+
|
60
|
+
def use_case_by_name(name)
|
61
|
+
return nil if @namespace.nil?
|
62
|
+
use_case = @namespace.use_cases.select{|u| u.name == name}
|
63
|
+
return use_case[0] if !use_case.nil? && use_case.size > 0
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
|
67
|
+
def <=>(obj)
|
68
|
+
@full_name <=> obj.full_name
|
69
|
+
end
|
70
|
+
|
71
|
+
def ==(obj)
|
72
|
+
return false if obj.nil?
|
73
|
+
if String == obj.class
|
74
|
+
@full_name == obj
|
75
|
+
else
|
76
|
+
@full_name == obj.full_name
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def to_s
|
81
|
+
"Package[#{@full_name}]"
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
class Parameter
|
3
|
+
|
4
|
+
attr_reader :xml
|
5
|
+
attr_reader :owner
|
6
|
+
|
7
|
+
attr_reader :id
|
8
|
+
attr_reader :name
|
9
|
+
attr_reader :kind
|
10
|
+
|
11
|
+
attr_reader :stereotypes
|
12
|
+
attr_reader :tagged_values
|
13
|
+
|
14
|
+
def initialize(xml, owner)
|
15
|
+
@xml = xml
|
16
|
+
@owner = owner
|
17
|
+
|
18
|
+
@id = xml.attribute("xmi:id").to_s
|
19
|
+
@name = xml.attribute("name").to_s
|
20
|
+
@kind = xml.attribute("kind").to_s
|
21
|
+
|
22
|
+
@stereotypes = Array.new
|
23
|
+
XmiHelper.stereotypes(xml).each do |uml_stereotype|
|
24
|
+
stereotype = Stereotype.new(uml_stereotype, self)
|
25
|
+
@stereotypes << stereotype
|
26
|
+
end
|
27
|
+
|
28
|
+
@tagged_values = Array.new
|
29
|
+
XmiHelper.tagged_values(xml).each do |uml_tagged_value|
|
30
|
+
tagged_value = TaggedValue.new(uml_tagged_value, self)
|
31
|
+
@tagged_values << tagged_value
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def tagged_value_by_name(tagged_value_name)
|
36
|
+
tagged_value = @tagged_values.select{|obj| obj.name == tagged_value_name}
|
37
|
+
return tagged_value[0] if !tagged_value.nil? && tagged_value.size > 0
|
38
|
+
nil
|
39
|
+
end
|
40
|
+
|
41
|
+
def stereotype_by_name(name)
|
42
|
+
stereotype = @stereotypes.select{|obj| obj.name == name}
|
43
|
+
return stereotype[0] if !stereotype.nil? && stereotype.size > 0
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
|
47
|
+
def full_name
|
48
|
+
return "#{@owner.full_name}::#{@kind}" if (@name.nil? || @name.empty?)
|
49
|
+
return "#{@owner.full_name}::#{@name}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_s
|
53
|
+
"Parameter[#{full_name}]"
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'xmimodel/parameter'
|
2
|
+
|
3
|
+
class SignalEvent
|
4
|
+
|
5
|
+
attr_reader :xml
|
6
|
+
|
7
|
+
attr_reader :id
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
attr_reader :parameters
|
11
|
+
|
12
|
+
attr_reader :use_case
|
13
|
+
|
14
|
+
def initialize(xml, use_case)
|
15
|
+
@xml = xml
|
16
|
+
@use_case = use_case.parent
|
17
|
+
|
18
|
+
@id = xml.attribute("xmi:id").to_s
|
19
|
+
@name = xml.attribute("name").to_s
|
20
|
+
|
21
|
+
@parameters = Array.new
|
22
|
+
XmiHelper.parameters(xml).each do |uml_parameter|
|
23
|
+
parameter = Parameter.new(uml_parameter, self)
|
24
|
+
@parameters << parameter
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def parameter_by_name(name)
|
29
|
+
parameter = @parameters.select{|obj| obj.name == name}
|
30
|
+
return parameter[0] if !parameter.nil? && parameter.size > 0
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def full_name
|
35
|
+
"#{use_case.full_name}::#{name}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
"SignalEvent[#{full_name}]"
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
|
2
|
+
class State
|
3
|
+
|
4
|
+
attr_reader :xml
|
5
|
+
attr_reader :activity_graph
|
6
|
+
|
7
|
+
attr_reader :id
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
attr_reader :stereotypes
|
11
|
+
attr_reader :tagged_values
|
12
|
+
|
13
|
+
def initialize(xml, activity_graph)
|
14
|
+
@xml = xml
|
15
|
+
@activity_graph = activity_graph
|
16
|
+
|
17
|
+
@id = xml.attribute("xmi.id").to_s
|
18
|
+
@name = xml.attribute("name").to_s
|
19
|
+
|
20
|
+
if @name.nil? || @name.empty?
|
21
|
+
|
22
|
+
if xml.name == "Pseudostate"
|
23
|
+
if xml.attribute("kind").to_s == "initial"
|
24
|
+
@name = "Initial State"
|
25
|
+
else
|
26
|
+
@name = "Decision Point"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
@name = "Final State" if xml.name == "FinalState"
|
30
|
+
elsif xml.name == "FinalState"
|
31
|
+
@name = "Final State [#{@name}]"
|
32
|
+
end
|
33
|
+
|
34
|
+
@stereotypes = Array.new
|
35
|
+
XmiHelper.stereotypes(xml).each do |uml_stereotype|
|
36
|
+
stereotype = Stereotype.new(uml_stereotype, self)
|
37
|
+
@stereotypes << stereotype
|
38
|
+
end
|
39
|
+
|
40
|
+
@tagged_values = Array.new
|
41
|
+
XmiHelper.tagged_values(xml).each do |uml_tagged_value|
|
42
|
+
tagged_value = TaggedValue.new(uml_tagged_value, self)
|
43
|
+
@tagged_values << tagged_value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def stereotype_by_name(name)
|
48
|
+
stereotype = @stereotypes.select{|obj| obj.name == name}
|
49
|
+
return stereotype[0] if !stereotype.nil? && stereotype.size > 0
|
50
|
+
nil
|
51
|
+
end
|
52
|
+
|
53
|
+
def tagged_value_by_name(tagged_value_name)
|
54
|
+
tagged_value = @tagged_values.select{|obj| obj.name == tagged_value_name}
|
55
|
+
return tagged_value[0] if !tagged_value.nil? && tagged_value.size > 0
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
|
59
|
+
def full_name
|
60
|
+
"#{@activity_graph.full_name} {'#{@name}'}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_s
|
64
|
+
"State[#{full_name}]"
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
|
2
|
+
class Stereotype
|
3
|
+
|
4
|
+
attr_reader :xml
|
5
|
+
attr_reader :href
|
6
|
+
|
7
|
+
def initialize(xml, owner)
|
8
|
+
@xml = xml
|
9
|
+
@owner = owner
|
10
|
+
|
11
|
+
@id = xml.attribute("xmi.id").to_s
|
12
|
+
@name = xml.attribute("name").to_s
|
13
|
+
@href = xml.attribute("href").to_s
|
14
|
+
@idref = xml.attribute("xmi.idref").to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def <=>(obj)
|
18
|
+
href <=> obj.href
|
19
|
+
end
|
20
|
+
|
21
|
+
def name
|
22
|
+
return @name unless (@name.nil? or @name.empty?)
|
23
|
+
|
24
|
+
@name = XmiHelper.extension_referent_path_value(xml)
|
25
|
+
|
26
|
+
if @name.empty?
|
27
|
+
# Se 'xmi.idref' não for null, o documento irá apontar para o id de outra tag
|
28
|
+
# UML:Stereotype (que estará dentro de UML:Namespace.ownedElement e não UML:ModelElement.stereotype)
|
29
|
+
id = @idref.empty? ? @href : @idref
|
30
|
+
xml = XmiHelper.stereotype_by_id(@xml, id)
|
31
|
+
if !xml.nil?
|
32
|
+
@id = xml.attribute("xmi.id").to_s
|
33
|
+
@name = xml.attribute("name").to_s
|
34
|
+
@isSpecification = xml.attribute("isSpecification").to_s
|
35
|
+
@isRoot = xml.attribute("isRoot").to_s
|
36
|
+
@isLeaf = xml.attribute("isLeaf").to_s
|
37
|
+
@isAbstract = xml.attribute("isAbstract").to_s
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
if @name.empty?
|
42
|
+
App.logger.warn "Stereotype not found. Id: #{@id}"
|
43
|
+
@name = @href
|
44
|
+
end
|
45
|
+
|
46
|
+
@name
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_s
|
50
|
+
"Stereotype[#{name}]"
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
class TaggedValue
|
3
|
+
|
4
|
+
attr_reader :xml
|
5
|
+
|
6
|
+
attr_reader :id
|
7
|
+
attr_reader :name
|
8
|
+
attr_reader :value
|
9
|
+
|
10
|
+
def initialize(xml, owner)
|
11
|
+
@xml = xml
|
12
|
+
@owner = owner
|
13
|
+
|
14
|
+
@id = xml.attribute("xmi.id").to_s
|
15
|
+
@name = xml.attribute("name").to_s
|
16
|
+
|
17
|
+
if @name.nil? or @name.empty?
|
18
|
+
tag_definition = XmiHelper.taggeg_value_tag_definition(xml)
|
19
|
+
tag_definition_id_ref = tag_definition.attribute("xmi.idref").to_s
|
20
|
+
tag_definition = XmiHelper.tag_definition_by_id(xml, tag_definition_id_ref)
|
21
|
+
@name = tag_definition.attribute("name").to_s
|
22
|
+
end
|
23
|
+
|
24
|
+
@value = XmiHelper.taggeg_value_data_value(xml)
|
25
|
+
@value = XmiHelper.taggeg_value_reference_value(xml) if (@value.nil? || @value.empty?)
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
def ==(obj)
|
30
|
+
return false if obj.nil?
|
31
|
+
if String == obj.class
|
32
|
+
return "#{@name}=#{@value}".eql?(obj)
|
33
|
+
else
|
34
|
+
return @name.eql?(obj.name) && @value.eql?(obj.value)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_s
|
39
|
+
"TaggedValue[#{@name}=#{@value}]"
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'xmimodel/stereotype'
|
2
|
+
require 'xmimodel/tagged_value'
|
3
|
+
|
4
|
+
class Transition
|
5
|
+
|
6
|
+
attr_reader :xml
|
7
|
+
attr_reader :id
|
8
|
+
|
9
|
+
attr_reader :activity_graph
|
10
|
+
|
11
|
+
attr_reader :trigger
|
12
|
+
attr_reader :source
|
13
|
+
attr_reader :target
|
14
|
+
|
15
|
+
attr_reader :stereotypes
|
16
|
+
attr_reader :tagged_values
|
17
|
+
|
18
|
+
attr_reader :guard_condition
|
19
|
+
|
20
|
+
def initialize(xml, activity_graph)
|
21
|
+
@xml = xml
|
22
|
+
@activity_graph = activity_graph
|
23
|
+
|
24
|
+
@id = xml.attribute("xmi.id").to_s
|
25
|
+
@trigger = xml.attribute("trigger").to_s
|
26
|
+
@source = xml.attribute("source").to_s
|
27
|
+
@target = xml.attribute("target").to_s
|
28
|
+
|
29
|
+
@stereotypes = Array.new
|
30
|
+
XmiHelper.stereotypes(xml).each do |uml_stereotype|
|
31
|
+
stereotype = Stereotype.new(uml_stereotype, self)
|
32
|
+
@stereotypes << stereotype
|
33
|
+
end
|
34
|
+
|
35
|
+
@tagged_values = Array.new
|
36
|
+
XmiHelper.tagged_values(xml).each do |uml_tagged_value|
|
37
|
+
tagged_value = TaggedValue.new(uml_tagged_value, self)
|
38
|
+
@tagged_values << tagged_value
|
39
|
+
end
|
40
|
+
|
41
|
+
guard_condition = XmiHelper.guard_condition(xml)
|
42
|
+
@guard_condition = guard_condition.attribute("body").to_s unless guard_condition.nil?
|
43
|
+
end
|
44
|
+
|
45
|
+
def stereotype_by_name(name)
|
46
|
+
stereotype = @stereotypes.select{|s| s.name == name}
|
47
|
+
return stereotype[0] if !stereotype.nil? && stereotype.size > 0
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
|
51
|
+
def tagged_value_by_name(tagged_value_name)
|
52
|
+
tagged_value = @tagged_values.select{|t| t.name == tagged_value_name}
|
53
|
+
return tagged_value[0] if !tagged_value.nil? && tagged_value.size > 0
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
|
57
|
+
def full_name
|
58
|
+
"#{@activity_graph.full_name} #{@source} --> #{@target}"
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_s
|
62
|
+
"Transition[#{full_name}]"
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'xmimodel/activity_graph'
|
2
|
+
require 'xmimodel/stereotype'
|
3
|
+
require 'xmimodel/signal_event'
|
4
|
+
require 'xmimodel/tagged_value'
|
5
|
+
|
6
|
+
class UseCase
|
7
|
+
|
8
|
+
attr_reader :xml
|
9
|
+
attr_reader :package
|
10
|
+
|
11
|
+
attr_reader :id
|
12
|
+
attr_reader :name
|
13
|
+
|
14
|
+
attr_reader :stereotypes
|
15
|
+
attr_reader :tagged_values
|
16
|
+
|
17
|
+
#UML:CallEvent
|
18
|
+
|
19
|
+
def initialize(xml, parent)
|
20
|
+
@xml = xml
|
21
|
+
@package = parent.parent
|
22
|
+
|
23
|
+
@id = xml.attribute("xmi:id").to_s
|
24
|
+
@name = xml.attribute("name").to_s
|
25
|
+
|
26
|
+
if XmiHelper.has_namespace?(xml)
|
27
|
+
namespace = XmiHelper.namespace(xml)
|
28
|
+
@namespace = Namespace.new(namespace, self) unless namespace.nil?
|
29
|
+
end
|
30
|
+
|
31
|
+
@stereotypes = Array.new
|
32
|
+
XmiHelper.stereotypes(xml).each do |uml_stereotype|
|
33
|
+
stereotype = Stereotype.new(uml_stereotype, self)
|
34
|
+
@stereotypes << stereotype
|
35
|
+
end
|
36
|
+
|
37
|
+
@tagged_values = Array.new
|
38
|
+
XmiHelper.tagged_values(xml).each do |uml_tagged_value|
|
39
|
+
tagged_value = TaggedValue.new(uml_tagged_value, self)
|
40
|
+
@tagged_values << tagged_value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def activity_graphs
|
45
|
+
return Array.new if @namespace.nil?
|
46
|
+
@namespace.activity_graphs
|
47
|
+
end
|
48
|
+
|
49
|
+
def activity_graphs_by_name(name)
|
50
|
+
activity_graph = activity_graphs.select{|obj| obj.name == name}
|
51
|
+
return activity_graph[0] if !activity_graph.nil? && activity_graph.size > 0
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
def signal_event_by_name(name)
|
56
|
+
signal_event = signal_events.select{|obj| obj.name == name}
|
57
|
+
return signal_event[0] if !signal_event.nil? && signal_event.size > 0
|
58
|
+
nil
|
59
|
+
end
|
60
|
+
|
61
|
+
def signal_events
|
62
|
+
return Array.new if @namespace.nil?
|
63
|
+
@namespace.signal_events
|
64
|
+
end
|
65
|
+
|
66
|
+
def stereotype_by_name(name)
|
67
|
+
stereotype = @stereotypes.select{|s| s.name == name}
|
68
|
+
return stereotype[0] if !stereotype.nil? && stereotype.size > 0
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def tagged_value_by_name(tagged_value_name)
|
73
|
+
tagged_value = @tagged_values.select{|t| t.name == tagged_value_name}
|
74
|
+
return tagged_value[0] if !tagged_value.nil? && tagged_value.size > 0
|
75
|
+
nil
|
76
|
+
end
|
77
|
+
|
78
|
+
def full_name
|
79
|
+
"#{package.full_name}.#{name}"
|
80
|
+
end
|
81
|
+
|
82
|
+
def to_s
|
83
|
+
"UseCase[#{full_name}]"
|
84
|
+
end
|
85
|
+
end
|