xmimodel 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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,16 @@
1
+ require 'xmimodel/state'
2
+
3
+ class PseudoState < State
4
+
5
+ attr_reader :kind
6
+
7
+ def initialize(xml, activity_graph)
8
+ super(xml, activity_graph)
9
+
10
+ @kind = xml.attribute("kind").to_s
11
+ end
12
+
13
+ def to_s
14
+ "PseudoState"
15
+ end
16
+ 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