Couldn't find those upload thing.
Maybe, because this RFE is already assigned to you?

Anyway here comes the patch.
In addition to changing the BasicRenderer
it fixes something I consider a bug(typo) in
ClassName, where some misplaced brace lets
remain the name null if the type is a primitive.

regards Klaus
? test
? test
? target
Index: src/net/sf/hibernate/tool/hbm2java/BasicRenderer.java
===================================================================
RCS file: 
/cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/tool/hbm2java/BasicRenderer.java,v
retrieving revision 1.9
diff -u -r1.9 BasicRenderer.java
--- src/net/sf/hibernate/tool/hbm2java/BasicRenderer.java       2 Feb 2003 17:34:09 
-0000       1.9
+++ src/net/sf/hibernate/tool/hbm2java/BasicRenderer.java       10 Feb 2003 22:40:59 
-0000
@@ -16,6 +16,10 @@
 import org.apache.commons.logging.LogFactory;
 
 public class BasicRenderer implements Renderer {
+       
+       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
 
     static private Log log = LogFactory.getLog(BasicRenderer.class);   
        /**
@@ -40,6 +44,17 @@
         return name;
     }
     
+    private String makeSupportField(String fieldName, List fieldList) {
+       String suffix="";
+       boolean needSuffix=false;
+       for( Iterator fields = fieldList.iterator(); fields.hasNext();) {
+               String name = ((Field)fields.next()).getName();
+               if(name.equals(fieldName)) needSuffix=true;
+               suffix+=name;
+       }
+       return needSuffix ? fieldName+"_"+suffix : fieldName;
+    }
+    
     String getTrueTypeName(ClassName cn, Map class2classmap) {
         String name = cn.getFullyQualifiedName();
         ClassMapping cmap = (ClassMapping) class2classmap.get(name);
@@ -116,19 +131,31 @@
         
         writer.println(" {");
         writer.println();
-    
-        doFields(classMapping, writer);
         
-        doConstructors(classMapping, class2classmap, writer);
+        // switch to another writer to be able to insert the 
+        // veto- and changeSupport fields
+        StringWriter strPropWriter = new StringWriter();
+        PrintWriter propWriter = new PrintWriter(strPropWriter);
+
+        doFields(classMapping, propWriter);
+        
+        doConstructors(classMapping, class2classmap, propWriter);
        
-        doFieldAccessors(classMapping, class2classmap, writer);
+        String vetoSupport = makeSupportField("vetos", classMapping.getAllFields());
+        String changeSupport = makeSupportField("changes", 
classMapping.getAllFields());    
+        int fieldTypes = doFieldAccessors(classMapping, class2classmap, propWriter, 
vetoSupport, changeSupport);
+        doSupportMethods(fieldTypes, vetoSupport, changeSupport, propWriter);
             
-        doToString(classMapping, writer);
+        doToString(classMapping, propWriter);
         
-               doEqualsAndHashCode(classMapping, writer);
+               doEqualsAndHashCode(classMapping, propWriter);
        
-        writer.println("}");
+        propWriter.println("}");
+        
+        //insert change and VetoSupport
+        doSupports(fieldTypes, classMapping, vetoSupport, changeSupport, writer);
         
+        writer.print(strPropWriter.toString());
         
         // finally write the imports
         doImports(classMapping, mainwriter);
@@ -137,6 +164,67 @@
         
     }
 
+       /**
+        * 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(ClassMapping classMapping, Map class2classmap, 
PrintWriter writer) {
                // full constructor
                List allFieldsForFullConstructor = 
classMapping.getAllFieldsForFullConstructor();
@@ -292,8 +380,24 @@
                writer.println();
                
        }
+       
+       private String getFieldAsObject(boolean prependThis, Field field) {
+                       ClassName type = field.getClassType();                  
+                       if(type != null && type.isPrimitive()) {
+                               String typeName = type.getName();
+                               typeName = "new 
"+typeName.substring(0,1).toUpperCase()+typeName.substring(1)+"( ";
+                               typeName += prependThis ? "this." : "";
+                               return typeName+field.getName()+" )";                  
         
+                       }
+                       return field.getName();
+       }
 
-    public void doFieldAccessors(ClassMapping classMapping, Map class2classmap, 
PrintWriter writer) {
+    public int doFieldAccessors(ClassMapping classMapping, 
+                                                                                      
 Map class2classmap, 
+                                                                                      
 PrintWriter writer,
+                                                                                      
 String vetoSupport,
+                                                                                      
 String changeSupport) {
+       int fieldTypes=ORDINARY;
         // field accessors
         for (Iterator fields = classMapping.getFields().iterator(); 
fields.hasNext();) {
             Field field = (Field) fields.next();
@@ -311,9 +415,32 @@
             writer.println();
         
             // setter
+            int fieldType=0;
+            if(field.getMeta("beans-property-type")!=null) {
+               String beansPropertyType = 
field.getMetaAsString("beans-property-type").toLowerCase();
+               if(beansPropertyType.equals("constraint") ) {
+                       fieldTypes = (fieldTypes | CONSTRAINT);
+                       fieldType = CONSTRAINT;
+               }
+               else if(beansPropertyType.equals("bound") ) {
+                       fieldTypes = (fieldTypes | BOUND);
+                       fieldType = BOUND;
+               }
+            }
             String setAccessScope = getFieldScope(field, "scope-set", "public");
-            writer.println("    " + setAccessScope + " void set" + 
field.getAsSuffix() + StringHelper.OPEN_PAREN + getTrueTypeName(field, class2classmap) 
+ " " + field.getName() + ") {");
+            writer.print("    " + setAccessScope + " void set" + field.getAsSuffix() 
+ StringHelper.OPEN_PAREN + getTrueTypeName(field, class2classmap) + " " + 
field.getName() + ")");
+            writer.println((fieldType&CONSTRAINT)==CONSTRAINT ? " throws 
PropertyVetoException {" : " {");
+                       if((fieldType&CONSTRAINT)==CONSTRAINT) {
+                       writer.println("        
"+vetoSupport+".fireVetoableChange(\""+field.getName()+"\",");
+                       writer.println("                "+getFieldAsObject(true, 
field)+",");
+                       writer.println("                "+getFieldAsObject(false, 
field)+");");
+                       }
             writer.println("        this." + field.getName() + " = " + 
field.getName() + ";");
+            if((fieldType&BOUND)==BOUND) {
+                       writer.println("        
"+changeSupport+".firePropertyChange(\""+field.getName()+"\",");
+                       writer.println("                "+getFieldAsObject(true, 
field)+",");
+                       writer.println("                "+getFieldAsObject(false, 
field)+");");
+            }
             writer.println("    }");
             writer.println();
             
@@ -352,6 +479,7 @@
             }
             */
         }
+        return fieldTypes;
         
     }
 
Index: src/net/sf/hibernate/tool/hbm2java/ClassName.java
===================================================================
RCS file: 
/cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/tool/hbm2java/ClassName.java,v
retrieving revision 1.4
diff -u -r1.4 ClassName.java
--- src/net/sf/hibernate/tool/hbm2java/ClassName.java   16 Jan 2003 20:52:38 -0000     
 1.4
+++ src/net/sf/hibernate/tool/hbm2java/ClassName.java   10 Feb 2003 22:40:58 -0000
@@ -30,10 +30,10 @@
                                        packageName = fullyQualifiedName.substring(0, 
lastDot);
                                }
                        }
-                       else {
-                               name = fullyQualifiedName;
-                               packageName = null;
-                       }
+               }
+               else {
+                       name = fullyQualifiedName;
+                       packageName = null;
                }
        }
        

Reply via email to