Class: Attribute

Inherits:
Tag
  • Object
show all
Defined in:
lib/xmimodel/attribute.rb

Instance Attribute Summary collapse

Attributes inherited from Tag

#id, #parent_tag, #xml

Instance Method Summary collapse

Methods inherited from Tag

#xml_root

Constructor Details

#initialize(xml, parent_tag) ⇒ Attribute

Returns a new instance of Attribute.


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
55
56
# File 'lib/xmimodel/attribute.rb', line 20

def initialize(xml, parent_tag)
	super(xml, parent_tag)
	
	@clazz = parent_tag

	@name = xml.attribute("name").to_s.strip
	@visibility = xml.attribute("visibility").to_s
	@visibility = "private" if @visibility == ""

	@obj_type = XmiHelper.attribute_type(xml)
	@type = XmiHelper.attribute_type_name(xml)

	#puts "Atributo:: "+ @name
	#puts "Obj Type: "+ @obj_type
	#puts "Type: "+ @type

	@initial_value = XmiHelper.attribute_initial_value(xml)
	@multiplicity_range = XmiHelper.multiplicity_range(xml)

	@stereotypes = Array.new
	stereotype_id = xml.attribute("stereotype").to_s
	if !stereotype_id.empty?
		uml_stereotype = XmiHelper.stereotype_by_id(xml, stereotype_id)
		stereotype = Stereotype.new(uml_stereotype, self)
		@stereotypes << stereotype			
	end		
	XmiHelper.stereotypes(xml).each do |uml_stereotype|
		stereotype = Stereotype.new(uml_stereotype, self)
		@stereotypes << stereotype
	end	

	@tagged_values = Array.new
	XmiHelper.tagged_values(xml).each do |uml_tagged_value|
		tagged_value = TaggedValue.new(uml_tagged_value, self)
		@tagged_values << tagged_value
	end		
end

Instance Attribute Details

#clazzObject (readonly)

Returns the value of attribute clazz


15
16
17
# File 'lib/xmimodel/attribute.rb', line 15

def clazz
  @clazz
end

#initial_valueObject (readonly)

Returns the value of attribute initial_value


12
13
14
# File 'lib/xmimodel/attribute.rb', line 12

def initial_value
  @initial_value
end

#multiplicity_rangeObject (readonly)

Returns the value of attribute multiplicity_range


13
14
15
# File 'lib/xmimodel/attribute.rb', line 13

def multiplicity_range
  @multiplicity_range
end

#nameObject (readonly)

Returns the value of attribute name


9
10
11
# File 'lib/xmimodel/attribute.rb', line 9

def name
  @name
end

#stereotypesObject (readonly)

Returns the value of attribute stereotypes


17
18
19
# File 'lib/xmimodel/attribute.rb', line 17

def stereotypes
  @stereotypes
end

#tagged_valuesObject (readonly)

Returns the value of attribute tagged_values


18
19
20
# File 'lib/xmimodel/attribute.rb', line 18

def tagged_values
  @tagged_values
end

#typeObject (readonly)

Returns the value of attribute type


10
11
12
# File 'lib/xmimodel/attribute.rb', line 10

def type
  @type
end

#visibilityObject

Returns the value of attribute visibility


11
12
13
# File 'lib/xmimodel/attribute.rb', line 11

def visibility
  @visibility
end

Instance Method Details

#==(obj) ⇒ Object


117
118
119
120
121
122
123
124
# File 'lib/xmimodel/attribute.rb', line 117

def ==(obj)
	return false if obj.nil?
	if String == obj.class
		full_name == obj
	else
   		full_name == obj.full_name
   	end
end

#add_xml_tagged_value(xml) ⇒ Object


58
59
60
# File 'lib/xmimodel/attribute.rb', line 58

def add_xml_tagged_value(xml)
	model_element_tagged_value().inner_html = model_element_tagged_value().inner_html + xml
end

#enum_objObject


95
96
97
98
99
# File 'lib/xmimodel/attribute.rb', line 95

def enum_obj
	return @enum_obj unless @enum_obj.nil?
	is_enum?()
	@enum_obj
end

#full_nameObject


101
102
103
# File 'lib/xmimodel/attribute.rb', line 101

def full_name
	"#{@clazz.full_name}::#{@name}"
end

#is_enum?Boolean

def add_tagged_value(name, value) if tagged_values.include? name tag = tagged_value_by_name name else tagged_value = Nokogiri::XML::Node.new('TaggedValue', self.xml.document) tagged_value = tagged_value = name model_element_tagged_value() << tagged_value end tag.value = value end

Returns:

  • (Boolean)

76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/xmimodel/attribute.rb', line 76

def is_enum?
	return false if @obj_type.nil?
	if @obj_type.class == Nokogiri::XML::Element
		
		if @obj_type.name == "Enumeration"
			id = @obj_type.attribute('xmi.id').to_s
			@enum_obj = xml_root.enumeration_by_id(id)
			return true 
		end

		if @obj_type.name == "Class"
			id = @obj_type.attribute('xmi.id').to_s
			@enum_obj = xml_root.class_by_id(id)
			return @enum_obj.stereotypes.include?("org.andromda.profile::Enumeration")
		end
	end		
	false		
end

#stereotype_by_name(name) ⇒ Object


105
106
107
108
109
# File 'lib/xmimodel/attribute.rb', line 105

def stereotype_by_name(name)
	stereotype = @stereotypes.select{|s| s.name == name}
	return stereotype[0] if !stereotype.nil? && stereotype.size > 0
	nil		
end

#tagged_value_by_name(tagged_value_name) ⇒ Object


111
112
113
114
115
# File 'lib/xmimodel/attribute.rb', line 111

def tagged_value_by_name(tagged_value_name)
	tagged_value = @tagged_values.select{|t| t.name == tagged_value_name}
	return tagged_value[0] if !tagged_value.nil? && tagged_value.size > 0
	nil			
end

#to_sObject


126
127
128
# File 'lib/xmimodel/attribute.rb', line 126

def to_s
	"Attribute[#{full_name}]"
end