001: /*
002: * Distributed as part of c3p0 v.0.9.1.2
003: *
004: * Copyright (C) 2005 Machinery For Change, Inc.
005: *
006: * Author: Steve Waldman <swaldman@mchange.com>
007: *
008: * This library is free software; you can redistribute it and/or modify
009: * it under the terms of the GNU Lesser General Public License version 2.1, as
010: * published by the Free Software Foundation.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public License
018: * along with this software; see the file LICENSE. If not, write to the
019: * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020: * Boston, MA 02111-1307, USA.
021: */
022:
023: package com.mchange.v2.codegen.bean;
024:
025: import java.util.*;
026: import com.mchange.v2.codegen.IndentedWriter;
027: import com.mchange.v2.naming.JavaBeanObjectFactory;
028: import com.mchange.v2.naming.JavaBeanReferenceMaker;
029:
030: import java.io.IOException;
031:
032: public class PropertyReferenceableExtension implements
033: GeneratorExtension {
034: boolean explicit_reference_properties = false;
035:
036: String factoryClassName = JavaBeanObjectFactory.class.getName();
037:
038: String javaBeanReferenceMakerClassName = JavaBeanReferenceMaker.class
039: .getName();
040:
041: public void setUseExplicitReferenceProperties(
042: boolean explicit_reference_properties) {
043: this .explicit_reference_properties = explicit_reference_properties;
044: }
045:
046: public boolean getUseExplicitReferenceProperties() {
047: return explicit_reference_properties;
048: }
049:
050: public void setFactoryClassName(String factoryClassName) {
051: this .factoryClassName = factoryClassName;
052: }
053:
054: public String getFactoryClassName() {
055: return factoryClassName;
056: }
057:
058: // public void setJavaBeanReferenceMakerClassName( String javaBeanReferenceMakerClassName )
059: // { this.javaBeanReferenceMakerClassName = javaBeanReferenceMakerClassName; }
060:
061: // public String getJavaBeanReferenceMakerClassName()
062: // { return javaBeanReferenceMakerClassName; }
063:
064: public Collection extraGeneralImports() {
065: Set set = new HashSet();
066: return set;
067: }
068:
069: public Collection extraSpecificImports() {
070: Set set = new HashSet();
071: set.add("javax.naming.Reference");
072: set.add("javax.naming.Referenceable");
073: set.add("javax.naming.NamingException");
074: set.add("com.mchange.v2.naming.JavaBeanObjectFactory");
075: set.add("com.mchange.v2.naming.JavaBeanReferenceMaker");
076: set.add("com.mchange.v2.naming.ReferenceMaker");
077: return set;
078: }
079:
080: public Collection extraInterfaceNames() {
081: Set set = new HashSet();
082: set.add("Referenceable");
083: return set;
084: }
085:
086: public void generate(ClassInfo info, Class super classType,
087: Property[] props, Class[] propTypes, IndentedWriter iw)
088: throws IOException {
089: iw
090: .println("final static JavaBeanReferenceMaker referenceMaker = new "
091: + javaBeanReferenceMakerClassName + "();");
092: iw.println();
093: iw.println("static");
094: iw.println("{");
095: iw.upIndent();
096:
097: iw.println("referenceMaker.setFactoryClassName( \""
098: + factoryClassName + "\" );");
099: if (explicit_reference_properties) {
100: for (int i = 0, len = props.length; i < len; ++i)
101: iw.println("referenceMaker.addReferenceProperty(\""
102: + props[i].getName() + "\");");
103: }
104:
105: iw.downIndent();
106: iw.println("}");
107: iw.println();
108: iw
109: .println("public Reference getReference() throws NamingException");
110: iw.println("{");
111: iw.upIndent();
112:
113: iw.println("return referenceMaker.createReference( this );");
114:
115: iw.downIndent();
116: iw.println("}");
117: }
118: }
|