📄 basicrenderer.java
字号:
//$Id: BasicRenderer.java,v 1.7 2003/09/27 11:17:10 maxcsaucdk Exp $package net.sf.hibernate.tool.hbm2java;import java.io.PrintWriter;import java.io.Serializable;import java.io.StringWriter;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import net.sf.hibernate.util.StringHelper;public class BasicRenderer extends AbstractRenderer { static final protected int ORDINARY = 0; static final protected int BOUND = 1; static final protected int CONSTRAINT = 3;//any constraint properties are bound as well public void render(String savedToPackage, String savedToClass, ClassMapping classMapping, Map class2classmap, PrintWriter mainwriter) throws Exception { genPackageDelaration(savedToPackage, classMapping, mainwriter); mainwriter.println(); // switch to another writer to be able to insert the actually // used imports when whole class has been rendered. StringWriter strWriter = new StringWriter(); PrintWriter writer = new PrintWriter(strWriter); // class declaration if(classMapping.getMeta("class-description")==null) { writer.println("/** @author Hibernate CodeGenerator */"); } else { writer.println("/** \n" + toJavaDoc(classMapping.getMetaAsString("class-description"),0) + "*/"); } String classScope = "public"; if(classMapping.getMeta("scope-class")!=null) { classScope = classMapping.getMetaAsString("scope-class").trim(); } String declarationType = null; if(classMapping.isInterface()) { declarationType = "interface"; } else { declarationType = "class"; } if(classMapping.shouldBeAbstract() && (classScope.indexOf("abstract")==-1)) { writer.print( "abstract " + classScope + " " + declarationType + " " + savedToClass ); } else { writer.print( classScope + " " + declarationType + " " + savedToClass ); } // subclasses/interfaces String superClass = classMapping.getSuperClass(); Set interfaces = new HashSet(); if(!classMapping.isInterface()) { if(superClass!=null) { writer.print( " extends " + superClass); } else if (classMapping.getMeta("extends")!=null) { writer.print( " extends " + classMapping.getMetaAsString("extends")); } if (classMapping.getMeta("implements")!=null) { interfaces.addAll(classMapping.getMeta("implements")); } interfaces.add(Serializable.class.getName()); classMapping.addImport(Serializable.class.getName()); } else { // class is an interface if(classMapping.getSuperClass()!=null) { interfaces.add(superClass); } if (classMapping.getMeta("extends")!=null) { interfaces.addAll(classMapping.getMeta("extends")); } } // implement proxy, but NOT if the proxy is the class it self! if (classMapping.getProxy()!=null && ( !classMapping.getProxy().equals( classMapping.getCanonicalName() ) )) { interfaces.add(classMapping.getProxy()); } if(interfaces.size()>0) { if(!classMapping.isInterface()) { writer.print(" implements "); } else { writer.print(" extends "); } for (Iterator iter = interfaces.iterator(); iter.hasNext();) { writer.print(shortenType(iter.next().toString(), classMapping.getImports())); if(iter.hasNext()) writer.print(","); } } writer.println(" {"); writer.println(); // switch to another writer to be able to insert the // veto- and changeSupport fields StringWriter strPropWriter = new StringWriter(); PrintWriter propWriter = new PrintWriter(strPropWriter); if(!classMapping.isInterface()) { doFields(classMapping, class2classmap, propWriter); doConstructors(savedToClass, classMapping, class2classmap, propWriter); } String vetoSupport = makeSupportField("vetos", classMapping.getAllFields()); String changeSupport = makeSupportField("changes", classMapping.getAllFields()); int fieldTypes = doFieldAccessors(classMapping, class2classmap, propWriter, vetoSupport, changeSupport); if(!classMapping.isInterface()) { doSupportMethods(fieldTypes, vetoSupport, changeSupport, propWriter); doToString(classMapping, propWriter); doEqualsAndHashCode(savedToClass,classMapping, propWriter); } propWriter.println("}"); //insert change and VetoSupport if(!classMapping.isInterface()) { doSupports(fieldTypes, classMapping, vetoSupport, changeSupport, writer); } writer.print(strPropWriter.toString()); // finally write the imports doImports(classMapping, mainwriter); mainwriter.print(strWriter.toString()); } /** * Method doSupportMethods. * @param fieldTypes * @param vetoSupport * @param changeSupport * @param propWriter */ private void doSupportMethods( int fieldTypes, String vetoSupport, String changeSupport, PrintWriter writer) { if((fieldTypes&CONSTRAINT)==CONSTRAINT) { writer.println(" public void addVetoableChangeListener( VetoableChangeListener l ) {"); writer.println(" "+vetoSupport+".addVetoableChangeListener(l);"); writer.println(" }"); writer.println(" public void removeVetoableChangeListener( VetoableChangeListener l ) {"); writer.println(" "+vetoSupport+".removeVetoableChangeListener(l);"); writer.println(" }"); writer.println(); } if((fieldTypes&BOUND)==BOUND) { writer.println(" public void addPropertyChangeListener( PropertyChangeListener l ) {"); writer.println(" "+changeSupport+".addPropertyChangeListener(l);"); writer.println(" }"); writer.println(" public void removePropertyChangeListener( PropertyChangeListener l ) {"); writer.println(" "+changeSupport+".removePropertyChangeListener(l);"); writer.println(" }"); writer.println(); } } /** * Method doSupports. * @param vetoSupport * @param changeSupport * @param writer */ private void doSupports( int fieldTypes, ClassMapping classMapping, String vetoSupport, String changeSupport, PrintWriter writer) { if((fieldTypes&CONSTRAINT)==CONSTRAINT) { writer.println( " private VetoableChangeSupport "+vetoSupport+ " = new VetoableChangeSupport(this);" ); classMapping.getImports().add("java.beans.VetoableChangeSupport"); classMapping.getImports().add("java.beans.PropertyVetoException"); classMapping.getImports().add("java.beans.VetoableChangeListener"); } if((fieldTypes&BOUND)==BOUND) { writer.println( " private PropertyChangeSupport "+changeSupport+ " = new PropertyChangeSupport(this);" ); writer.println(); classMapping.getImports().add("java.beans.PropertyChangeSupport"); classMapping.getImports().add("java.beans.PropertyChangeListener"); } } public void doConstructors(String savedToClass, ClassMapping classMapping, Map class2classmap, PrintWriter writer) { // full constructor List allFieldsForFullConstructor = classMapping.getAllFieldsForFullConstructor(); writer.println(" /** full constructor */"); String fullCons = " public " + savedToClass + StringHelper.OPEN_PAREN; for(Iterator fields = allFieldsForFullConstructor.iterator(); fields.hasNext();) { Field field = (Field) fields.next(); fullCons = fullCons + shortenType(getTrueTypeName(field, class2classmap), classMapping.getImports()) + " " + field.getName(); if(fields.hasNext()) { fullCons = fullCons + ", "; } } writer.println(fullCons + ") {"); //invoke super to initialize superclass... List supersConstructorFields = classMapping.getFieldsForSupersFullConstructor(); if (!supersConstructorFields.isEmpty()) { writer.print(" super("); for (Iterator fields = supersConstructorFields.iterator(); fields.hasNext();) { Field field = (Field) fields.next(); writer.print(field.getName()); if(fields.hasNext()) { writer.print(", "); } } writer.println(");"); } // initialisation of localfields for(Iterator fields = classMapping.getLocalFieldsForFullConstructor().iterator(); fields.hasNext();) { Field field = (Field) fields.next(); if(field.isGeneratedAsProperty()) { writer.println(" this." + field.getName() + " = " + field.getName() + ";"); } } writer.println(" }"); writer.println(); // no args constructor (if fullconstructor had any arguments!) if (allFieldsForFullConstructor.size() > 0) { writer.println(" /** default constructor */"); writer.println(" public " + savedToClass + "() {"); writer.println(" }"); writer.println(); } // minimal constructor (only if the fullconstructor had any arguments) if ((allFieldsForFullConstructor.size() > 0) && classMapping.needsMinimalConstructor()) { List allFieldsForMinimalConstructor = classMapping.getAllFieldsForMinimalConstructor(); writer.println(" /** minimal constructor */"); String minCons = " public " + savedToClass + "("; for (Iterator fields = allFieldsForMinimalConstructor.iterator(); fields.hasNext();) { Field field = (Field) fields.next(); minCons = minCons + shortenType(getTrueTypeName(field, class2classmap), classMapping.getImports()) + " " + field.getName(); if (fields.hasNext()) { minCons = minCons + ", "; } } writer.println(minCons + ") {");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -