s2container 0.8.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 (136) hide show
  1. data/Apache_Software_License_2.0.txt +202 -0
  2. data/ChangeLog +1 -0
  3. data/ChangeLog.ja +64 -0
  4. data/README +9 -0
  5. data/Rakefile +51 -0
  6. data/example/example01/example.rb +13 -0
  7. data/example/example01/run.rb +20 -0
  8. data/example/example02/example.rb +30 -0
  9. data/example/example02/run.rb +8 -0
  10. data/example/example03/example.rb +8 -0
  11. data/example/example03/run.rb +12 -0
  12. data/example/example04/example.rb +9 -0
  13. data/example/example04/run.rb +15 -0
  14. data/example/example05/example.rb +9 -0
  15. data/example/example05/run.rb +21 -0
  16. data/example/example06/example.rb +9 -0
  17. data/example/example06/run.rb +8 -0
  18. data/example/example07/example.rb +8 -0
  19. data/example/example07/run.rb +15 -0
  20. data/example/example08/example.rb +9 -0
  21. data/example/example08/run.rb +19 -0
  22. data/example/example09/example.rb +7 -0
  23. data/example/example09/run.rb +11 -0
  24. data/example/example10/example.rb +9 -0
  25. data/example/example10/run.rb +10 -0
  26. data/example/example11/example.rb +18 -0
  27. data/example/example11/run.rb +10 -0
  28. data/example/example12/example.rb +9 -0
  29. data/example/example12/run.rb +8 -0
  30. data/example/example13/example.rb +18 -0
  31. data/example/example13/example.sql +4 -0
  32. data/example/example13/run.rb +22 -0
  33. data/example/example13/sample.db +0 -0
  34. data/example/example14/example.db +0 -0
  35. data/example/example14/example.rb +57 -0
  36. data/example/example14/example.sql +50 -0
  37. data/example/example14/run1.rb +23 -0
  38. data/example/example14/run2.rb +28 -0
  39. data/example/example14/run3.rb +25 -0
  40. data/example/example14/run4.rb +23 -0
  41. data/example/example14/run5.rb +35 -0
  42. data/example/example15/example.rb +20 -0
  43. data/example/example15/run.rb +28 -0
  44. data/example/example16/example.rb +15 -0
  45. data/example/example16/run.rb +24 -0
  46. data/example/quickstart/quickstart1/quickstart.rb +10 -0
  47. data/example/quickstart/quickstart2/quickstart.rb +9 -0
  48. data/example/quickstart/quickstart3/quickstart.rb +9 -0
  49. data/example/quickstart/quickstart4/quickstart.rb +14 -0
  50. data/example/quickstart/quickstart5/quickstart.rb +21 -0
  51. data/example/quickstart/quickstart6/quickstart.rb +28 -0
  52. data/example/quickstart/quickstart7/quickstart.rb +18 -0
  53. data/lib/s2container.rb +25 -0
  54. data/lib/seasar/aop/aspect.rb +30 -0
  55. data/lib/seasar/aop/interceptor/trace-interceptor.rb +48 -0
  56. data/lib/seasar/aop/method-invocation.rb +57 -0
  57. data/lib/seasar/aop/pointcut.rb +53 -0
  58. data/lib/seasar/aop/s2aop-factory.rb +125 -0
  59. data/lib/seasar/aop.rb +29 -0
  60. data/lib/seasar/beans/abstract-property-desc.rb +59 -0
  61. data/lib/seasar/beans/attribute-accessor-desc.rb +60 -0
  62. data/lib/seasar/beans/bean-desc-factory.rb +68 -0
  63. data/lib/seasar/beans/bean-desc.rb +232 -0
  64. data/lib/seasar/beans/instance-variable-desc.rb +58 -0
  65. data/lib/seasar/beans.rb +29 -0
  66. data/lib/seasar/container/arg-def.rb +51 -0
  67. data/lib/seasar/container/aspect-def.rb +60 -0
  68. data/lib/seasar/container/aspect-info-def.rb +94 -0
  69. data/lib/seasar/container/assembler/abstract-assembler.rb +68 -0
  70. data/lib/seasar/container/assembler/auto-property-assembler.rb +57 -0
  71. data/lib/seasar/container/assembler/autobinding-auto-def.rb +55 -0
  72. data/lib/seasar/container/assembler/autobinding-def-factory.rb +57 -0
  73. data/lib/seasar/container/assembler/autobinding-none-def.rb +53 -0
  74. data/lib/seasar/container/assembler/manual-constructor-assembler.rb +67 -0
  75. data/lib/seasar/container/assembler/manual-property-assembler.rb +68 -0
  76. data/lib/seasar/container/autobinding-def.rb +36 -0
  77. data/lib/seasar/container/component-def.rb +229 -0
  78. data/lib/seasar/container/component-info-def.rb +117 -0
  79. data/lib/seasar/container/deployer/abstract-component-deployer.rb +47 -0
  80. data/lib/seasar/container/deployer/instance-def-factory.rb +56 -0
  81. data/lib/seasar/container/deployer/instance-outer-def.rb +44 -0
  82. data/lib/seasar/container/deployer/instance-prototype-def.rb +44 -0
  83. data/lib/seasar/container/deployer/instance-singleton-def.rb +42 -0
  84. data/lib/seasar/container/deployer/outer-component-deployer.rb +47 -0
  85. data/lib/seasar/container/deployer/prototype-component-deployer.rb +51 -0
  86. data/lib/seasar/container/deployer/singleton-component-deployer.rb +54 -0
  87. data/lib/seasar/container/exception/component-notfound-runtime-exception.rb +44 -0
  88. data/lib/seasar/container/exception/cyclic-reference-runtime-exception.rb +43 -0
  89. data/lib/seasar/container/exception/illegal-autobinding-def-runtime-exception.rb +43 -0
  90. data/lib/seasar/container/exception/illegal-instance-def-runtime-exception.rb +44 -0
  91. data/lib/seasar/container/exception/toomany-registration-runtime-exception.rb +46 -0
  92. data/lib/seasar/container/instance-def.rb +37 -0
  93. data/lib/seasar/container/outer-component-def.rb +34 -0
  94. data/lib/seasar/container/property-def.rb +43 -0
  95. data/lib/seasar/container/s2application-context.rb +447 -0
  96. data/lib/seasar/container/s2container-component-def.rb +41 -0
  97. data/lib/seasar/container/s2container.rb +308 -0
  98. data/lib/seasar/container/simple-component-def.rb +45 -0
  99. data/lib/seasar/container/toomany-registration-component-def.rb +69 -0
  100. data/lib/seasar/container.rb +143 -0
  101. data/lib/seasar/dbi/dbi-interceptor.rb +97 -0
  102. data/lib/seasar/dbi/paginate.rb +215 -0
  103. data/lib/seasar/dbi.rb +26 -0
  104. data/lib/seasar/exception/notyet-implemented-exception.rb +25 -0
  105. data/lib/seasar/exception/property-notfound-runtime-exception.rb +48 -0
  106. data/lib/seasar/exception/s2runtime-exception.rb +35 -0
  107. data/lib/seasar/exception/unsupported-operation-exception.rb +25 -0
  108. data/lib/seasar/exception.rb +27 -0
  109. data/lib/seasar/log/s2logger.rb +75 -0
  110. data/lib/seasar/log.rb +38 -0
  111. data/lib/seasar/util/class-util.rb +116 -0
  112. data/lib/seasar/util.rb +24 -0
  113. data/setup.rb +1585 -0
  114. data/test/seasar/aop/test_pointcut.rb +25 -0
  115. data/test/seasar/aop/test_s2aop_factory.rb +90 -0
  116. data/test/seasar/beans/test_bean-desc.rb +179 -0
  117. data/test/seasar/container/assembler/test_auto_property_assembler.rb +87 -0
  118. data/test/seasar/container/assembler/test_autobinding_def_factory.rb +22 -0
  119. data/test/seasar/container/assembler/test_manual_property_assembler.rb +59 -0
  120. data/test/seasar/container/assembler/test_manula_constructor_assembler.rb +59 -0
  121. data/test/seasar/container/assembler/test_proc_constructor_assembler.rb +61 -0
  122. data/test/seasar/container/deployer/test_instance_def_factory.rb +24 -0
  123. data/test/seasar/container/deployer/test_prototype-deployer.rb +25 -0
  124. data/test/seasar/container/deployer/test_singleton-component-deployer.rb +24 -0
  125. data/test/seasar/container/s2app_load_sample.rb +6 -0
  126. data/test/seasar/container/test_arg-def.rb +34 -0
  127. data/test/seasar/container/test_aspect-info-def.rb +85 -0
  128. data/test/seasar/container/test_component-def.rb +91 -0
  129. data/test/seasar/container/test_component-info-def.rb +88 -0
  130. data/test/seasar/container/test_s2application-context.rb +290 -0
  131. data/test/seasar/container/test_s2container.rb +268 -0
  132. data/test/seasar/dbi/test_paginate.rb +265 -0
  133. data/test/seasar/test_log.rb +20 -0
  134. data/test/seasar/test_util.rb +46 -0
  135. data/test/test-suite.rb +7 -0
  136. metadata +211 -0
@@ -0,0 +1,68 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ module Assembler
22
+ # マニュアルインジェクションでプロパティを設定するアセンブラです。
23
+ class ManualPropertyAssembler < AbstractAssembler
24
+
25
+ # ManualPropertyAssemblerを構築します。
26
+ # - args
27
+ # 1. Seasar::Container::ComponentDef <em>component_def</em>
28
+ def initialize(component_def)
29
+ super
30
+ end
31
+
32
+ # マニュアルプロパティインジェクションを実施します。
33
+ # - args
34
+ # 1. Object <em>component</em>
35
+ # - return
36
+ # - none
37
+ #
38
+ def assemble(component)
39
+ bean_desc = Seasar::Beans::BeanDescFactory.get_bean_desc(component)
40
+ prop_descs = bean_desc.typehint_property_descs
41
+ property_defs = @component_def.get_property_defs
42
+ @component_def.get_property_defs.each {|property_name, property_def|
43
+ value = nil
44
+ if bean_desc.property_descs.key?(property_name)
45
+ prop_desc = bean_desc.property_descs[property_name]
46
+ begin
47
+ value = property_def.value
48
+ rescue Seasar::Container::Exception::TooManyRegistrationRuntimeException => e
49
+ if prop_desc.array_acceptable
50
+ child_component_defs = property_def.container.get_component_def(property_def.value).component_defs
51
+ value = []
52
+ for child_component_def in child_component_defs
53
+ value << child_component_def.component
54
+ end
55
+ else
56
+ raise e
57
+ end
58
+ end
59
+ prop_desc.set_value(component, value)
60
+ else
61
+ raise Seasar::Exception::PropertyNotFoundRuntimeException.new(@component_def.component_class, property_name)
62
+ end
63
+ }
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ class AutoBindingDef
22
+ AUTO_NAME = :auto
23
+ NONE_NAME = :none
24
+
25
+ #
26
+ # - args
27
+ # 1. Seasar::Container::ComponentDef <em>component_def</em>
28
+ # - return
29
+ # - Seasar::Container::Assembler::AbstractAssembler
30
+ #
31
+ def create_property_assembler(component_def)
32
+ end
33
+ attr_accessor :name
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,229 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ class ComponentDef
22
+
23
+ # - args
24
+ # 1. Class <em>component_class</em>
25
+ # 2. String|Symbol <em>component_name</em>
26
+ # 3. Proc <em>procedure</em>
27
+ def initialize(component_class, component_name = nil, &procedure)
28
+ @procedure = procedure
29
+ @onetime_proc = nil
30
+ @container = nil
31
+ @component_class = component_class
32
+ @concreate_class = nil
33
+ @component_name = component_name.nil? ? Seasar::Util::ClassUtil.ub_name(component_class) : component_name
34
+ @component_deployer = nil
35
+ @arg_defs = []
36
+ @property_defs = {}
37
+ @aspect_defs = []
38
+ @instance_def = Seasar::Container::Deployer::InstanceDefFactory.get_instance_def(InstanceDef::SINGLETON_NAME)
39
+ @autobinding_def = Seasar::Container::Assembler::AutoBindingDefFactory.get_autobinding_def(AutoBindingDef::AUTO_NAME)
40
+ end
41
+ attr_accessor :container, :component_class, :component_name, :instance_def, :autobinding_def
42
+ attr_accessor :procedure, :onetime_proc
43
+
44
+ #
45
+ # - args
46
+ # - none
47
+ # - return
48
+ # - Object
49
+ #
50
+ def get_component
51
+ return self.get_component_deployer.deploy
52
+ end
53
+ alias component get_component
54
+
55
+ #
56
+ # - args
57
+ # 1. Seasar::Container::S2Container <em>container</em>
58
+ # - return
59
+ # - none
60
+ #
61
+ def container=(container)
62
+ @container = container
63
+ @arg_defs.each {|i| i.container = container}
64
+ @property_defs.each {|i, v| v.container = container}
65
+ @aspect_defs.each {|i| i.container = container}
66
+ end
67
+
68
+ #
69
+ # - args
70
+ # 1. Integer <em>index</em>
71
+ # - return
72
+ # - Seasar::Container::ArgDef
73
+ #
74
+ def get_arg_def(index)
75
+ return @arg_defs[index]
76
+ end
77
+
78
+ #
79
+ # - args
80
+ # - none
81
+ # - return
82
+ # - Integer
83
+ #
84
+ def get_arg_def_size
85
+ return @arg_defs.length
86
+ end
87
+
88
+ #
89
+ # - args
90
+ # 1. Seasar::Container::ArgDef <em>arg_def</em>
91
+ # - return
92
+ # - none
93
+ #
94
+ def add_arg_def(arg_def)
95
+ if arg_def.container.nil?
96
+ arg_def.container = @container
97
+ end
98
+ @arg_defs << arg_def
99
+ end
100
+
101
+ #
102
+ # - args
103
+ # - none
104
+ # - return
105
+ # - Array
106
+ #
107
+ def get_arg_defs
108
+ return @arg_defs
109
+ end
110
+
111
+ #
112
+ # - args
113
+ # 1. Symbol <em>property_name</em>
114
+ # - return
115
+ # - Boolean
116
+ #
117
+ def has_property_def(property_name)
118
+ return @property_defs.key?(property_name)
119
+ end
120
+
121
+ #
122
+ # - args
123
+ # 1. String <em>property_name</em>
124
+ # - return
125
+ # - Seasar::Container::PropertyDef
126
+ #
127
+ def get_property_def(property_name)
128
+ return @property_defs[property_name]
129
+ end
130
+
131
+ #
132
+ # - args
133
+ # - none
134
+ # - return
135
+ # - Array
136
+ #
137
+ def get_property_defs
138
+ return @property_defs
139
+ end
140
+
141
+ #
142
+ # - args
143
+ # - none
144
+ # - return
145
+ # - Integer
146
+ #
147
+ def get_property_def_size
148
+ return @property_defs.length
149
+ end
150
+
151
+ #
152
+ # - args
153
+ # 1. Seasar::Container::PropertyDef <em>property_def</em>
154
+ # - return
155
+ # - none
156
+ #
157
+ def add_property_def(property_def)
158
+ if property_def.container.nil?
159
+ property_def.container = @container
160
+ end
161
+ @property_defs[property_def.property_name] = property_def
162
+ end
163
+
164
+ #
165
+ # - args
166
+ # 1. Integer <em>index</em>
167
+ # - return
168
+ # - Seasar::Container::AspectDef
169
+ #
170
+ def get_aspect_def(index)
171
+ return @aspect_defs[index]
172
+ end
173
+
174
+ #
175
+ # - args
176
+ # - none
177
+ # - return
178
+ # - Integer
179
+ #
180
+ def get_aspect_def_size()
181
+ return @aspect_defs.length
182
+ end
183
+
184
+ #
185
+ # - args
186
+ # 1. Seasar::Container::AspectDef <em>aspect_def</em>
187
+ # - return
188
+ # - none
189
+ #
190
+ def add_aspect_def(aspect_def)
191
+ @concreate_class = nil
192
+ if aspect_def.container.nil?
193
+ aspect_def.container = @container
194
+ end
195
+ @aspect_defs << aspect_def
196
+ end
197
+
198
+ #
199
+ # - args
200
+ # - none
201
+ # - return
202
+ # - Seasar::Container::Deployer::AbstractComponentDeployer
203
+ #
204
+ def get_component_deployer
205
+ if @component_deployer.nil?
206
+ @component_deployer = @instance_def.create_component_deployer(self)
207
+ end
208
+ return @component_deployer
209
+ end
210
+
211
+ #
212
+ # - args
213
+ # - none
214
+ # - return
215
+ # - Class
216
+ #
217
+ def get_concreate_class
218
+ if @aspect_defs.length == 0
219
+ return @component_class
220
+ end
221
+ if not @concreate_class.nil?
222
+ return @concreate_class
223
+ end
224
+ @concreate_class = Seasar::Aop::S2AopFactory.create(@component_class, @aspect_defs.map {|aspect_def| aspect_def.aspect})
225
+ return @concreate_class
226
+ end
227
+ end
228
+ end
229
+ end
@@ -0,0 +1,117 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ class ComponentInfoDef
22
+ @@auto_namespace = false
23
+
24
+ class << self
25
+ #
26
+ # - args
27
+ # 1. Boolean <em>val</em>
28
+ # - return
29
+ # - none
30
+ #
31
+ def auto_namespace=(val); @@auto_namespace = val; end
32
+
33
+ #
34
+ # - args
35
+ # - none
36
+ # - return
37
+ # - Boolean
38
+ #
39
+ def auto_namespace; return @@auto_namespace; end
40
+ end
41
+
42
+ # - args
43
+ # 1. Hash <em>options</em>
44
+ # 1. Proc <em>procedure</em>
45
+ def initialize(options, &procedure)
46
+ @component_class = options[:class]
47
+ @component_name = options[:name]
48
+ @instance = options[:instance]
49
+ @autobinding = options[:autobinding]
50
+ @namespace = options[:namespace]
51
+ @procedure = procedure
52
+ end
53
+ attr_accessor :component_class, :component_name, :instance, :autobinding, :namespace, :procedure
54
+
55
+ #
56
+ # - args
57
+ # - none
58
+ # - return
59
+ # - String
60
+ #
61
+ def namespace
62
+ return @namespace unless @namespace.nil?
63
+ if @@auto_namespace
64
+ @namespace = Seasar::Util::ClassUtil.module_name(@component_class).gsub(/::/, '.')
65
+ end
66
+ return @namespace
67
+ end
68
+
69
+ #
70
+ # - args
71
+ # 1. Symbol <em>key</em>
72
+ # - return
73
+ # - Object
74
+ #
75
+ def [](key)
76
+ return self.instance_variable_get(key)
77
+ end
78
+
79
+ #
80
+ # - args
81
+ # 1. Objectn <em>matcher</em>
82
+ # - return
83
+ # - Boolean
84
+ #
85
+ def match(matcher)
86
+ case
87
+ when matcher.is_a?(Regexp)
88
+ if @component_name.is_a?(String)
89
+ if matcher.match(@component_name)
90
+ return true
91
+ end
92
+ end
93
+ return matcher.match(@component_class.name)
94
+ when matcher.is_a?(Class)
95
+ return @component_class == matcher
96
+ when matcher.is_a?(Module)
97
+ return @component_class.name.match(/^#{matcher.name}::/)
98
+ when matcher.is_a?(String)
99
+ return (matcher == @component_name or matcher == @component_class.name)
100
+ when matcher.is_a?(Symbol)
101
+ return (matcher == @component_name or matcher == @component_class.name.to_sym)
102
+ else
103
+ raise ArgumentError.new("unsupported argument #{matcher}")
104
+ end
105
+ end
106
+
107
+ def ==(other)
108
+ @component_class == other.component_class &&
109
+ @component_name == other.component_name &&
110
+ @instance == other.instance &&
111
+ @autobinding == other.autobinding &&
112
+ self.namespace() == other.namespace() &&
113
+ @procedure == other.procedure
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ module Deployer
22
+ # コンポーネントを組み立てる抽象クラスです。
23
+ class AbstractComponentDeployer
24
+
25
+ # AbstractComponentDeployerを構築します。
26
+ # - args
27
+ # 1. Seasar::Container::ComponentDef <em>component_def</em>
28
+ def initialize(component_def)
29
+ @component_def = component_def
30
+ @constructor_assembler = nil
31
+ @property_assembler = nil
32
+ self.setup_assembler
33
+ end
34
+
35
+ # デフォルトのアセンブラインスタンスを作成します。
36
+ # - args
37
+ # - none
38
+ # - return
39
+ # - none
40
+ def setup_assembler
41
+ @constructor_assembler = @component_def.autobinding_def.create_constructor_assembler(@component_def)
42
+ @property_assembler = @component_def.autobinding_def.create_property_assembler(@component_def)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,56 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ module Deployer
22
+
23
+ # インスタンスの管理方法を表すクラスを生成・管理するファクトリクラスです。
24
+ class InstanceDefFactory
25
+
26
+ @@instance_defs = {}
27
+
28
+ #InstanceDefを追加します。
29
+ # - args
30
+ # 1. Seasar::Container::InstanceDef <em>instance_def</em>
31
+ # - return
32
+ # - none
33
+ def InstanceDefFactory.add_instance_def(instance_def)
34
+ @@instance_defs[instance_def.name] = instance_def
35
+ end
36
+
37
+ # 指定された名前のInstanceDefを返します。
38
+ # - args
39
+ # 1. Symbol <em>name</em>
40
+ # - return
41
+ # - Seasar::Container::InstanceDef
42
+ def InstanceDefFactory.get_instance_def(name)
43
+ if not @@instance_defs.key?(name)
44
+ raise Seasar::Container::Exception::IllegalInstanceDefRuntimeException.new(name)
45
+ end
46
+ return @@instance_defs[name]
47
+ end
48
+ end
49
+
50
+ # InstanceDefFactoryに初期値としてInstanceDefを登録します。
51
+ InstanceDefFactory.add_instance_def(InstanceSingletonDef.new(Seasar::Container::InstanceDef::SINGLETON_NAME))
52
+ InstanceDefFactory.add_instance_def(InstancePrototypeDef.new(Seasar::Container::InstanceDef::PROTOTYPE_NAME))
53
+ InstanceDefFactory.add_instance_def(InstanceOuterDef.new(Seasar::Container::InstanceDef::OUTER_NAME))
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ module Deployer
22
+
23
+ # インスタンスの管理をOuter Componentと定義するクラスです。
24
+ class InstanceOuterDef < Seasar::Container::InstanceDef
25
+
26
+ # InstanceOuterDefを構築します。
27
+ # - args
28
+ # 1. Symbol <em>name</em>
29
+ def initialize(name)
30
+ @name = name
31
+ end
32
+
33
+ # OuterComponentDeployerを生成します。
34
+ # - args
35
+ # 1. Seasar::Container::ComponentDef <em>component_def</em>
36
+ # - return
37
+ # - Seasar::Container::Deployer::OuterComponentDeployer
38
+ def create_component_deployer(component_def)
39
+ return OuterComponentDeployer.new(component_def)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ module Deployer
22
+
23
+ # インスタンスの管理をPrototypeと定義するクラスです。
24
+ class InstancePrototypeDef < Seasar::Container::InstanceDef
25
+
26
+ # InstancePrototypeDefを構築します。
27
+ # - args
28
+ # 1. Symbol <em>name</em>
29
+ def initialize(name)
30
+ @name = name
31
+ end
32
+
33
+ # PrototypeComponentDeployerを生成します。
34
+ # - args
35
+ # 1. Seasar::Container::ComponentDef <em>component_def</em>
36
+ # - return
37
+ # - Seasar::Container::Deployer::PrototypeComponentDeployer
38
+ def create_component_deployer(component_def)
39
+ return PrototypeComponentDeployer.new(component_def)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,42 @@
1
+ # -*- coding: utf-8 -*-
2
+ #--
3
+ # +----------------------------------------------------------------------+
4
+ # | Copyright 2005-2008 the Seasar Foundation and the Others. |
5
+ # +----------------------------------------------------------------------+
6
+ # | Licensed under the Apache License, Version 2.0 (the "License"); |
7
+ # | you may not use this file except in compliance with the License. |
8
+ # | You may obtain a copy of the License at |
9
+ # | |
10
+ # | http://www.apache.org/licenses/LICENSE-2.0 |
11
+ # | |
12
+ # | Unless required by applicable law or agreed to in writing, software |
13
+ # | distributed under the License is distributed on an "AS IS" BASIS, |
14
+ # | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, |
15
+ # | either express or implied. See the License for the specific language |
16
+ # | governing permissions and limitations under the License. |
17
+ # +----------------------------------------------------------------------+
18
+ #++
19
+ module Seasar
20
+ module Container
21
+ module Deployer
22
+ #インスタンスの管理をSingletonと定義するクラスです。
23
+ class InstanceSingletonDef < Seasar::Container::InstanceDef
24
+ # InstanceSingletonDefを構築します。
25
+ # - args
26
+ # 1. Symbol <em>name</em>
27
+ def initialize(name)
28
+ @name = name
29
+ end
30
+
31
+ # SingletonComponentDeployerを生成します。
32
+ # - args
33
+ # 1. Seasar::Container::ComponentDef <em>component_def</em>
34
+ # - return
35
+ # - Seasar::Container::Deployer::SingletonComponentDeployer
36
+ def create_component_deployer(component_def)
37
+ return SingletonComponentDeployer.new(component_def)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end