xmimodel 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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