xamplr 1.3.15 → 1.9.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.
Files changed (163) hide show
  1. data/.gitignore +1 -0
  2. data/COPYING +160 -656
  3. data/LICENSE +1 -1
  4. data/README.md +33 -0
  5. data/Rakefile +2 -2
  6. data/VERSION.yml +2 -2
  7. data/lib/xamplr.rb +1 -0
  8. data/lib/xamplr/iterator.rb +123 -0
  9. data/lib/xamplr/xml-text.rb +5 -5
  10. data/xamplr.gemspec +9 -204
  11. metadata +13 -203
  12. data/README.rdoc +0 -46
  13. data/README.rdoc.orig +0 -118
  14. data/bin/xampl-gen +0 -17
  15. data/docs/intro/.gitignore +0 -1
  16. data/docs/intro/example1/example1.rb +0 -6
  17. data/docs/intro/example1/xml/hello.xml +0 -1
  18. data/docs/intro/example2/example2.rb +0 -38
  19. data/docs/intro/example2/project-generator.rb +0 -22
  20. data/docs/intro/example2/xml/hello.xml +0 -2
  21. data/docs/intro/example3/example3.rb +0 -30
  22. data/docs/intro/example3/example3a.rb +0 -16
  23. data/docs/intro/example3/generated.png +0 -0
  24. data/docs/intro/example3/grab-yuml.rb +0 -10
  25. data/docs/intro/example3/greeter.rb +0 -15
  26. data/docs/intro/example3/greeting.rb +0 -9
  27. data/docs/intro/example3/project-generator.rb +0 -25
  28. data/docs/intro/example3/xml/greeter.xml +0 -6
  29. data/docs/intro/example4/example4.rb +0 -27
  30. data/docs/intro/example4/example4a.rb +0 -19
  31. data/docs/intro/example4/grab-yuml.rb +0 -10
  32. data/docs/intro/example4/greeter.rb +0 -15
  33. data/docs/intro/example4/greeting.rb +0 -9
  34. data/docs/intro/example4/project-generator.rb +0 -25
  35. data/docs/intro/example4/xml/greeter.xml +0 -6
  36. data/docs/intro/grab-yuml.rb +0 -10
  37. data/docs/intro/project-generator.rb +0 -51
  38. data/docs/intro/xampl.lyx +0 -1494
  39. data/docs/intro/xampl.pdf +0 -0
  40. data/examples/employees/final-xampl/xampl-gen.rb +0 -38
  41. data/examples/employees/final-xampl/xml/ddd-final-xampl.xml +0 -86
  42. data/examples/employees/final/xampl-gen.rb +0 -38
  43. data/examples/employees/final/xml/ddd-final.xml +0 -86
  44. data/examples/employees/first/xampl-gen.rb +0 -38
  45. data/examples/employees/first/xml/ddd-first.xml +0 -48
  46. data/examples/employees/twist/twist.graphml +0 -333
  47. data/examples/employees/twist/xampl-gen.rb +0 -38
  48. data/examples/employees/twist/xml/twist.xml +0 -90
  49. data/examples/employees/xamplr-twist.xml +0 -2
  50. data/examples/employees/yuml-diagrams/DDD-final-approach.graphml +0 -393
  51. data/examples/employees/yuml-diagrams/DDD-final-xampl-approach.graphml +0 -265
  52. data/examples/employees/yuml-diagrams/DDD-ideal-final-approach.graphml +0 -357
  53. data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
  54. data/examples/employees/yuml-diagrams/ddd-final.yuml +0 -8
  55. data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
  56. data/examples/employees/yuml-diagrams/ddd-first.yuml +0 -7
  57. data/examples/employees/yuml-diagrams/final-yed.png +0 -0
  58. data/examples/employees/yuml-diagrams/first-yed.png +0 -0
  59. data/examples/employees/yuml-diagrams/twist.png +0 -0
  60. data/examples/employees/yuml-diagrams/twist.yuml +0 -12
  61. data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
  62. data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
  63. data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
  64. data/examples/employees/yuml-diagrams/yuml-simplified.txt +0 -19
  65. data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +0 -53
  66. data/examples/employees/yuml-diagrams/yuml.txt +0 -27
  67. data/examples/hobbies/Makefile +0 -5
  68. data/examples/hobbies/hobbies.rb +0 -193
  69. data/examples/hobbies/project-generator.rb +0 -25
  70. data/examples/hobbies/xampl-gen.rb +0 -38
  71. data/examples/hobbies/xml/hobby.xml +0 -3
  72. data/examples/hobbies/xml/people.xml +0 -5
  73. data/examples/random-people-shared-addresses/.gitignore +0 -2
  74. data/examples/random-people-shared-addresses/Makefile +0 -15
  75. data/examples/random-people-shared-addresses/batch-load-users-profiled.rb +0 -91
  76. data/examples/random-people-shared-addresses/batch-load-users-safe.rb +0 -81
  77. data/examples/random-people-shared-addresses/batch-load-users.rb +0 -79
  78. data/examples/random-people-shared-addresses/find-mentions.rb +0 -47
  79. data/examples/random-people-shared-addresses/find-people-by-address.rb +0 -104
  80. data/examples/random-people-shared-addresses/optimise.rb +0 -16
  81. data/examples/random-people-shared-addresses/people.rb +0 -35
  82. data/examples/random-people-shared-addresses/query.rb +0 -75
  83. data/examples/random-people-shared-addresses/query2.rb +0 -73
  84. data/examples/random-people-shared-addresses/random-names.csv +0 -10000
  85. data/examples/random-people-shared-addresses/settings.rb +0 -3
  86. data/examples/random-people-shared-addresses/what-to-query-on.rb +0 -82
  87. data/examples/random-people-shared-addresses/xampl-gen.rb +0 -38
  88. data/examples/random-people-shared-addresses/xml/people.xml +0 -14
  89. data/examples/random-people/.gitignore +0 -2
  90. data/examples/random-people/Makefile +0 -20
  91. data/examples/random-people/batch-load-users.rb +0 -61
  92. data/examples/random-people/optimise.rb +0 -16
  93. data/examples/random-people/people.rb +0 -22
  94. data/examples/random-people/query.rb +0 -73
  95. data/examples/random-people/query2.rb +0 -73
  96. data/examples/random-people/random-names.csv +0 -10000
  97. data/examples/random-people/rawtc.rb +0 -91
  98. data/examples/random-people/settings.rb +0 -3
  99. data/examples/random-people/what-to-query-on.rb +0 -80
  100. data/examples/random-people/xampl-gen.rb +0 -39
  101. data/examples/random-people/xml/people.xml +0 -11
  102. data/examples/read-testing/.gitignore +0 -2
  103. data/examples/read-testing/Makefile +0 -10
  104. data/examples/read-testing/load.rb +0 -65
  105. data/examples/read-testing/read.rb +0 -51
  106. data/examples/read-testing/rrr.rb +0 -88
  107. data/examples/read-testing/settings.rb +0 -2
  108. data/examples/read-testing/xampl-gen.rb +0 -38
  109. data/examples/read-testing/xml/text.xml +0 -8
  110. data/examples/tokyo-cabinet-experimental/.gitignore +0 -2
  111. data/examples/tokyo-cabinet-experimental/expt-query.rb +0 -42
  112. data/examples/tokyo-cabinet-experimental/expt-query2.rb +0 -42
  113. data/examples/tokyo-cabinet-experimental/expt-query3.rb +0 -41
  114. data/examples/tokyo-cabinet-experimental/expt-reader.rb +0 -32
  115. data/examples/tokyo-cabinet-experimental/expt.rb +0 -61
  116. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +0 -38
  117. data/examples/tokyo-cabinet-experimental/xml/tcx.xml +0 -6
  118. data/examples/write-testing/README +0 -4
  119. data/examples/write-testing/RESULTS.home +0 -33
  120. data/examples/write-testing/RESULTS.raconteur +0 -33
  121. data/examples/write-testing/write-speed-test.rb +0 -40
  122. data/lib/xampl-generator.rb +0 -3
  123. data/lib/xamplr-generator.rb +0 -9
  124. data/lib/xamplr/gen-elements.xml +0 -6230
  125. data/lib/xamplr/gen.elements.xml +0 -108
  126. data/lib/xamplr/generate-elements.rb +0 -15
  127. data/lib/xamplr/generator.rb +0 -5
  128. data/lib/xamplr/graphml-out.rb +0 -451
  129. data/lib/xamplr/handwritten/example.rb +0 -698
  130. data/lib/xamplr/handwritten/hand-example.rb +0 -533
  131. data/lib/xamplr/handwritten/test-handwritten.rb +0 -873
  132. data/lib/xamplr/my.gen.elements.xml +0 -461
  133. data/lib/xamplr/obsolete/fsdb.rb +0 -62
  134. data/lib/xamplr/simpleTemplate/danger.rx +0 -4
  135. data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +0 -35
  136. data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +0 -12
  137. data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +0 -20
  138. data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +0 -8
  139. data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +0 -13
  140. data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +0 -37
  141. data/lib/xamplr/simpleTemplate/old/r6.000.rb +0 -122
  142. data/lib/xamplr/simpleTemplate/old/r6.001.rb +0 -145
  143. data/lib/xamplr/simpleTemplate/play.r6 +0 -12
  144. data/lib/xamplr/simpleTemplate/play_more.r6 +0 -20
  145. data/lib/xamplr/simpleTemplate/play_noblanks.r6 +0 -21
  146. data/lib/xamplr/simpleTemplate/playq.r6 +0 -16
  147. data/lib/xamplr/simpleTemplate/r6.rb +0 -87
  148. data/lib/xamplr/simpleTemplate/simple-template.rb +0 -75
  149. data/lib/xamplr/templates/.cvsignore +0 -3
  150. data/lib/xamplr/templates/child.template +0 -47
  151. data/lib/xamplr/templates/child_indexed.template +0 -89
  152. data/lib/xamplr/templates/child_modules.template +0 -5
  153. data/lib/xamplr/templates/element_classes.template +0 -11
  154. data/lib/xamplr/templates/element_data.template +0 -283
  155. data/lib/xamplr/templates/element_empty.template +0 -277
  156. data/lib/xamplr/templates/element_mixed.template +0 -278
  157. data/lib/xamplr/templates/element_simple.template +0 -277
  158. data/lib/xamplr/templates/package.template +0 -38
  159. data/lib/xamplr/xampl-cl-gen.rb +0 -89
  160. data/lib/xamplr/xampl-generator.rb +0 -569
  161. data/lib/xamplr/xampl-hand-generated.rb +0 -1535
  162. data/lib/xamplr/yEd-sample.graphml +0 -300
  163. data/lib/xamplr/yuml-out.rb +0 -129
@@ -1,108 +0,0 @@
1
- <xampl-gen:elements xmlns:xampl-gen='http://xampl.com/generator'>
2
- <xampl-gen:element className='Elements'
3
- attributeName='elements'
4
- nstag='{http://xampl.com/generator}elements'
5
- indexedByAttr='pid'
6
- persisted='true'
7
- name='elements'
8
- kind='data'
9
- namespace='http://xampl.com/generator'
10
- package='XamplGenerator'>
11
- <xampl-gen:attribute name='pid'/>
12
- <xampl-gen:childElement element_name='element'
13
- name='{http://xampl.com/generator}element'
14
- namespace='http://xampl.com/generator'/>
15
- </xampl-gen:element>
16
- <xampl-gen:element className='Element'
17
- attributeName='element'
18
- nstag='{http://xampl.com/generator}element'
19
- indexedByAttr='name'
20
- name='element'
21
- kind='data'
22
- namespace='http://xampl.com/generator'
23
- package='XamplGenerator'>
24
- <xampl-gen:attribute name='has_content'/>
25
- <xampl-gen:attribute name='class_name'/>
26
- <xampl-gen:attribute name='attribute_name'/>
27
- <xampl-gen:attribute name='nstag'/>
28
- <xampl-gen:attribute name='empty'/>
29
- <xampl-gen:attribute name='indexed_by_attr'/>
30
- <xampl-gen:attribute name='persisted'/>
31
- <xampl-gen:childElement element_name='childElement'
32
- name='{http://xampl.com/generator}childElement'
33
- namespace='http://xampl.com/generator'/>
34
- <xampl-gen:attribute name='name'/>
35
- <xampl-gen:attribute name='kind'/>
36
- <xampl-gen:attribute name='namespace'/>
37
- <xampl-gen:attribute name='package'/>
38
- <xampl-gen:childElement element_name='attribute'
39
- name='{http://xampl.com/generator}attribute'
40
- namespace='http://xampl.com/generator'/>
41
- </xampl-gen:element>
42
- <xampl-gen:element className='ChildElement'
43
- attributeName='child_element'
44
- nstag='{http://xampl.com/generator}childElement'
45
- empty='true'
46
- indexedByAttr='name'
47
- name='childElement'
48
- kind='empty'
49
- namespace='http://xampl.com/generator'
50
- package='XamplGenerator'>
51
- <xampl-gen:attribute name='element_name'/>
52
- <xampl-gen:attribute name='name'/>
53
- <xampl-gen:attribute name='namespace'/>
54
- <xampl-gen:attribute name='index_class'/>
55
- <xampl-gen:attribute name='index'/>
56
- <xampl-gen:attribute name='package'/>
57
- </xampl-gen:element>
58
- <xampl-gen:element className='Attribute'
59
- attributeName='attribute'
60
- nstag='{http://xampl.com/generator}attribute'
61
- empty='true'
62
- indexedByAttr='name'
63
- name='attribute'
64
- kind='empty'
65
- namespace='http://xampl.com/generator'
66
- package='XamplGenerator'>
67
- <xampl-gen:attribute name='namespace'/>
68
- <xampl-gen:attribute name='name'/>
69
- </xampl-gen:element>
70
- <xampl-gen:element className='Options'
71
- attributeName='options'
72
- nstag='{http://xampl.com/generator}options'
73
- name='options'
74
- kind='data'
75
- namespace='http://xampl.com/generator'
76
- package='XamplGenerator'>
77
- <xampl-gen:childElement element_name='index-attribute'
78
- name='{http://xampl.com/generator}index-attribute'
79
- namespace='http://xampl.com/generator'/>
80
- <xampl-gen:childElement element_name='resolve'
81
- name='{http://xampl.com/generator}resolve'
82
- namespace='http://xampl.com/generator'/>
83
- </xampl-gen:element>
84
- <xampl-gen:element className='IndexAttribute'
85
- attributeName='index_attribute'
86
- nstag='{http://xampl.com/generator}index-attribute'
87
- empty='true'
88
- indexedByAttr='name'
89
- name='index-attribute'
90
- kind='empty'
91
- namespace='http://xampl.com/generator'
92
- package='XamplGenerator'>
93
- <xampl-gen:attribute name='name'/>
94
- <xampl-gen:attribute name='persisted'/>
95
- </xampl-gen:element>
96
- <xampl-gen:element className='Resolve'
97
- attributeName='resolve'
98
- nstag='{http://xampl.com/generator}resolve'
99
- empty='true'
100
- name='resolve'
101
- kind='empty'
102
- namespace='http://xampl.com/generator'
103
- package='XamplGenerator'>
104
- <xampl-gen:attribute name='namespace'/>
105
- <xampl-gen:attribute name='pkg'/>
106
- <xampl-gen:attribute name='preferred_prefix'/>
107
- </xampl-gen:element>
108
- </xampl-gen:elements>
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'xamplr-generator'
4
- include XamplGenerator
5
- include Xampl
6
-
7
- options = Xampl.make(Options) { | options |
8
- options.new_index_attribute("name")
9
- options.new_index_attribute("id")
10
- options.new_index_attribute("pid").persisted = true
11
-
12
- options.resolve("http://xampl.com/generator", "XamplGenerator", "gen")
13
- }
14
-
15
- XamplGenerator.from_command_line(options)
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'xamplr-generator'
4
-
5
- XamplGenerator.from_command_line
@@ -1,451 +0,0 @@
1
- require 'fileutils'
2
- require 'set'
3
-
4
- module XamplGenerator
5
-
6
- class GraphMLOut
7
-
8
- def initialize(elements_map)
9
- @elements_map = elements_map
10
- end
11
-
12
- def generate_class_nodes(element, include_mixins)
13
-
14
- node = @element_to_node_map[element.nstag]
15
-
16
- class_name = "#{ element.package }::#{ element.class_name }"
17
- mixin_name = "#{ element.package }::#{ element.class_name }"
18
-
19
- if element.persisted then
20
- write_entity_node(node, class_name, element.kind)
21
- else
22
- write_internal_node(node, class_name, element.kind)
23
- end
24
-
25
- if include_mixins then
26
- mixin_node = @mixed_in[element.nstag]
27
- #puts "#{ element.nstag } => #{ node }, mixin: [#{ mixin_node }]"
28
- if mixin_node then
29
- write_mixin_node(mixin_node, class_name)
30
- end
31
- end
32
- # puts "NODE #{ node } #{ class_name }"
33
- # puts "NODE #{ mixin_node } #{ mixin_name }"
34
- end
35
-
36
- def generate_edges(element, include_mixins)
37
- # for each child, generate an entity-ref or internal-ref edge
38
- # for each child, generate a mixin-ref edge
39
-
40
- return if ignore_package(element.package)
41
-
42
- element.child_element_child.each do | celement |
43
- next if ignore_package(celement.package)
44
-
45
- cnstag = "{{#{ celement.namespace }}}#{ celement.element_name }"
46
-
47
- referenced_element = @ns_to_element_map[ cnstag ]
48
- next unless referenced_element
49
-
50
- this_node = @element_to_node_map[ element.nstag ]
51
-
52
- other_node = @element_to_node_map[ cnstag ]
53
- other_mixin = @mixed_in[ cnstag ]
54
-
55
- if referenced_element.persisted then
56
- @current_edge += 1
57
- write_entity_ref_edge(@current_edge, this_node, other_node)
58
- # puts "ER EDGE #{ @current_edge }, #{ this_node } --> #{ other_node } :: #{ element.class_name } --> #{ referenced_element.class_name }"
59
- else
60
- @current_edge += 1
61
- write_internal_ref_edge(@current_edge, this_node, other_node)
62
- # puts "IR EDGE #{ @current_edge }, #{ this_node } --> #{ other_node } :: #{ element.class_name } --> #{ referenced_element.class_name }"
63
- end
64
- if include_mixins then
65
- @current_edge += 1
66
- write_mixin_ref_edge(@current_edge, this_node, other_mixin)
67
- # puts "MI EDGE #{ @current_edge }, #{ this_node } --> #{ other_mixin } :: #{ element.class_name } --> #{ referenced_element.class_name }"
68
- end
69
- end
70
- end
71
-
72
- def ignore_package(package)
73
- return true if @excluded_packages.member?(package)
74
- return false if @included_packages.nil?
75
- return true unless @included_packages.member?(package)
76
- return false
77
- end
78
-
79
- def write_graph_ml(base_filename, excluded_packages=[ ], included_packages=nil, include_mixins=true)
80
- filename = "#{base_filename}.graphml"
81
-
82
- @excluded_packages = Set.new(excluded_packages)
83
- @included_packages = included_packages ? Set.new(included_packages) : nil
84
-
85
- @element_to_node_map = {}
86
- @ns_to_element_map = {}
87
- @element_to_child_element_map = {}
88
- @mixed_in = {}
89
-
90
- nodes = 0
91
- edges = 0
92
- mixins = 0
93
-
94
- @elements_map.each_value do |elements|
95
- elements.element_child.each do |element|
96
- next if ignore_package(element.package)
97
- nodes += 1
98
-
99
- @element_to_node_map[element.nstag] = nodes
100
- @ns_to_element_map[element.nstag] = element
101
- @element_to_child_element_map[element.nstag] = map = {}
102
-
103
- element.child_element_child.each do | celement |
104
- edges += 1
105
- cnstag = "{{#{ celement.namespace }}}#{ celement.element_name }"
106
- map[cnstag] = edges
107
- unless @mixed_in.include?(cnstag) then
108
- mixins += 1
109
- @mixed_in[cnstag] = mixins
110
- end
111
- end
112
- end
113
- end
114
-
115
- @mixed_in.each do | k, v |
116
- @mixed_in[k] = v + nodes
117
- end
118
-
119
- # puts "#{File.basename(__FILE__)}:#{__LINE__} #{ @element_to_node_map.inspect }"
120
-
121
- @reference_edges = edges
122
-
123
- File.open(filename, "w") do | out |
124
- @out = out
125
-
126
- if include_mixins then
127
- write_graphml_start(nodes + mixins, 2 * edges)
128
- else
129
- write_graphml_start(nodes, edges)
130
- end
131
- @elements_map.each_value do |elements|
132
- elements.element_child.each do |element|
133
- generate_class_nodes(element, include_mixins)
134
- end
135
- end
136
-
137
- @current_edge = 0
138
- @elements_map.each_value do |elements|
139
- elements.element_child.each do |element|
140
- generate_edges(element, include_mixins)
141
- end
142
- end
143
- write_graphml_end
144
- # puts "#{File.basename(__FILE__)}:#{__LINE__} EDGES:: predicted: #{ 2 * edges }, actual: #{ @current_edge }"
145
- end
146
- return nil
147
- end
148
-
149
- def write_entity_node(node, class_name, kind)
150
- @out << <<EOS
151
- <node id="n#{ node }">
152
- <data key="d0">
153
- <y:UMLClassNode>
154
- <y:Geometry height="102.0"
155
- width="111.0"
156
- x="-5.5"
157
- y="174.0"/>
158
- <y:Fill color="#99CCFF"
159
- transparent="false"/>
160
- <y:BorderStyle color="#000000"
161
- type="line"
162
- width="2.0"/>
163
- <y:NodeLabel alignment="center"
164
- autoSizePolicy="content"
165
- fontFamily="Dialog"
166
- fontSize="13"
167
- fontStyle="bold"
168
- hasBackgroundColor="false"
169
- hasLineColor="false"
170
- height="19.310546875"
171
- modelName="internal"
172
- modelPosition="c"
173
- textColor="#000000"
174
- visible="true"
175
- width="49.6904296875"
176
- x="30.65478515625"
177
- y="26.1328125">#{ class_name }
178
- </y:NodeLabel>
179
- <y:UML clipContent="true"
180
- constraint=""
181
- omitDetails="false"
182
- stereotype="#{ kind }"
183
- use3DEffect="false">
184
- <!--y:AttributeLabel>bar
185
- bar2</y:AttributeLabel>
186
- <y:MethodLabel>foo()</y:MethodLabel-->
187
- </y:UML>
188
- </y:UMLClassNode>
189
- </data>
190
- <data key="d1">UMLClass</data>
191
- </node>
192
- EOS
193
- end
194
-
195
- def write_internal_node(node, class_name, kind)
196
- @out << <<EOS
197
- <node id="n#{ node }">
198
- <data key="d0">
199
- <y:UMLClassNode>
200
- <y:Geometry height="102.0"
201
- width="91.0"
202
- x="4.5"
203
- y="-1.0"/>
204
- <y:Fill color="#CCFFCC"
205
- transparent="false"/>
206
- <y:BorderStyle color="#000000"
207
- type="line"
208
- width="1.0"/>
209
- <y:NodeLabel alignment="center"
210
- autoSizePolicy="content"
211
- fontFamily="Dialog"
212
- fontSize="13"
213
- fontStyle="bold"
214
- hasBackgroundColor="false"
215
- hasLineColor="false"
216
- height="19.310546875"
217
- modelName="internal"
218
- modelPosition="c"
219
- textColor="#000000"
220
- visible="true"
221
- width="39.83251953125"
222
- x="25.583740234375"
223
- y="26.1328125">#{ class_name }
224
- </y:NodeLabel>
225
- <y:UML clipContent="true"
226
- constraint=""
227
- omitDetails="false"
228
- stereotype="#{ kind }"
229
- use3DEffect="false">
230
- <!--y:AttributeLabel>bar</y:AttributeLabel>
231
- <y:MethodLabel>foo()</y:MethodLabel-->
232
- </y:UML>
233
- </y:UMLClassNode>
234
- </data>
235
- <data key="d1">UMLClass</data>
236
- </node>
237
- EOS
238
- end
239
-
240
- def write_mixin_node(node, class_name)
241
- @out << <<EOS
242
- <node id="n#{ node }">
243
- <data key="d0">
244
- <y:UMLClassNode>
245
- <y:Geometry height="102.0"
246
- width="136.0"
247
- x="-18.0"
248
- y="349.0"/>
249
- <y:Fill color="#FFCC99"
250
- transparent="false"/>
251
- <y:BorderStyle color="#000000"
252
- type="line"
253
- width="1.0"/>
254
- <y:NodeLabel alignment="center"
255
- autoSizePolicy="content"
256
- fontFamily="Dialog"
257
- fontSize="13"
258
- fontStyle="bold"
259
- hasBackgroundColor="false"
260
- hasLineColor="false"
261
- height="19.310546875"
262
- modelName="internal"
263
- modelPosition="c"
264
- textColor="#000000"
265
- visible="true"
266
- width="110.818359375"
267
- x="12.5908203125"
268
- y="26.1328125">#{ class_name }
269
- </y:NodeLabel>
270
- <y:UML clipContent="true"
271
- constraint=""
272
- omitDetails="false"
273
- stereotype="mixin"
274
- use3DEffect="false">
275
- <!--y:AttributeLabel></y:AttributeLabel>
276
- <y:MethodLabel></y:MethodLabel-->
277
- </y:UML>
278
- </y:UMLClassNode>
279
- </data>
280
- <data key="d1">UMLClass</data>
281
- </node>
282
- EOS
283
- end
284
-
285
- def write_entity_ref_edge(edge, class_node, external_node)
286
- @out << <<EOS
287
- <edge id="e#{ edge }"
288
- source="n#{ class_node }"
289
- target="n#{ external_node }">
290
- <data key="d2">
291
- <y:PolyLineEdge>
292
- <y:Path sx="0.0"
293
- sy="0.0"
294
- tx="0.0"
295
- ty="0.0"/>
296
- <y:LineStyle color="#000000"
297
- type="line"
298
- width="2.0"/>
299
- <y:Arrows source="none"
300
- target="short"/>
301
- <y:EdgeLabel alignment="center"
302
- distance="2.0"
303
- fontFamily="Dialog"
304
- fontSize="12"
305
- fontStyle="plain"
306
- hasBackgroundColor="false"
307
- hasLineColor="false"
308
- height="4.0"
309
- modelName="six_pos"
310
- modelPosition="tail"
311
- preferredPlacement="anywhere"
312
- ratio="0.5"
313
- textColor="#000000"
314
- visible="true"
315
- width="4.0"
316
- x="30.000732421875"
317
- y="2.0"></y:EdgeLabel>
318
- <y:BendStyle smoothed="false"/>
319
- </y:PolyLineEdge>
320
- </data>
321
- <data key="d3">UMLuses</data>
322
- </edge>
323
- EOS
324
- end
325
-
326
- def write_internal_ref_edge(edge, class_node, internal_node)
327
- @out << <<EOS
328
- <edge id="e#{ edge }"
329
- source="n#{ class_node }"
330
- target="n#{ internal_node }">
331
- <data key="d2">
332
- <y:PolyLineEdge>
333
- <y:Path sx="0.0"
334
- sy="0.0"
335
- tx="0.0"
336
- ty="0.0"/>
337
- <y:LineStyle color="#000000"
338
- type="line"
339
- width="1.0"/>
340
- <y:Arrows source="none"
341
- target="short"/>
342
- <y:EdgeLabel alignment="center"
343
- distance="2.0"
344
- fontFamily="Dialog"
345
- fontSize="12"
346
- fontStyle="plain"
347
- hasBackgroundColor="false"
348
- hasLineColor="false"
349
- height="4.0"
350
- modelName="six_pos"
351
- modelPosition="tail"
352
- preferredPlacement="anywhere"
353
- ratio="0.5"
354
- textColor="#000000"
355
- visible="true"
356
- width="4.0"
357
- x="2.0"
358
- y="-38.529541015625"></y:EdgeLabel>
359
- <y:BendStyle smoothed="false"/>
360
- </y:PolyLineEdge>
361
- </data>
362
- <data key="d3">UMLuses</data>
363
- </edge>
364
- EOS
365
- end
366
-
367
- def write_mixin_ref_edge(edge, class_node, mixin_node)
368
- @out << <<EOS
369
- <edge id="e#{ edge }"
370
- source="n#{ mixin_node }"
371
- target="n#{ class_node }">
372
- <data key="d2">
373
- <y:PolyLineEdge>
374
- <y:Path sx="0.0"
375
- sy="0.0"
376
- tx="0.0"
377
- ty="0.0"/>
378
- <y:LineStyle color="#000000"
379
- type="line"
380
- width="1.0"/>
381
- <y:Arrows source="white_delta"
382
- target="none"/>
383
- <y:EdgeLabel alignment="center"
384
- distance="2.0"
385
- fontFamily="Dialog"
386
- fontSize="12"
387
- fontStyle="plain"
388
- hasBackgroundColor="false"
389
- hasLineColor="false"
390
- height="4.0"
391
- modelName="six_pos"
392
- modelPosition="tail"
393
- preferredPlacement="anywhere"
394
- ratio="0.5"
395
- textColor="#000000"
396
- visible="true"
397
- width="4.0"
398
- x="2.0"
399
- y="34.529541015625"></y:EdgeLabel>
400
- <y:BendStyle smoothed="false"/>
401
- </y:PolyLineEdge>
402
- </data>
403
- <data key="d3">UMLinherits</data>
404
- </edge>
405
- EOS
406
- end
407
-
408
- def write_graphml_start(nodes, edges)
409
- @out << <<EOS
410
- <?xml version="1.0" encoding="UTF-8"?>
411
- <graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml"
412
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
413
- xmlns:y="http://www.yworks.com/xml/graphml"
414
- xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://www.yworks.com/xml/schema/graphml/1.0/ygraphml.xsd">
415
- <key for="node"
416
- id="d0"
417
- yfiles.type="nodegraphics"/>
418
- <key attr.name="description"
419
- attr.type="string"
420
- for="node"
421
- id="d1"/>
422
- <key for="edge"
423
- id="d2"
424
- yfiles.type="edgegraphics"/>
425
- <key attr.name="description"
426
- attr.type="string"
427
- for="edge"
428
- id="d3"/>
429
- <key for="graphml"
430
- id="d4"
431
- yfiles.type="resources"/>
432
- <graph edgedefault="directed"
433
- id="G"
434
- parse.edges="#{ edges }"
435
- parse.nodes="#{ nodes }"
436
- parse.order="free">
437
- EOS
438
- end
439
-
440
- def write_graphml_end
441
- @out << <<EOS
442
- </graph>
443
- <data key="d4">
444
- <y:Resources/>
445
- </data>
446
- </graphml>
447
- EOS
448
- end
449
-
450
- end
451
- end