kwatable 0.1.0 → 0.2.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 (41) hide show
  1. data/ChangeLog.txt +15 -3
  2. data/README.txt +1 -1
  3. data/bin/kwatable +3 -9
  4. data/examples/ex1/Makefile +18 -26
  5. data/examples/ex1/example1.yaml +9 -6
  6. data/examples/ex2/Makefile +15 -24
  7. data/kwatable.gemspec +2 -2
  8. data/lib/kwatable.rb +1 -1
  9. data/lib/kwatable/error-msg.rb +1 -1
  10. data/lib/kwatable/kwatable.schema.yaml +12 -2
  11. data/lib/kwatable/main-program.rb +18 -7
  12. data/lib/kwatable/manipulator.rb +3 -3
  13. data/lib/kwatable/templates/ddl-mysql.eruby +1 -1
  14. data/lib/kwatable/templates/ddl-postgresql.eruby +3 -3
  15. data/lib/kwatable/templates/defaults.yaml +1 -1
  16. data/lib/kwatable/templates/dto-java.eruby +75 -9
  17. data/lib/kwatable/templates/dto-ruby.eruby +27 -15
  18. data/lib/kwatable/templates/validator-ruby.eruby +97 -0
  19. data/test/assert-diff.rb +1 -1
  20. data/test/test.rb +80 -151
  21. metadata +4 -25
  22. data/test/test1/test1.ddl-mysql.expected +0 -23
  23. data/test/test1/test1.ddl-postgresql.expected +0 -23
  24. data/test/test1/test1.dto-java.Group.expected +0 -35
  25. data/test/test1/test1.dto-java.User.expected +0 -57
  26. data/test/test1/test1.dto-ruby.Group.expected +0 -20
  27. data/test/test1/test1.dto-ruby.User.expected +0 -33
  28. data/test/test1/test1.yaml +0 -96
  29. data/test/test2/test2.ddl-mysql.expected +0 -49
  30. data/test/test2/test2.ddl-postgresql.expected +0 -49
  31. data/test/test2/test2.dto-java.Address.expected +0 -40
  32. data/test/test2/test2.dto-java.Customer.expected +0 -47
  33. data/test/test2/test2.dto-java.Item.expected +0 -35
  34. data/test/test2/test2.dto-java.SalesOrder.expected +0 -48
  35. data/test/test2/test2.dto-java.SalesOrderLine.expected +0 -54
  36. data/test/test2/test2.dto-ruby.Address.expected +0 -22
  37. data/test/test2/test2.dto-ruby.Customer.expected +0 -29
  38. data/test/test2/test2.dto-ruby.Item.expected +0 -20
  39. data/test/test2/test2.dto-ruby.SalesOrder.expected +0 -29
  40. data/test/test2/test2.dto-ruby.SalesOrderLine.expected +0 -36
  41. data/test/test2/test2.yaml +0 -94
@@ -1,9 +1,21 @@
1
1
  .=title: ChangeLog
2
2
  .?copyright: copyright(c) 2005 kuwata-lab.com all rights reserved.
3
- .?release: $Release: 0.1.0 $
4
- .?version: $Rev: 15 $
3
+ .?release: $Release: 0.2.0 $
4
+ .?version: $Rev: 18 $
5
5
 
6
- .: 2005-10-13 rev.16
6
+ .: 2006-03-03 rev.18
7
+ .- [bugfix] wrong argument passed to Kwatable.msg() in Manipulaotr#_error()
8
+
9
+ .: 2006-02-26 rev.17
10
+ .- [bugfix] fixed on dto-java.eruby
11
+ .- [bugfix] fixed on dto-ruby.eruby
12
+ .- [change] add new entry 'all2' on examples/*/Makefile
13
+ .- [change] add 'required: yes' and 'pattern: /^\w+$/' on column name in kwatable.schema.yaml
14
+ .- [enhance] add 'name: label, type: str' in kwatable.schema.yaml
15
+ .- [enhance] add 'validator-ruby.eruby'
16
+ .- [change] test/test.rb is rewrited and test/test{1,2} are removed
17
+
18
+ .: 2005-10-14 rev.16 (release 0.1.0)
7
19
  .- [release] 0.1.0
8
20
 
9
21
  .: 2005-10-13 rev.15
data/README.txt CHANGED
@@ -1,5 +1,5 @@
1
1
  .=title: README
2
- .?release: $Release: 0.1.0 $
2
+ .?release: $Release: 0.2.0 $
3
3
 
4
4
 
5
5
  .$ About
@@ -4,17 +4,11 @@
4
4
  ### kwatable - create table, dto class, or other from table definition
5
5
  ###
6
6
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
7
- ### $Release: 0.1.0 $
8
- ### $Rev: 13 $
7
+ ### $Release: 0.2.0 $
8
+ ### $Rev: 17 $
9
9
  ###
10
10
 
11
11
  require 'kwatable'
12
12
  require 'kwatable/main-program'
13
13
 
14
- begin
15
- main = Kwatable::MainProgram.new(ARGV)
16
- output = main.execute()
17
- print output if output
18
- rescue Kwatable::KwatableError => ex
19
- $stderr.puts "[ERROR] #{ex.message()}"
20
- end
14
+ Kwatable::MainProgram.main(ARGV)
@@ -1,34 +1,26 @@
1
1
  ###
2
2
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
3
- ### $Release: 0.1.0 $
4
- ### $Rev: 11 $
3
+ ### $Release: 0.2.0 $
4
+ ### $Rev: 17 $
5
5
  ###
6
6
 
7
- datafile = example1.yaml
7
+ DATAFILE = example1.yaml
8
+ OPTS_DTO_JAVA = --package=my.example --parent=Object --populate --constructor
9
+ OPTS_DTO_RUBY = --module=Example --parent=Object --reqpath=lib --symbolkey
8
10
 
9
- all: ddl-mysql ddl-postgresql dto-java dto-ruby
10
11
 
11
- clean:
12
- rm -f *.sql *.java *.rb
12
+ all:
13
+ kwatable -f ddl-mysql.eruby $(DATAFILE) > ddl-mysql.sql
14
+ kwatable -f ddl-postgresql.eruby $(DATAFILE) > ddl-postgresql.sql
15
+ kwatable -m -f dto-java.eruby $(DATAFILE)
16
+ kwatable -m -f dto-ruby.eruby $(DATAFILE)
17
+
18
+ all2:
19
+ kwatable -f ddl-mysql.eruby $(DATAFILE) > ddl-mysql.sql
20
+ kwatable -f ddl-postgresql.eruby $(DATAFILE) > ddl-postgresql.sql
21
+ kwatable $(OPTS_DTO_JAVA) -m -f dto-java.eruby $(DATAFILE)
22
+ kwatable $(OPTS_DTO_RUBY) -m -f dto-ruby.eruby $(DATAFILE)
13
23
 
14
- ddl-mysql:
15
- kwatable -f ddl-mysql.eruby $(datafile) > ddl-mysql.sql
16
- ddl-postgresql:
17
- kwatable -f ddl-postgresql.eruby $(datafile) > ddl-postgresql.sql
18
- dto-java:
19
- kwatable -m -f dto-java.eruby $(datafile)
20
- dto-ruby:
21
- kwatable -m -f dto-ruby.eruby $(datafile)
24
+ clean:
25
+ rm -f *.sql *.java *.rb *.class
22
26
 
23
- #bindir = ../../bin
24
- #libdir = ../../lib
25
- #tpldir = $(libdir)/kwatable/templates
26
- #
27
- #ddl-mysql:
28
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -f ddl-mysql.eruby $(datafile) > ddl-mysql.sql
29
- #ddl-postgresql:
30
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -f ddl-postgresql.eruby $(datafile) > ddl-postgresql.sql
31
- #dto-java:
32
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -m -f dto-java.eruby $(datafile)
33
- #dto-ruby:
34
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -m -f dto-ruby.eruby $(datafile)
@@ -2,8 +2,8 @@
2
2
  ## example data file for kwatable
3
3
  ##
4
4
  ## copyright(c) 2005 kuwata-lab.com all rights reserved.
5
- ## $Release: 0.1.0 $
6
- ## $Rev: 15 $
5
+ ## $Release: 0.2.0 $
6
+ ## $Rev: 17 $
7
7
  ##
8
8
 
9
9
  columns:
@@ -52,7 +52,7 @@ columns:
52
52
  type: timestamp
53
53
 
54
54
  - name: gender
55
- type: string
55
+ type: char
56
56
  enum:
57
57
  - M
58
58
  - F
@@ -68,10 +68,12 @@ tables:
68
68
  desc: group name
69
69
  - name: desc
70
70
  desc: group description
71
- - name: class
72
- desc: group class
71
+ - name: case
73
72
  type: string
74
- enum: [ ADMIN, SYSTEM, USER, UNUSED ]
73
+ enum: [ normal, debug, emergency ]
74
+ - name: flag_active
75
+ desc: is active?
76
+ type: boolean
75
77
 
76
78
  - name: users
77
79
  class: User
@@ -84,6 +86,7 @@ tables:
84
86
  - name: desc
85
87
  desc: description about user
86
88
  - name: email
89
+ - name: gender
87
90
  - name: group_id
88
91
  ref: groups.id
89
92
  desc: group id to which user belongs
@@ -1,34 +1,25 @@
1
1
  ###
2
2
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
3
- ### $Release: 0.1.0 $
4
- ### $Rev: 11 $
3
+ ### $Release: 0.2.0 $
4
+ ### $Rev: 17 $
5
5
  ###
6
6
 
7
7
  datafile = example2.yaml
8
+ props_dto_java = --package=my.example --parent=Object --populate --constructor
9
+ props_dto_ruby = --module=Example --parent=Object --reqpath=lib --symbolkey
8
10
 
9
- all: ddl-mysql ddl-postgresql dto-java dto-ruby
10
-
11
- clean:
12
- rm -f *.sql *.java *.rb
11
+ all:
12
+ kwatable -f ddl-mysql.eruby $(datafile) > ddl-mysql.sql
13
+ kwatable -f ddl-postgresql.eruby $(datafile) > ddl-postgresql.sql
14
+ kwatable -m -f dto-java.eruby $(datafile)
15
+ kwatable -m -f dto-ruby.eruby $(datafile)
13
16
 
14
- ddl-mysql:
17
+ all2:
15
18
  kwatable -f ddl-mysql.eruby $(datafile) > ddl-mysql.sql
16
- ddl-postgresql:
17
19
  kwatable -f ddl-postgresql.eruby $(datafile) > ddl-postgresql.sql
18
- dto-java:
19
- kwatable -m -f dto-java.eruby $(datafile)
20
- dto-ruby:
21
- kwatable -m -f dto-ruby.eruby $(datafile)
20
+ kwatable $(props_dto_java) -m -f dto-java.eruby $(datafile)
21
+ kwatable $(props_dto_ruby) -m -f dto-ruby.eruby $(datafile)
22
+
23
+ clean:
24
+ rm -f *.sql *.java *.rb *.class
22
25
 
23
- #bindir = ../../bin
24
- #libdir = ../../lib
25
- #tpldir = $(libdir)/kwatable/templates
26
- #
27
- #ddl-mysql:
28
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -f ddl-mysql.eruby $(datafile) > ddl-mysql.sql
29
- #ddl-postgresql:
30
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -f ddl-postgresql.eruby $(datafile) > ddl-postgresql.sql
31
- #dto-java:
32
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -m -f dto-java.eruby $(datafile)
33
- #dto-ruby:
34
- # ruby -I $(libdir) $(bindir)/kwatable -I $(tpldir) -m -f dto-ruby.eruby $(datafile)
@@ -4,7 +4,7 @@
4
4
  ### RubyGems Specification file for kwatable
5
5
  ###
6
6
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
7
- ### $Release: 0.1.0 $
7
+ ### $Release: 0.2.0 $
8
8
  ### $Rev: 10 $
9
9
  ###
10
10
 
@@ -14,7 +14,7 @@ spec = Gem::Specification.new do |s|
14
14
  ## package information
15
15
  s.name = 'kwatable'
16
16
  s.author = 'makoto kuwata'
17
- s.version = ("$Release: 0.1.0 $" =~ /Release: ([\.\d]+)/) && $1
17
+ s.version = ("$Release: 0.2.0 $" =~ /Release: ([\.\d]+)/) && $1
18
18
  s.platform = Gem::Platform::RUBY
19
19
  s.homepage = 'http://www.kuwata-lab.com/kwatable'
20
20
  s.summary = "SQL and DTO generator from table definition"
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
3
- ### $Release: 0.1.0 $
3
+ ### $Release: 0.2.0 $
4
4
  ### $Rev: 15 $
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
3
- ### $Release: 0.1.0 $
3
+ ### $Release: 0.2.0 $
4
4
  ### $Rev: 15 $
5
5
  ###
6
6
 
@@ -2,8 +2,8 @@
2
2
  ### schema definition of kwalify for kwatable
3
3
  ###
4
4
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
5
- ### $Release: 0.1.0 $
6
- ### $Rev: 15 $
5
+ ### $Release: 0.2.0 $
6
+ ### $Rev: 17 $
7
7
  ###
8
8
 
9
9
 
@@ -16,8 +16,12 @@ mapping:
16
16
  mapping: &columrule
17
17
  "name":
18
18
  type: str
19
+ required: yes
20
+ pattern: /^\w+$/
19
21
  "desc":
20
22
  type: text
23
+ "label":
24
+ type: str
21
25
  "type":
22
26
  type: str
23
27
  enum:
@@ -36,6 +40,8 @@ mapping:
36
40
  - time
37
41
  - timestamp
38
42
  - money
43
+ - lob
44
+ - blob
39
45
  "width":
40
46
  type: int
41
47
  #"identifier":
@@ -75,10 +81,14 @@ mapping:
75
81
  "name":
76
82
  type: str
77
83
  required: yes
84
+ pattern: /^\w+$/
78
85
  "desc":
79
86
  type: text
87
+ "label":
88
+ type: str
80
89
  "class":
81
90
  type: str
91
+ pattern: /^[A-Z]\w+$/
82
92
  "columns":
83
93
  type: seq
84
94
  sequence:
@@ -1,7 +1,7 @@
1
1
  ###
2
2
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
3
- ### $Release: 0.1.0 $
4
- ### $Rev: 15 $
3
+ ### $Release: 0.2.0 $
4
+ ### $Rev: 17 $
5
5
  ###
6
6
 
7
7
  require 'yaml'
@@ -85,7 +85,7 @@ module Kwatable
85
85
  output_filename = context[:output_filename]
86
86
  output_filename = "#{options[?d]}/#{output_filename}" if options[?d]
87
87
  File.open(output_filename, 'w') { |f| f.write(output) }
88
- unless options[?s]
88
+ unless options[?q]
89
89
  #* key=:file_generated msg="generated: %s"
90
90
  $stderr.puts(Kwatable.msg(:file_generated) % output_filename)
91
91
  end
@@ -95,8 +95,19 @@ module Kwatable
95
95
  return output
96
96
  end
97
97
 
98
+ def self.main(argv=ARGV)
99
+ begin
100
+ main = MainProgram.new(ARGV)
101
+ output = main.execute()
102
+ print output if output
103
+ rescue KwatableError => ex
104
+ $stderr.puts "[ERROR] #{ex.message()}"
105
+ end
106
+ end
107
+
98
108
  private
99
-
109
+
110
+
100
111
  def _option_error(message_key, *args)
101
112
  msg = Kwatable.msg(message_key) % args
102
113
  return CommandOptionError.new(msg)
@@ -131,7 +142,7 @@ module Kwatable
131
142
  optchar = optstr[0]
132
143
  optstr = optstr[1, optstr.length-1]
133
144
  case optchar
134
- when ?h, ?v, ?m, ?s, ?D
145
+ when ?h, ?v, ?m, ?q, ?D
135
146
  options[optchar] = true
136
147
  when ?f, ?t
137
148
  arg = optstr.empty? ? argv.shift : optstr
@@ -192,12 +203,12 @@ module Kwatable
192
203
  s << " -f template : template filename\n"
193
204
  s << " -m : multiple output file\n"
194
205
  s << " -d dir : output file directory (with '-m')\n"
195
- s << " -s : silent mode\n"
206
+ s << " -q : quiet mode\n"
196
207
  return s
197
208
  end
198
209
 
199
210
  def _version()
200
- return ("$Release: 0.1.0 $" =~ /[\.\d]+/ && $&)
211
+ return ("$Release: 0.2.0 $" =~ /[\.\d]+/ && $&)
201
212
  end
202
213
 
203
214
  end
@@ -1,7 +1,7 @@
1
1
  ###
2
2
  ### copyright(c) 2005 kuwata-lab.com all rights reserved.
3
- ### $Release: 0.1.0 $
4
- ### $Rev: 15 $
3
+ ### $Release: 0.2.0 $
4
+ ### $Rev: 18 $
5
5
  ###
6
6
 
7
7
  require 'yaml'
@@ -51,7 +51,7 @@ module Kwatable
51
51
  private
52
52
 
53
53
  def _error(message_key, *args)
54
- msg = Kwatable.msg(:regexp_invalid) % args
54
+ msg = Kwatable.msg(message_key) % args
55
55
  return ManipulationError.new(msg)
56
56
  end
57
57
 
@@ -4,7 +4,7 @@
4
4
  ## kwatable template file for MySQL
5
5
  ##
6
6
  ## copyright(c) 2005 kuwata-lab.com all rights reserved.
7
- ## $Release: 0.1.0 $
7
+ ## $Release: 0.2.0 $
8
8
  ## $Rev: 15 $
9
9
  ##
10
10
  ## template properties:
@@ -4,8 +4,8 @@
4
4
  ## kwatable template file for PostgreSQL
5
5
  ##
6
6
  ## copyright(c) 2005 kuwata-lab.com all rights reserved.
7
- ## $Release: 0.1.0 $
8
- ## $Rev: 15 $
7
+ ## $Release: 0.2.0 $
8
+ ## $Rev: 17 $
9
9
  ##
10
10
  ## template properties:
11
11
  ## (none)
@@ -17,7 +17,7 @@
17
17
  #
18
18
  tables = context['tables']
19
19
  properties = context['properties']
20
- raise "don't use '-m' option with 'ddl-mysql.eruby'." unless tables
20
+ raise "don't use '-m' option with 'ddl-postgresql.eruby'." unless tables
21
21
 
22
22
 
23
23
  #
@@ -4,7 +4,7 @@
4
4
  ## copyright(c) 2005 kuwata-lab all rights reserverd
5
5
  ##
6
6
  ## $Id: defaults.yaml 13 2005-09-15 00:21:25Z kwatch $
7
- ## $Release: 0.1.0 $
7
+ ## $Release: 0.2.0 $
8
8
  ##
9
9
 
10
10
  columns:
@@ -4,12 +4,14 @@
4
4
  ## kwatable template file for Java DTO class
5
5
  ##
6
6
  ## copyright(c) 2005 kuwata-lab.com all rights reserved.
7
- ## $Release: 0.1.0 $
8
- ## $Rev: 15 $
7
+ ## $Release: 0.2.0 $
8
+ ## $Rev: 17 $
9
9
  ##
10
10
  ## template properties:
11
- ## package - package name
12
- ## parent - parent class
11
+ ## --package=name : package name
12
+ ## --parent=name : parent class
13
+ ## --constructor : define constructor
14
+ ## --populate : define populate method
13
15
  ##
14
16
 
15
17
 
@@ -116,7 +118,7 @@
116
118
 
117
119
  */
118
120
  <% if klass[:package] %>
119
- package <%= package %>;
121
+ package <%= klass[:package] %>;
120
122
  <% end %>
121
123
  <% for class_name in imports %>
122
124
  import <%= class_name %>;
@@ -141,15 +143,79 @@ public class <%= klass[:name] %><%= extends %> implements java.io.Serializable {
141
143
 
142
144
  <%
143
145
  #
144
- # populator with java.sql.ResultSet
146
+ # constructor
145
147
  #
148
+ argstr = variables.collect { |var| "#{var[:type]} #{_(var[:name])}" }.join(', ')
146
149
  %>
147
- public void populate(java.sql.ResultSet resultset) {
148
- <% for var in variables %>
150
+ <% if properties[:constructor] %>
151
+ public <%= klass[:name] %>(<%= argstr %>) {
152
+ <% for var in variables %>
153
+ set<%= camel_case(var[:name]) %>(<%= _(var[:name]) %>);
154
+ <% end %>
155
+ }
156
+
157
+ <% end %>
158
+ <%
159
+ #
160
+ # set all values with java.sql.ResultSet
161
+ #
162
+ %>
163
+ <% if properties[:populate] %>
164
+ public void populate(java.sql.ResultSet resultset) throws java.sql.SQLException {
165
+ <% n = 0 %>
166
+ <% for var in variables %>
167
+ <% if var[:type] == 'char' %>
168
+ <% if (n += 1) == 1 %>
169
+ String val;
170
+ <% end %>
171
+ val = resultset.getString("<%= var[:name] %>");
172
+ set<%= camel_case(var[:name]) %>(val != null && val.length() > 0 ? val.charAt(0) : 0);
173
+ <% else %>
149
174
  set<%= camel_case(var[:name]) %>(resultset.get<%= var[:type].capitalize %>("<%= var[:name] %>"));
175
+ <% end %>
176
+ <% end %>
177
+ }
178
+
150
179
  <% end %>
180
+ <%
181
+ #
182
+ # set all properties
183
+ #
184
+ %>
185
+ <% if properties[:populate] %>
186
+ public void populate(java.util.Map _map) {
187
+ String val = null;
188
+ <% for var in variables %>
189
+ if (_map.containsKey("<%= var[:name] %>")) {
190
+ val = (String)_map.get("<%= var[:name] %>");
191
+ <% case var[:type] %>
192
+ <% when 'String' %>
193
+ this.<%= _(var[:name]) %> = val;
194
+ <% when 'int' %>
195
+ this.<%= _(var[:name]) %> = Integer.parseInt(val);
196
+ <% when 'long' %>
197
+ this.<%= _(var[:name]) %> = Long.parseLong(val);
198
+ <% when 'float' %>
199
+ this.<%= _(var[:name]) %> = Float.parseFloat(val);
200
+ <% when 'double' %>
201
+ this.<%= _(var[:name]) %> = Double.parseDouble(val);
202
+ <% when 'char' %>
203
+ this.<%= _(var[:name]) %> = val.length() > 0 ? val.charAt(0) : 0;
204
+ <% when 'boolean' %>
205
+ this.<%= _(var[:name]) %> = val.length() > 0;
206
+ <% when 'Date' %>
207
+ try {
208
+ this.<%= _(var[:name]) %> = java.text.DateFormat.getDateInstance().parse(val);
209
+ } catch (java.text.ParseException ignore) {
210
+ }
211
+ <% else %>
212
+ <% raise "*** internal error: template='dto-java.eruby', var[:type]=#{var[:type].inspect}" %>
213
+ <% end %>
214
+ }
215
+ <% end %>
151
216
  }
152
217
 
218
+ <% end %>
153
219
  <%
154
220
  #
155
221
  # getter/setter
@@ -160,7 +226,7 @@ public class <%= klass[:name] %><%= extends %> implements java.io.Serializable {
160
226
  getter = "#{vartype == 'boolean' ? 'is' : 'get'}#{camel_case(varname)}"
161
227
  setter = "set#{camel_case(varname)}"
162
228
  %>
163
- public <%= vartype %> <%= getter %>() { return <%= _(varname) %> }
229
+ public <%= vartype %> <%= getter %>() { return <%= _(varname) %>; }
164
230
  public void <%= setter %>(<%= vartype %> <%= _(varname) %>) { this.<%= _(varname) %> = <%= _(varname) %>; }
165
231
 
166
232
  <% end %>