01: /*
02: * Distributed as part of c3p0 v.0.9.1.2
03: *
04: * Copyright (C) 2005 Machinery For Change, Inc.
05: *
06: * Author: Steve Waldman <swaldman@mchange.com>
07: *
08: * This library is free software; you can redistribute it and/or modify
09: * it under the terms of the GNU Lesser General Public License version 2.1, as
10: * published by the Free Software Foundation.
11: *
12: * This software is distributed in the hope that it will be useful,
13: * but WITHOUT ANY WARRANTY; without even the implied warranty of
14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: * GNU Lesser General Public License for more details.
16: *
17: * You should have received a copy of the GNU Lesser General Public License
18: * along with this software; see the file LICENSE. If not, write to the
19: * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20: * Boston, MA 02111-1307, USA.
21: */
22:
23: package com.mchange.v2.codegen.bean;
24:
25: import java.util.*;
26: import java.lang.reflect.Modifier;
27: import java.io.IOException;
28: import com.mchange.v2.codegen.CodegenUtils;
29: import com.mchange.v2.codegen.IndentedWriter;
30:
31: public class CopyConstructorGeneratorExtension implements
32: GeneratorExtension {
33: int ctor_modifiers = Modifier.PUBLIC;
34:
35: public Collection extraGeneralImports() {
36: return Collections.EMPTY_SET;
37: }
38:
39: public Collection extraSpecificImports() {
40: return Collections.EMPTY_SET;
41: }
42:
43: public Collection extraInterfaceNames() {
44: return Collections.EMPTY_SET;
45: }
46:
47: public void generate(ClassInfo info, Class super classType,
48: Property[] props, Class[] propTypes, IndentedWriter iw)
49: throws IOException {
50: iw.print(CodegenUtils.getModifierString(ctor_modifiers));
51: iw.print(" " + info.getClassName() + "( ");
52: iw.print(info.getClassName() + " copyMe");
53: iw.println(" )");
54: iw.println("{");
55: iw.upIndent();
56:
57: for (int i = 0, len = props.length; i < len; ++i) {
58: String propGetterMethodCall;
59: if (propTypes[i] == boolean.class)
60: propGetterMethodCall = "is"
61: + BeangenUtils.capitalize(props[i].getName())
62: + "()";
63: else
64: propGetterMethodCall = "get"
65: + BeangenUtils.capitalize(props[i].getName())
66: + "()";
67: iw.println(props[i].getSimpleTypeName() + ' '
68: + props[i].getName() + " = copyMe."
69: + propGetterMethodCall + ';');
70: iw.print("this." + props[i].getName() + " = ");
71: String setExp = props[i].getDefensiveCopyExpression();
72: if (setExp == null)
73: setExp = props[i].getName();
74: iw.println(setExp + ';');
75: }
76:
77: iw.downIndent();
78: iw.println("}");
79: }
80: }
|