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.
- data/CHANGES.txt +14 -0
- data/README.rdoc +24 -4
- data/Rakefile +3 -3
- data/VERSION.yml +2 -2
- data/examples/employees/final/xampl-gen.rb +38 -0
- data/examples/employees/final/xml/ddd-final.xml +86 -0
- data/examples/employees/first/xampl-gen.rb +38 -0
- data/examples/employees/first/xml/ddd-first.xml +48 -0
- data/examples/employees/twist/twist.graphml +333 -0
- data/examples/employees/twist/xampl-gen.rb +38 -0
- data/examples/employees/twist/xml/twist.xml +90 -0
- data/examples/employees/xamplr-twist.xml +2 -0
- data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
- data/examples/employees/yuml-diagrams/ddd-final.yuml +8 -0
- data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
- data/examples/employees/yuml-diagrams/ddd-first.yuml +7 -0
- data/examples/employees/yuml-diagrams/final-yed.png +0 -0
- data/examples/employees/yuml-diagrams/first-yed.png +0 -0
- data/examples/employees/yuml-diagrams/twist.png +0 -0
- data/examples/employees/yuml-diagrams/twist.yuml +12 -0
- data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
- data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
- data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
- data/examples/employees/yuml-diagrams/yuml-simplified.txt +19 -0
- data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +53 -0
- data/examples/employees/yuml-diagrams/yuml.txt +27 -0
- data/examples/random-people-shared-addresses/xampl-gen.rb +2 -0
- data/examples/random-people/xampl-gen.rb +2 -0
- data/examples/read-testing/xampl-gen.rb +2 -0
- data/examples/tokyo-cabinet-experimental/xampl-gen.rb +2 -0
- data/lib/xamplr-generator.rb +0 -1
- data/lib/xamplr.rb +1 -1
- data/lib/xamplr/graphml-out.rb +0 -12
- data/lib/xamplr/persisters/tokyo-cabinet.rb +12 -2
- data/lib/xamplr/xampl-generator.rb +4 -0
- data/lib/xamplr/yuml-out.rb +136 -0
- metadata +30 -4
data/CHANGES.txt
CHANGED
@@ -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).
|
data/README.rdoc
CHANGED
@@ -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
|
-
|
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
|
-
|
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('
|
15
|
-
gem.add_dependency('libxml-ruby',
|
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
|
data/VERSION.yml
CHANGED
@@ -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>
|