xamplr 1.3.15 → 1.9.0

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