⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplepropertybeangenerator.java

📁 c3p0数据库连接池实现源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Distributed as part of c3p0 v.0.9.1-pre6 * * Copyright (C) 2005 Machinery For Change, Inc. * * Author: Steve Waldman <swaldman@mchange.com> * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 2.1, as  * published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this software; see the file LICENSE.  If not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. */package com.mchange.v2.codegen.bean;import java.io.*;import java.util.*;import com.mchange.v2.log.*;import java.lang.reflect.Modifier;import com.mchange.v1.lang.ClassUtils;import com.mchange.v2.codegen.CodegenUtils;import com.mchange.v2.codegen.IndentedWriter;public class SimplePropertyBeanGenerator implements PropertyBeanGenerator{    private final static MLogger logger = MLog.getLogger( SimplePropertyBeanGenerator.class );    private boolean inner              = false;    private int     java_version       = 130; //1.3.0    private boolean force_unmodifiable = false;    private String  generatorName      = this.getClass().getName();    // helper vars for generate method    protected ClassInfo      info;    protected Property[]     props;    protected IndentedWriter iw;    protected Set generalImports;    protected Set specificImports;    protected Set interfaceNames;    protected Class   superclassType;    protected List    interfaceTypes;    protected Class[] propertyTypes;    protected List generatorExtensions = new ArrayList();    public synchronized void setInner( boolean inner )    { this.inner = inner; }    public synchronized boolean isInner()    { return inner; }    /**     * @param version a three digit number -- for example Java 1.3.1 is 131     */    public synchronized void setJavaVersion(int version)     { this.java_version = java_version; }    public synchronized int getJavaVersion()    { return java_version; }    public synchronized void setGeneratorName(String generatorName)     { this.generatorName = generatorName; }    public synchronized String getGeneratorName()    { return generatorName; }    public synchronized void setForceUnmodifiable(boolean force_unmodifiable)    { this.force_unmodifiable = force_unmodifiable; }    public synchronized boolean isForceUnmodifiable()    { return force_unmodifiable; }    public synchronized void addExtension( GeneratorExtension ext )    { generatorExtensions.add( ext ); }    public synchronized void removeExtension( GeneratorExtension ext )    { generatorExtensions.remove( ext ); }    public synchronized void generate( ClassInfo info, Property[] props, Writer w) throws IOException    {	this.info = info;	this.props = props;	Arrays.sort( props, BeangenUtils.PROPERTY_COMPARATOR );	this.iw = ( w instanceof IndentedWriter ? (IndentedWriter) w : new IndentedWriter(w));	this.generalImports = new TreeSet();	if ( info.getGeneralImports() != null )	    generalImports.addAll( Arrays.asList( info.getGeneralImports() ) );	this.specificImports = new TreeSet();	if ( info.getSpecificImports() != null )	    specificImports.addAll( Arrays.asList( info.getSpecificImports() ) );	this.interfaceNames = new TreeSet();	if ( info.getInterfaceNames() != null )	    interfaceNames.addAll( Arrays.asList( info.getInterfaceNames() ) );	addInternalImports();	addInternalInterfaces();	resolveTypes();	if (! inner )	    {		writeHeader();		iw.println();	    }	writeClassDeclaration();	iw.println('{');	iw.upIndent();	writeCoreBody();	iw.downIndent();	iw.println('}');    }    protected void resolveTypes()    {	String[] gen = (String[]) generalImports.toArray( new String[ generalImports.size() ] );	String[] spc = (String[]) specificImports.toArray( new String[ specificImports.size() ] );	if ( info.getSuperclassName() != null )	    {		try		    { superclassType = ClassUtils.forName( info.getSuperclassName(), gen, spc ); }		catch ( Exception e )		    {// 			System.err.println("WARNING: " + this.getClass().getName() + " could not resolve " +// 					   "superclass '" + info.getSuperclassName() + "'.");			if ( logger.isLoggable( MLevel.WARNING ) )			    logger.warning(this.getClass().getName() + " could not resolve superclass '" + info.getSuperclassName() + "'.");			superclassType = null;		    }	    }	interfaceTypes = new ArrayList( interfaceNames.size() );	for ( Iterator ii = interfaceNames.iterator(); ii.hasNext(); )	    {		String name = (String) ii.next();		try 		    { interfaceTypes.add( ClassUtils.forName( name , gen, spc ) ); }		catch ( Exception e )		    {// 			System.err.println("WARNING: " + this.getClass().getName() + " could not resolve " +// 					   "interface '" + name + "'.");			if ( logger.isLoggable( MLevel.WARNING ) )			    logger.warning(this.getClass().getName() + " could not resolve interface '" + name + "'.");			interfaceTypes.add( null );		    }	    }	propertyTypes = new Class[ props.length ];	for ( int i = 0, len = props.length; i < len; ++i )	    {		String name = props[i].getSimpleTypeName();		try 		    { propertyTypes[i] = ClassUtils.forName( name , gen, spc ); }		catch ( Exception e )		    {// 			e.printStackTrace();// 			System.err.println("WARNING: " + this.getClass().getName() + " could not resolve " +// 					   "property type '" + name + "'.");			if ( logger.isLoggable( MLevel.WARNING ) )			    logger.log( MLevel.WARNING, this.getClass().getName() + " could not resolve property type '" + name + "'.", e);			propertyTypes[i] = null;		    }	    }    }    protected void addInternalImports()    {	if (boundProperties())	    {		specificImports.add("java.beans.PropertyChangeEvent");		specificImports.add("java.beans.PropertyChangeSupport");		specificImports.add("java.beans.PropertyChangeListener");	    }	if (constrainedProperties())	    {		specificImports.add("java.beans.PropertyChangeEvent");		specificImports.add("java.beans.PropertyVetoException");		specificImports.add("java.beans.VetoableChangeSupport");		specificImports.add("java.beans.VetoableChangeListener");	    }	for (Iterator ii = generatorExtensions.iterator(); ii.hasNext(); )	    {		GeneratorExtension ge = (GeneratorExtension) ii.next();		specificImports.addAll( ge.extraSpecificImports() );		generalImports.addAll( ge.extraGeneralImports() );	    }    }    protected void addInternalInterfaces()    {	for (Iterator ii = generatorExtensions.iterator(); ii.hasNext(); )	    {		GeneratorExtension ge = (GeneratorExtension) ii.next();		interfaceNames.addAll( ge.extraInterfaceNames() );	    }    }    protected void writeCoreBody() throws IOException    {	writeJavaBeansChangeSupport();	writePropertyVariables();	writeOtherVariables();	iw.println();	writeGetterSetterPairs();	if ( boundProperties() )	    {		iw.println();		writeBoundPropertyEventSourceMethods();	    }	if ( constrainedProperties() )	    {		iw.println();		writeConstrainedPropertyEventSourceMethods();	    }	writeInternalUtilityFunctions();	writeOtherFunctions();	writeOtherClasses();	String[] completed_intfc_names = (String[]) interfaceNames.toArray( new String[ interfaceNames.size() ] );	String[] completed_gen_imports = (String[]) generalImports.toArray( new String[ generalImports.size() ] );	String[] completed_spc_imports = (String[]) specificImports.toArray( new String[ specificImports.size() ] );	ClassInfo completedClassInfo = new SimpleClassInfo( info.getPackageName(),							    info.getModifiers(),							    info.getClassName(),							    info.getSuperclassName(),							    completed_intfc_names,							    completed_gen_imports,							    completed_spc_imports );	for (Iterator ii = generatorExtensions.iterator(); ii.hasNext(); )	    {		GeneratorExtension ext = (GeneratorExtension) ii.next();		iw.println();		ext.generate( completedClassInfo, superclassType, props, propertyTypes, iw );	    }    }    protected void writeInternalUtilityFunctions() throws IOException    {	iw.println("private boolean eqOrBothNull( Object a, Object b )");	iw.println("{");	iw.upIndent();	iw.println("return");	iw.upIndent();	iw.println("a == b ||");	iw.println("(a != null && a.equals(b));");	iw.downIndent();	iw.downIndent();	iw.println("}");    }    protected void writeConstrainedPropertyEventSourceMethods() throws IOException    {	iw.println("public void addVetoableChangeListener( VetoableChangeListener vcl )");	iw.println("{ vcs.addVetoableChangeListener( vcl ); }");	iw.println();		iw.println("public void removeVetoableChangeListener( VetoableChangeListener vcl )");	iw.println("{ vcs.removeVetoableChangeListener( vcl ); }");	iw.println();	if (java_version >= 140)	    {		iw.println("public VetoableChangeListener[] getVetoableChangeListeners()");		iw.println("{ return vcs.getPropertyChangeListeners(); }");	    }    }    protected void writeBoundPropertyEventSourceMethods() throws IOException    {	iw.println("public void addPropertyChangeListener( PropertyChangeListener pcl )");	iw.println("{ pcs.addPropertyChangeListener( pcl ); }");	iw.println();		iw.println("public void addPropertyChangeListener( String propName, PropertyChangeListener pcl )");	iw.println("{ pcs.addPropertyChangeListener( propName, pcl ); }");	iw.println();		iw.println("public void removePropertyChangeListener( PropertyChangeListener pcl )");	iw.println("{ pcs.removePropertyChangeListener( pcl ); }");	iw.println();	iw.println("public void removePropertyChangeListener( String propName, PropertyChangeListener pcl )");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -