hutch-xamplr 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/CHANGES.txt +14 -0
  2. data/README.rdoc +24 -4
  3. data/Rakefile +3 -3
  4. data/VERSION.yml +2 -2
  5. data/examples/employees/final/xampl-gen.rb +38 -0
  6. data/examples/employees/final/xml/ddd-final.xml +86 -0
  7. data/examples/employees/first/xampl-gen.rb +38 -0
  8. data/examples/employees/first/xml/ddd-first.xml +48 -0
  9. data/examples/employees/twist/twist.graphml +333 -0
  10. data/examples/employees/twist/xampl-gen.rb +38 -0
  11. data/examples/employees/twist/xml/twist.xml +90 -0
  12. data/examples/employees/xamplr-twist.xml +2 -0
  13. data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
  14. data/examples/employees/yuml-diagrams/ddd-final.yuml +8 -0
  15. data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
  16. data/examples/employees/yuml-diagrams/ddd-first.yuml +7 -0
  17. data/examples/employees/yuml-diagrams/final-yed.png +0 -0
  18. data/examples/employees/yuml-diagrams/first-yed.png +0 -0
  19. data/examples/employees/yuml-diagrams/twist.png +0 -0
  20. data/examples/employees/yuml-diagrams/twist.yuml +12 -0
  21. data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
  22. data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
  23. data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
  24. data/examples/employees/yuml-diagrams/yuml-simplified.txt +19 -0
  25. data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +53 -0
  26. data/examples/employees/yuml-diagrams/yuml.txt +27 -0
  27. data/examples/random-people-shared-addresses/xampl-gen.rb +2 -0
  28. data/examples/random-people/xampl-gen.rb +2 -0
  29. data/examples/read-testing/xampl-gen.rb +2 -0
  30. data/examples/tokyo-cabinet-experimental/xampl-gen.rb +2 -0
  31. data/lib/xamplr-generator.rb +0 -1
  32. data/lib/xamplr.rb +1 -1
  33. data/lib/xamplr/graphml-out.rb +0 -12
  34. data/lib/xamplr/persisters/tokyo-cabinet.rb +12 -2
  35. data/lib/xamplr/xampl-generator.rb +4 -0
  36. data/lib/xamplr/yuml-out.rb +136 -0
  37. metadata +30 -4
@@ -1,4 +1,18 @@
1
1
 
2
+ 2009-05-12
3
+ -- confirmed to work with tokyocabinet-1.4.20 and tokyocabinet-ruby-1.23
4
+ -- the begginings of a new employee example from DDD book
5
+ -- enhancements and cleanup of the graphml generation (nice UML diagrams)
6
+ -- added a new yuml generation capability (very nice UML diagrams)
7
+ -- make xamplr-pp a prerequisite, rather than hutch-xamplr-pp
8
+
9
+
10
+ 2009-05-11
11
+ -- lots of undocumented changes
12
+ -- when defining the mentions attributes, use 'mentioned_class'
13
+ rather than simply 'class'. Using just 'class' can cause some
14
+ wierd side-effects when querying.
15
+
2
16
  2009-04-16 (version 1.0.2)
3
17
 
4
18
  -- if tag starts with a number, prefix it with an 'x' (e.g. 0abc --> x0abc).
@@ -2,7 +2,8 @@
2
2
 
3
3
  xamplr is a set of software tools that supports development of ruby applications.
4
4
 
5
- Features:
5
+ == Features:
6
+
6
7
  - supports Domain Driven Design in Ruby
7
8
  - persistence ignornace
8
9
  - clusters, entities, 'regular' objects, and repositories (corresponding approximately to DDD's aggregates, entities, value objects, and repositories)
@@ -12,15 +13,34 @@ Features:
12
13
  - fast development, fast execution
13
14
  - has been in use in commercial software since 2004, a Java version has been in use since 1998.
14
15
 
15
- Anti-Features:
16
+ == Anti-Features:
17
+
16
18
  - absymal lack of documentation. If you are brave and willing to wade through (old) blog entries, you might try looking at:
17
19
 
18
20
  http://recursive.ca/hutch/category/software/tools-i-use/xampl/
19
21
 
20
- License: For the moment it is AGPLv3 (see COPYING). An alternative license
22
+ == Installation:
23
+
24
+ The stable release is hosted on rubyforge as a gem, so:
25
+
26
+ [sudo] gem install xamplr
27
+
28
+ The most recent release is hosted on github, also as a gem, so:
29
+
30
+ gem sources -a http://gems.github.com
31
+ [sudo] gem install hutch-xamplr
32
+
33
+ The most recent code is in the repository, so clone the github project and either
34
+ use it directly (with a little fooling about with load paths), or build it as a gem
35
+ and install locally.
36
+
37
+ == License:
38
+
39
+ For the moment it is AGPLv3 (see COPYING). An alternative license
21
40
  may be negotiated, contact me. In the near future this license will be
22
41
  relaxed.
23
42
 
24
- == Copyright
43
+ Copyright Info:
25
44
 
26
45
  Copyright (c) 2009 Bob Hutchison. See LICENSE and COPYING for details.
46
+
data/Rakefile CHANGED
@@ -11,8 +11,8 @@ begin
11
11
  gem.authors = ["Bob Hutchison"]
12
12
  gem.rubyforge_project = 'xampl'
13
13
 
14
- gem.add_dependency('hutch-xamplr-pp')
15
- gem.add_dependency('libxml-ruby', ">=1.1.3")
14
+ gem.add_dependency('xamplr-pp', '>=1.0.0')
15
+ gem.add_dependency('libxml-ruby', '>=1.1.3')
16
16
 
17
17
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
18
18
  end
@@ -73,7 +73,7 @@ begin
73
73
  )
74
74
 
75
75
  host = "#{config['username']}@rubyforge.org"
76
- remote_dir = "/var/www/gforge-projects/xampl/"
76
+ remote_dir = "/var/www/gforge-projects/xampl"
77
77
  local_dir = 'rdoc'
78
78
 
79
79
  Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
@@ -1,4 +1,4 @@
1
1
  ---
2
- :patch: 0
3
2
  :major: 1
4
- :minor: 2
3
+ :minor: 3
4
+ :patch: 0
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby -w -I..
2
+
3
+ if $0 == __FILE__ then
4
+
5
+ class File
6
+ def File.sjoin(*args)
7
+ File.join(args.select{ | o | o })
8
+ end
9
+ end
10
+
11
+ $LOAD_PATH.unshift('../../lib/')
12
+
13
+ require 'xamplr-generator'
14
+
15
+ include XamplGenerator
16
+ include Xampl
17
+
18
+ Xampl.transaction("setup", :in_memory) do
19
+ directory = File.sjoin(".", "xampl_generated_code")
20
+
21
+ options = Xampl.make(Options) do |options|
22
+ options.new_index_attribute("pid").persisted = true
23
+ options.new_index_attribute("id")
24
+
25
+ options.resolve("http://example.com/employees", "Employees", "emp")
26
+ end
27
+
28
+ filenames = Dir.glob("./xml/**/*.xml")
29
+
30
+ generator = Generator.new
31
+ generator.go(:options => options,
32
+ :filenames => filenames,
33
+ :directory => directory)
34
+
35
+ puts generator.print_elements("./generated-elements.xml")
36
+ exit!
37
+ end
38
+ end
@@ -0,0 +1,86 @@
1
+ <!--
2
+ [RetirementPlan]^[DefinedContribution],
3
+ [RetirementPlan]^[DefinedBenefit],
4
+ [Payroll]^[HourlyPayroll],
5
+ [Payroll]^[SalariedPayroll],
6
+ [EmployeeType]->*[RetirementPlan],
7
+ [EmployeeType]->*[Payroll],
8
+ [Employee]*->[EmployeeType],
9
+ [Department]-*[Employee]
10
+ -->
11
+ <company pid=''
12
+ xmlns="http://example.com/employees">
13
+
14
+ <hourly-payroll pid='singleton'>
15
+ <payrole/>
16
+ </hourly-payroll>
17
+ <salaried-payroll pid='singleton'>
18
+ <payrole/>
19
+ </salaried-payroll>
20
+
21
+ <defined-contribution pid="singleton">
22
+ <retirement-plan/>
23
+ </defined-contribution>
24
+ <defined-benefit pid="singleton">
25
+ <retirement-plan/>
26
+ </defined-benefit>
27
+
28
+ <employee-type pid=''
29
+ title='janitor'>
30
+ <hourly-payroll pid='singleton'/>
31
+ <defined-contribution pid="singleton"/>
32
+ </employee-type>
33
+ <employee-type pid=''
34
+ title='receptionist'>
35
+ <hourly-payroll pid='singleton'/>
36
+ <defined-contribution pid="singleton"/>
37
+ </employee-type>
38
+ <employee-type pid=''
39
+ title='office-admin'>
40
+ <hourly-payroll pid='singleton'/>
41
+ <defined-benefit pid="singleton"/>
42
+ </employee-type>
43
+ <employee-type pid=''
44
+ title='engineer'>
45
+ <salaried-payroll pid='singleton'/>
46
+ <defined-benefit pid="singleton"/>
47
+ </employee-type>
48
+ <employee-type pid=''
49
+ title='manager'>
50
+ <salaried-payroll pid='singleton'/>
51
+ <defined-benefit pid="singleton"/>
52
+ </employee-type>
53
+
54
+
55
+ <department pid=''
56
+ name='widget design'>
57
+ <employee pid=''
58
+ name='tom'>
59
+ <employee-type pid=''
60
+ title='janitor'/>
61
+ </employee>
62
+ <employee pid=''
63
+ name='mary'
64
+ title='receptionist'>
65
+ <employee-type pid=''
66
+ title='receptionist'/>
67
+ </employee>
68
+ <employee pid=''
69
+ name='bob'
70
+ title='office-admin'>
71
+ <employee-type pid=''
72
+ title='office-admin'/>
73
+ </employee>
74
+
75
+ <employee pid=''
76
+ name='jack'>
77
+ <employee-type pid=''
78
+ title='engineer'/>
79
+ </employee>
80
+ <employee pid=''
81
+ name='jill'>
82
+ <employee-type pid=''
83
+ title='manager'/>
84
+ </employee>
85
+ </department>
86
+ </company>
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env ruby -w -I..
2
+
3
+ if $0 == __FILE__ then
4
+
5
+ class File
6
+ def File.sjoin(*args)
7
+ File.join(args.select{ | o | o })
8
+ end
9
+ end
10
+
11
+ $LOAD_PATH.unshift('../../lib/')
12
+
13
+ require 'xamplr-generator'
14
+
15
+ include XamplGenerator
16
+ include Xampl
17
+
18
+ Xampl.transaction("setup", :in_memory) do
19
+ directory = File.sjoin(".", "xampl_generated_code")
20
+
21
+ options = Xampl.make(Options) do |options|
22
+ options.new_index_attribute("pid").persisted = true
23
+ options.new_index_attribute("id")
24
+
25
+ options.resolve("http://example.com/employees", "Employees", "emp")
26
+ end
27
+
28
+ filenames = Dir.glob("./xml/**/*.xml")
29
+
30
+ generator = Generator.new
31
+ generator.go(:options => options,
32
+ :filenames => filenames,
33
+ :directory => directory)
34
+
35
+ puts generator.print_elements("./generated-elements.xml")
36
+ exit!
37
+ end
38
+ end
@@ -0,0 +1,48 @@
1
+ <!--
2
+ [RetirementPlan]^[DefinedContribution],
3
+ [RetirementPlan]^[DefinedBenefit],
4
+ [Employee]^[HourlyEmployee],
5
+ [Employee]^[SalariedEmployee],
6
+ [HourlyEmployee]->[DefinedContribution],
7
+ [SalariedEmployee]->[DefinedBenefit],
8
+ [Department]-*[Employee]
9
+ -->
10
+ <company pid=''
11
+ xmlns="http://example.com/employees">
12
+
13
+ <hourly-employee>
14
+ <defined-contribution pid='defined-contribution'>
15
+ <retirement-plan/>
16
+ </defined-contribution>
17
+ </hourly-employee>
18
+
19
+ <salaried-employee>
20
+ <defined-benefit pid='defined-benefit'>
21
+ <retirement-plan/>
22
+ </defined-benefit>
23
+ </salaried-employee>
24
+
25
+ <department pid=''
26
+ name='widget design'>
27
+ <hourly-employee>
28
+ <employee pid=''
29
+ name='tom'
30
+ title='janitor'/>
31
+ <employee pid=''
32
+ name='mary'
33
+ title='receptionist'/>
34
+ <employee pid=''
35
+ name='bob'
36
+ title='office-admin'/>
37
+ </hourly-employee>
38
+
39
+ <salaried-employee>
40
+ <employee pid=''
41
+ name='jack'
42
+ title='engineer'/>
43
+ <employee pid=''
44
+ name='jill'
45
+ title='manager'/>
46
+ </salaried-employee>
47
+ </department>
48
+ </company>
@@ -0,0 +1,333 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <graphml xmlns="http://graphml.graphdrawing.org/xmlns/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns/graphml http://www.yworks.com/xml/schema/graphml/1.0/ygraphml.xsd">
3
+ <key for="node" id="d0" yfiles.type="nodegraphics"/>
4
+ <key attr.name="description" attr.type="string" for="node" id="d1"/>
5
+ <key for="edge" id="d2" yfiles.type="edgegraphics"/>
6
+ <key attr.name="description" attr.type="string" for="edge" id="d3"/>
7
+ <key for="graphml" id="d4" yfiles.type="resources"/>
8
+ <graph edgedefault="directed" id="G" parse.edges="12" parse.nodes="11" parse.order="free">
9
+ <node id="n0">
10
+ <data key="d0">
11
+ <y:UMLClassNode>
12
+ <y:Geometry height="44.62109375" width="229.4521484375" x="260.27392578125" y="502.689453125"/>
13
+ <y:Fill color="#99CCFF" transparent="false"/>
14
+ <y:BorderStyle color="#000000" type="line" width="2.0"/>
15
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="172.7080078125" x="28.3720703125" y="26.1328125">Employees::HourlyPayroll
16
+ </y:NodeLabel>
17
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="data" use3DEffect="false">
18
+ <y:AttributeLabel></y:AttributeLabel>
19
+ <y:MethodLabel></y:MethodLabel>
20
+ </y:UML>
21
+ </y:UMLClassNode>
22
+ </data>
23
+ <data key="d1">UMLClass</data>
24
+ </node>
25
+ <node id="n1">
26
+ <data key="d0">
27
+ <y:UMLClassNode>
28
+ <y:Geometry height="44.62109375" width="229.4521484375" x="-14.72607421875" y="502.689453125"/>
29
+ <y:Fill color="#CCFFCC" transparent="false"/>
30
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
31
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="131.3974609375" x="49.02734375" y="26.1328125">Employees::Payrole
32
+ </y:NodeLabel>
33
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="empty" use3DEffect="false">
34
+ <y:AttributeLabel></y:AttributeLabel>
35
+ <y:MethodLabel></y:MethodLabel>
36
+ </y:UML>
37
+ </y:UMLClassNode>
38
+ </data>
39
+ <data key="d1">UMLClass</data>
40
+ </node>
41
+ <node id="n2">
42
+ <data key="d0">
43
+ <y:UMLClassNode>
44
+ <y:Geometry height="44.62109375" width="229.4521484375" x="260.27392578125" y="227.689453125"/>
45
+ <y:Fill color="#FFCC99" transparent="false"/>
46
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
47
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="131.3974609375" x="49.02734375" y="26.1328125">Employees::Payrole
48
+ </y:NodeLabel>
49
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="mixin" use3DEffect="false">
50
+ <y:AttributeLabel></y:AttributeLabel>
51
+ <y:MethodLabel></y:MethodLabel>
52
+ </y:UML>
53
+ </y:UMLClassNode>
54
+ </data>
55
+ <data key="d1">UMLClass</data>
56
+ </node>
57
+ <node id="n3">
58
+ <data key="d0">
59
+ <y:UMLClassNode>
60
+ <y:Geometry height="44.62109375" width="229.4521484375" x="-14.72607421875" y="227.689453125"/>
61
+ <y:Fill color="#99CCFF" transparent="false"/>
62
+ <y:BorderStyle color="#000000" type="line" width="2.0"/>
63
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="181.3154296875" x="24.068359375" y="26.1328125">Employees::SalariedPayroll
64
+ </y:NodeLabel>
65
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="data" use3DEffect="false">
66
+ <y:AttributeLabel></y:AttributeLabel>
67
+ <y:MethodLabel></y:MethodLabel>
68
+ </y:UML>
69
+ </y:UMLClassNode>
70
+ </data>
71
+ <data key="d1">UMLClass</data>
72
+ </node>
73
+ <node id="n4">
74
+ <data key="d0">
75
+ <y:UMLClassNode>
76
+ <y:Geometry height="44.62109375" width="229.4521484375" x="1085.27392578125" y="227.689453125"/>
77
+ <y:Fill color="#99CCFF" transparent="false"/>
78
+ <y:BorderStyle color="#000000" type="line" width="2.0"/>
79
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="219.4521484375" x="5.0" y="26.1328125">Employees::DefinedContribution
80
+ </y:NodeLabel>
81
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="data" use3DEffect="false">
82
+ <y:AttributeLabel></y:AttributeLabel>
83
+ <y:MethodLabel></y:MethodLabel>
84
+ </y:UML>
85
+ </y:UMLClassNode>
86
+ </data>
87
+ <data key="d1">UMLClass</data>
88
+ </node>
89
+ <node id="n5">
90
+ <data key="d0">
91
+ <y:UMLClassNode>
92
+ <y:Geometry height="44.62109375" width="229.4521484375" x="1085.27392578125" y="502.689453125"/>
93
+ <y:Fill color="#CCFFCC" transparent="false"/>
94
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
95
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="184.16552734375" x="22.643310546875" y="26.1328125">Employees::RetirementPlan
96
+ </y:NodeLabel>
97
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="empty" use3DEffect="false">
98
+ <y:AttributeLabel></y:AttributeLabel>
99
+ <y:MethodLabel></y:MethodLabel>
100
+ </y:UML>
101
+ </y:UMLClassNode>
102
+ </data>
103
+ <data key="d1">UMLClass</data>
104
+ </node>
105
+ <node id="n6">
106
+ <data key="d0">
107
+ <y:UMLClassNode>
108
+ <y:Geometry height="44.62109375" width="229.4521484375" x="810.27392578125" y="227.689453125"/>
109
+ <y:Fill color="#FFCC99" transparent="false"/>
110
+ <y:BorderStyle color="#000000" type="line" width="1.0"/>
111
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="184.16552734375" x="22.643310546875" y="26.1328125">Employees::RetirementPlan
112
+ </y:NodeLabel>
113
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="mixin" use3DEffect="false">
114
+ <y:AttributeLabel></y:AttributeLabel>
115
+ <y:MethodLabel></y:MethodLabel>
116
+ </y:UML>
117
+ </y:UMLClassNode>
118
+ </data>
119
+ <data key="d1">UMLClass</data>
120
+ </node>
121
+ <node id="n7">
122
+ <data key="d0">
123
+ <y:UMLClassNode>
124
+ <y:Geometry height="44.62109375" width="229.4521484375" x="810.27392578125" y="502.689453125"/>
125
+ <y:Fill color="#99CCFF" transparent="false"/>
126
+ <y:BorderStyle color="#000000" type="line" width="2.0"/>
127
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="181.302734375" x="24.07470703125" y="26.1328125">Employees::DefinedBenefit
128
+ </y:NodeLabel>
129
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="data" use3DEffect="false">
130
+ <y:AttributeLabel></y:AttributeLabel>
131
+ <y:MethodLabel></y:MethodLabel>
132
+ </y:UML>
133
+ </y:UMLClassNode>
134
+ </data>
135
+ <data key="d1">UMLClass</data>
136
+ </node>
137
+ <node id="n8">
138
+ <data key="d0">
139
+ <y:UMLClassNode>
140
+ <y:Geometry height="44.62109375" width="229.4521484375" x="535.27392578125" y="227.689453125"/>
141
+ <y:Fill color="#99CCFF" transparent="false"/>
142
+ <y:BorderStyle color="#000000" type="line" width="2.0"/>
143
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="179.296875" x="25.07763671875" y="26.1328125">Employees::EmployeeType
144
+ </y:NodeLabel>
145
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="data" use3DEffect="false">
146
+ <y:AttributeLabel></y:AttributeLabel>
147
+ <y:MethodLabel></y:MethodLabel>
148
+ </y:UML>
149
+ </y:UMLClassNode>
150
+ </data>
151
+ <data key="d1">UMLClass</data>
152
+ </node>
153
+ <node id="n9">
154
+ <data key="d0">
155
+ <y:UMLClassNode>
156
+ <y:Geometry height="44.62109375" width="229.4521484375" x="535.27392578125" y="-22.310546875"/>
157
+ <y:Fill color="#99CCFF" transparent="false"/>
158
+ <y:BorderStyle color="#000000" type="line" width="2.0"/>
159
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="161.5361328125" x="33.9580078125" y="26.1328125">Employees::Department
160
+ </y:NodeLabel>
161
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="data" use3DEffect="false">
162
+ <y:AttributeLabel></y:AttributeLabel>
163
+ <y:MethodLabel></y:MethodLabel>
164
+ </y:UML>
165
+ </y:UMLClassNode>
166
+ </data>
167
+ <data key="d1">UMLClass</data>
168
+ </node>
169
+ <node id="n10">
170
+ <data key="d0">
171
+ <y:UMLClassNode>
172
+ <y:Geometry height="44.62109375" width="229.4521484375" x="535.27392578125" y="52.689453125"/>
173
+ <y:Fill color="#99CCFF" transparent="false"/>
174
+ <y:BorderStyle color="#000000" type="line" width="2.0"/>
175
+ <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="13" fontStyle="bold" hasBackgroundColor="false" hasLineColor="false" height="34.62109375" modelName="internal" modelPosition="c" textColor="#000000" visible="true" width="146.517578125" x="41.46728515625" y="26.1328125">Employees::Employee
176
+ </y:NodeLabel>
177
+ <y:UML clipContent="true" constraint="" omitDetails="false" stereotype="data" use3DEffect="false">
178
+ <y:AttributeLabel></y:AttributeLabel>
179
+ <y:MethodLabel></y:MethodLabel>
180
+ </y:UML>
181
+ </y:UMLClassNode>
182
+ </data>
183
+ <data key="d1">UMLClass</data>
184
+ </node>
185
+ <edge id="e0" source="n0" target="n1">
186
+ <data key="d2">
187
+ <y:PolyLineEdge>
188
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
189
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
190
+ <y:Arrows source="none" target="short"/>
191
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-24.7935791015625" y="2.0"></y:EdgeLabel>
192
+ <y:BendStyle smoothed="false"/>
193
+ </y:PolyLineEdge>
194
+ </data>
195
+ <data key="d3">UMLuses</data>
196
+ </edge>
197
+ <edge id="e1" source="n0" target="n2">
198
+ <data key="d2">
199
+ <y:PolyLineEdge>
200
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
201
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
202
+ <y:Arrows source="none" target="white_delta"/>
203
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-117.1763916015625"></y:EdgeLabel>
204
+ <y:BendStyle smoothed="false"/>
205
+ </y:PolyLineEdge>
206
+ </data>
207
+ <data key="d3">UMLinherits</data>
208
+ </edge>
209
+ <edge id="e2" source="n3" target="n1">
210
+ <data key="d2">
211
+ <y:PolyLineEdge>
212
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
213
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
214
+ <y:Arrows source="none" target="short"/>
215
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="113.1763916015625"></y:EdgeLabel>
216
+ <y:BendStyle smoothed="false"/>
217
+ </y:PolyLineEdge>
218
+ </data>
219
+ <data key="d3">UMLuses</data>
220
+ </edge>
221
+ <edge id="e3" source="n3" target="n2">
222
+ <data key="d2">
223
+ <y:PolyLineEdge>
224
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
225
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
226
+ <y:Arrows source="none" target="white_delta"/>
227
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="20.7935791015625" y="2.0"></y:EdgeLabel>
228
+ <y:BendStyle smoothed="false"/>
229
+ </y:PolyLineEdge>
230
+ </data>
231
+ <data key="d3">UMLinherits</data>
232
+ </edge>
233
+ <edge id="e4" source="n4" target="n5">
234
+ <data key="d2">
235
+ <y:PolyLineEdge>
236
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
237
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
238
+ <y:Arrows source="none" target="short"/>
239
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="113.1763916015625"></y:EdgeLabel>
240
+ <y:BendStyle smoothed="false"/>
241
+ </y:PolyLineEdge>
242
+ </data>
243
+ <data key="d3">UMLuses</data>
244
+ </edge>
245
+ <edge id="e5" source="n4" target="n6">
246
+ <data key="d2">
247
+ <y:PolyLineEdge>
248
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
249
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
250
+ <y:Arrows source="none" target="white_delta"/>
251
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-24.7935791015625" y="2.0"></y:EdgeLabel>
252
+ <y:BendStyle smoothed="false"/>
253
+ </y:PolyLineEdge>
254
+ </data>
255
+ <data key="d3">UMLinherits</data>
256
+ </edge>
257
+ <edge id="e6" source="n7" target="n5">
258
+ <data key="d2">
259
+ <y:PolyLineEdge>
260
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
261
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
262
+ <y:Arrows source="none" target="short"/>
263
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="20.7935791015625" y="2.0"></y:EdgeLabel>
264
+ <y:BendStyle smoothed="false"/>
265
+ </y:PolyLineEdge>
266
+ </data>
267
+ <data key="d3">UMLuses</data>
268
+ </edge>
269
+ <edge id="e7" source="n7" target="n6">
270
+ <data key="d2">
271
+ <y:PolyLineEdge>
272
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
273
+ <y:LineStyle color="#000000" type="line" width="1.0"/>
274
+ <y:Arrows source="none" target="white_delta"/>
275
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="-117.1763916015625"></y:EdgeLabel>
276
+ <y:BendStyle smoothed="false"/>
277
+ </y:PolyLineEdge>
278
+ </data>
279
+ <data key="d3">UMLinherits</data>
280
+ </edge>
281
+ <edge id="e8" source="n9" target="n10">
282
+ <data key="d2">
283
+ <y:PolyLineEdge>
284
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
285
+ <y:LineStyle color="#000000" type="line" width="2.0"/>
286
+ <y:Arrows source="none" target="short"/>
287
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="13.19775390625"></y:EdgeLabel>
288
+ <y:BendStyle smoothed="false"/>
289
+ </y:PolyLineEdge>
290
+ </data>
291
+ <data key="d3">UMLuses</data>
292
+ </edge>
293
+ <edge id="e9" source="n10" target="n8">
294
+ <data key="d2">
295
+ <y:PolyLineEdge>
296
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
297
+ <y:LineStyle color="#000000" type="line" width="2.0"/>
298
+ <y:Arrows source="none" target="short"/>
299
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="2.0" y="63.155029296875"></y:EdgeLabel>
300
+ <y:BendStyle smoothed="false"/>
301
+ </y:PolyLineEdge>
302
+ </data>
303
+ <data key="d3">UMLuses</data>
304
+ </edge>
305
+ <edge id="e10" source="n8" target="n6">
306
+ <data key="d2">
307
+ <y:PolyLineEdge>
308
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
309
+ <y:LineStyle color="#000000" type="line" width="2.0"/>
310
+ <y:Arrows source="none" target="short"/>
311
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="20.7935791015625" y="2.0"></y:EdgeLabel>
312
+ <y:BendStyle smoothed="false"/>
313
+ </y:PolyLineEdge>
314
+ </data>
315
+ <data key="d3">UMLuses</data>
316
+ </edge>
317
+ <edge id="e11" source="n8" target="n2">
318
+ <data key="d2">
319
+ <y:PolyLineEdge>
320
+ <y:Path sx="0.0" sy="0.0" tx="0.0" ty="0.0"/>
321
+ <y:LineStyle color="#000000" type="line" width="2.0"/>
322
+ <y:Arrows source="none" target="short"/>
323
+ <y:EdgeLabel alignment="center" distance="2.0" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="4.0" modelName="six_pos" modelPosition="tail" preferredPlacement="anywhere" ratio="0.5" textColor="#000000" visible="true" width="4.0" x="-24.7935791015625" y="2.0"></y:EdgeLabel>
324
+ <y:BendStyle smoothed="false"/>
325
+ </y:PolyLineEdge>
326
+ </data>
327
+ <data key="d3">UMLuses</data>
328
+ </edge>
329
+ </graph>
330
+ <data key="d4">
331
+ <y:Resources/>
332
+ </data>
333
+ </graphml>