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;
}
}