User: vharcq Date: 02/03/07 14:35:19 Modified: core/resources/xdoclet/ejb entity-value-home.j entity-value.j valueobject.j Log: Thanks to Marcus Brito ! Value Objects : - Support added for entity bean with a PK field instead of a PK class - Support for JBoss dependant value object (CMP2) - Some more stuffs I don't remember. Marcus is ahead now. Let's trust him. Revision Changes Path 1.2 +10 -10 xdoclet/core/resources/xdoclet/ejb/entity-value-home.j Index: entity-value-home.j =================================================================== RCS file: /cvsroot/xdoclet/xdoclet/core/resources/xdoclet/ejb/entity-value-home.j,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- entity-value-home.j 3 Mar 2002 20:19:59 -0000 1.1 +++ entity-value-home.j 7 Mar 2002 22:35:18 -0000 1.2 @@ -1,8 +1,8 @@ <XDtMethod:ifHasMethodTag tagName="ejb:value-object"> <XDtClass:pushClass value="<XDtEjbValueObj:currentRelationBeanClass/>"> - <XDtEjbIntf:ifRemoteEjb> + <XDtEjbIntf:ifNotLocalEjb> <XDtEjbHome:homeInterface type="remote"/> home = <XDtEjbUtilObj:utilClass/>.getHome(); - </XDtEjbIntf:ifRemoteEjb> + </XDtEjbIntf:ifNotLocalEjb> <XDtEjbIntf:ifLocalEjb> <XDtEjbHome:homeInterface type="local"/> home = <XDtEjbUtilObj:utilClass/>.getLocalHome(); </XDtEjbIntf:ifLocalEjb> 1.10 +197 -152 xdoclet/core/resources/xdoclet/ejb/entity-value.j Index: entity-value.j =================================================================== RCS file: /cvsroot/xdoclet/xdoclet/core/resources/xdoclet/ejb/entity-value.j,v retrieving revision 1.9 retrieving revision 1.10 diff -u -w -r1.9 -r1.10 --- entity-value.j 3 Mar 2002 20:19:59 -0000 1.9 +++ entity-value.j 7 Mar 2002 22:35:19 -0000 1.10 @@ -1,4 +1,8 @@ /* Value Objects BEGIN */ +<XDtEjbPk:ifHasPrimkeyField>/* This class HAS a primkey-field */</XDtEjbPk:ifHasPrimkeyField> +<XDtEjbPk:ifDoesntHavePrimkeyField>/* This class has NO primkey-field */</XDtEjbPk:ifDoesntHavePrimkeyField> + + <XDtComment:comment> This part adds methods to handle 1-n relationships to add/remove/update one @@ -11,9 +15,15 @@ public void add<XDtMethod:methodTagValue tagName="ejb:value-object" paramName="members-name"/>(<XDtEjbValueObj:currentAggregateType/> added) throws javax.ejb.CreateException { - try{ + try + { <XDtClass:pushClass value="<XDtEjbValueObj:currentRelationBeanClass/>"> + <XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:pkClass/> pk = added.<XDtEjbPk:primkeyGetter/>(); + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> <XDtEjbPk:pkClass/> pk = new <XDtEjbPk:pkClass/>(<XDtEjbPk:pkfieldListFrom name="added"/>); + </XDtEjbPk:ifDoesntHavePrimkeyField> </XDtClass:pushClass> <XDtMerge:merge file="xdoclet/ejb/entity-value-home.j"> @@ -38,9 +48,15 @@ public void remove<XDtMethod:methodTagValue tagName="ejb:value-object" paramName="members-name"/>(<XDtEjbValueObj:currentAggregateType/> removed) throws javax.ejb.RemoveException { - try{ + try + { <XDtClass:pushClass value="<XDtEjbValueObj:currentRelationBeanClass/>"> + <XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:pkClass/> pk = removed.<XDtEjbPk:primkeyGetter/>(); + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> <XDtEjbPk:pkClass/> pk = new <XDtEjbPk:pkClass/>(<XDtEjbPk:pkfieldListFrom name="removed"/>); + </XDtEjbPk:ifDoesntHavePrimkeyField> </XDtClass:pushClass> <XDtMerge:merge file="xdoclet/ejb/entity-value-home.j"> @@ -63,9 +79,15 @@ <XDtMethod:ifHasMethodTag tagName="ejb:value-object" paramName="compose"> public void update<XDtMethod:methodTagValue tagName="ejb:value-object" paramName="members-name"/>(<XDtEjbValueObj:currentAggregateType/> updated) { - try{ + try + { <XDtClass:pushClass value="<XDtEjbValueObj:currentRelationBeanClass/>"> + <XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:pkClass/> pk = updated.<XDtEjbPk:primkeyGetter/>(); + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> <XDtEjbPk:pkClass/> pk = new <XDtEjbPk:pkClass/>(<XDtEjbPk:pkfieldListFrom name="updated"/>); + </XDtEjbPk:ifDoesntHavePrimkeyField> </XDtClass:pushClass> <XDtMerge:merge file="xdoclet/ejb/entity-value-home.j"> @@ -113,19 +135,32 @@ if( getVersion() != valueHolder.getVersion() ) throw new IllegalStateException( "Wrong version. Had " + getVersion() + ", got " + valueHolder.getVersion() ); </XDtEjbBmp:ifUseSoftLocking> + if (<XDtEjbValueObj:currentValueObjectAttribute/> == null) + <XDtEjbValueObj:currentValueObjectAttribute/> = new <XDtEjbValueObj:currentValueObjectClass/>(); try { <XDtEjbPersistent:forAllPersistentFields not-pk="true" valueobject="<XDtEjbValueObj:currentValueObjectMatch/>"> + <XDtEjbPk:ifIsNotPrimkeyField> <XDtMethod:ifHasMethod name="<XDtMethod:setterMethod/>" parameters="<XDtMethod:methodType/>"> <XDtMethod:setterMethod/>( valueHolder.<XDtMethod:getterMethod/>() ); this.<XDtEjbValueObj:currentValueObjectAttribute/>.<XDtMethod:setterMethod/>( valueHolder.<XDtMethod:getterMethod/>() ); </XDtMethod:ifHasMethod> + </XDtEjbPk:ifIsNotPrimkeyField> </XDtEjbPersistent:forAllPersistentFields> + <XDtEjbValueObj:forAllAggregates superclasses="true" valueobject="<XDtEjbValueObj:valueObjectMatch/>"> + // Anonymous block to allow variable declations without conflicts + { <XDtMethod:ifDoesntHaveMethodTag tagName="ejb:value-object" paramName="type"> + <XDtClass:pushClass value="<XDtEjbValueObj:currentRelationBeanClass/>"> + <XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:pkClass/> pk = valueHolder.get<XDtEjbValueObj:currentAggregateName/>().<XDtEjbPk:primkeyGetter/>(); + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> <XDtEjbPk:pkClass/> pk = new <XDtEjbPk:pkClass/>(<XDtEjbPk:pkfieldListFrom name="valueHolder.get<XDtEjbValueObj:currentAggregateName/>()"/>); + </XDtEjbPk:ifDoesntHavePrimkeyField> </XDtClass:pushClass> <XDtMerge:merge file="xdoclet/ejb/entity-value-home.j"> @@ -155,11 +190,20 @@ remove<XDtMethod:methodTagValue tagName="ejb:value-object" paramName="members-name"/>(o); } </XDtMethod:ifHasMethodTag> + } </XDtEjbValueObj:forAllAggregates> <XDtEjbValueObj:forAllComposes superclasses="false" valueobject="<XDtEjbValueObj:valueObjectMatch/>"> + // Anonymous block to allow variable declations without conflicts + { <XDtMethod:ifDoesntHaveMethodTag tagName="ejb:value-object" paramName="type"> + <XDtClass:pushClass value="<XDtEjbValueObj:currentRelationBeanClass/>"> + <XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:pkClass/> pk = valueHolder.get<XDtEjbValueObj:currentAggregateName/>().<XDtEjbPk:primkeyGetter/>(); + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> <XDtEjbPk:pkClass/> pk = new <XDtEjbPk:pkClass/>(<XDtEjbPk:pkfieldListFrom name="valueHolder.get<XDtEjbValueObj:currentAggregateName/>()"/>); + </XDtEjbPk:ifDoesntHavePrimkeyField> </XDtClass:pushClass> <XDtMerge:merge file="xdoclet/ejb/entity-value-home.j"> @@ -195,6 +239,7 @@ remove<XDtMethod:methodTagValue tagName="ejb:value-object" paramName="members-name"/>(o); } </XDtMethod:ifHasMethodTag> + } </XDtEjbValueObj:forAllComposes> } catch (Exception e) 1.7 +226 -216 xdoclet/core/resources/xdoclet/ejb/valueobject.j Index: valueobject.j =================================================================== RCS file: /cvsroot/xdoclet/xdoclet/core/resources/xdoclet/ejb/valueobject.j,v retrieving revision 1.6 retrieving revision 1.7 diff -u -w -r1.6 -r1.7 --- valueobject.j 22 Feb 2002 23:25:15 -0000 1.6 +++ valueobject.j 7 Mar 2002 22:35:19 -0000 1.7 @@ -7,6 +7,7 @@ /** * Value object for <XDtEjb:ejbName/>. + * <XDtClass:classCommentTags indent="0"/> */ public class <XDtClass:classOf><XDtEjbValueObj:valueObjectClass/></XDtClass:classOf> extends <XDtEjbValueObj:extendsFrom/> @@ -41,7 +42,16 @@ public <XDtClass:classOf><XDtEjbValueObj:valueObjectClass/></XDtClass:classOf>() { + <XDtEjbPk:ifDoesntHavePrimkeyField> pk = new <XDtEjbPk:pkClass/>(); + </XDtEjbPk:ifDoesntHavePrimkeyField> + + // Initialize all aggregates (non-collection) to contain a not null object + <XDtEjbValueObj:forAllRelations superclasses="true" valueobject="<XDtEjbValueObj:valueObjectMatch/>"> + <XDtMethod:ifDoesntHaveMethodTag tagName="ejb:value-object" paramName="type"> + <XDtEjbValueObj:currentAggregateName/> = new <XDtEjbValueObj:currentAggregateType/>(); + </XDtMethod:ifDoesntHaveMethodTag> + </XDtEjbValueObj:forAllRelations> } public <XDtClass:classOf><XDtEjbValueObj:valueObjectClass/></XDtClass:classOf>( <XDtEjbPersistent:persistentfieldList valueobject="<XDtEjbValueObj:valueObjectMatch/>"/> ) @@ -50,7 +60,12 @@ this.<XDtMethod:propertyName/> = <XDtMethod:propertyName/>; <XDtMethod:propertyName/>HasBeenSet = true; </XDtEjbPersistent:forAllPersistentFields> + <XDtEjbPk:ifHasPrimkeyField> + pk = this.<XDtEjbPk:primkeyGetter/>(); + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> pk = new <XDtEjbPk:pkClass/>(<XDtEjbPk:pkfieldListFrom name="this"/>); + </XDtEjbPk:ifDoesntHavePrimkeyField> } //TODO Cloneable is better than this ! @@ -70,7 +85,13 @@ this.<XDtEjbValueObj:currentAggregateName/>s = otherValue.<XDtEjbValueObj:currentAggregateName/>s; </XDtMethod:ifHasMethodTag> </XDtEjbValueObj:forAllRelations> + + <XDtEjbPk:ifHasPrimkeyField> + pk = this.<XDtEjbPk:primkeyGetter/>(); + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> pk = new <XDtEjbPk:pkClass/>(<XDtEjbPk:pkfieldListFrom name="this"/>); + </XDtEjbPk:ifDoesntHavePrimkeyField> } public <XDtEjbPk:pkClass/> getPrimaryKey() @@ -89,9 +110,17 @@ { this.<XDtMethod:propertyName/> = <XDtMethod:propertyName/>; <XDtMethod:propertyName/>HasBeenSet = true; + + <XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifIsPrimkeyField> + pk = <XDtMethod:propertyName/>; + </XDtEjbPk:ifIsPrimkeyField> + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> <XDtEjbPk:ifIsPkField> pk.<XDtMethod:setterMethod/>(<XDtMethod:propertyName/>); </XDtEjbPk:ifIsPkField> + </XDtEjbPk:ifDoesntHavePrimkeyField> } public boolean <XDtMethod:propertyName/>HasBeenSet(){ @@ -128,50 +157,26 @@ public void add<XDtEjbValueObj:currentAggregateName/>(<XDtEjbValueObj:currentAggregateType/> added) { - if ( this.removed<XDtEjbValueObj:currentAggregateName/>s.contains(added) ) - { - this.removed<XDtEjbValueObj:currentAggregateName/>s.remove(added); - this.<XDtEjbValueObj:currentAggregateName/>s.add(added); - } - else if ( ! this.<XDtEjbValueObj:currentAggregateName/>s.contains(added) ) - { this.<XDtEjbValueObj:currentAggregateName/>s.add(added); + if ( ! this.added<XDtEjbValueObj:currentAggregateName/>s.contains(added)) this.added<XDtEjbValueObj:currentAggregateName/>s.add(added); - if ( this.removed<XDtEjbValueObj:currentAggregateName/>s.contains(added) ) - this.removed<XDtEjbValueObj:currentAggregateName/>s.remove(added); - } - else throw new IllegalStateException("The value object do already contain object to add"); } public void remove<XDtEjbValueObj:currentAggregateName/>(<XDtEjbValueObj:currentAggregateType/> removed) { - if ( this.<XDtEjbValueObj:currentAggregateName/>s.contains(removed) ) - { this.<XDtEjbValueObj:currentAggregateName/>s.remove(removed); + this.removed<XDtEjbValueObj:currentAggregateName/>s.add(removed); if (this.added<XDtEjbValueObj:currentAggregateName/>s.contains(removed) ) this.added<XDtEjbValueObj:currentAggregateName/>s.remove(removed); - else if ( ! this.removed<XDtEjbValueObj:currentAggregateName/>s.contains(removed) ) - this.removed<XDtEjbValueObj:currentAggregateName/>s.add(removed); if (this.updated<XDtEjbValueObj:currentAggregateName/>s.contains(removed) ) this.updated<XDtEjbValueObj:currentAggregateName/>s.remove(removed); } - else if ( this.added<XDtEjbValueObj:currentAggregateName/>s.contains(removed) ) - { - this.added<XDtEjbValueObj:currentAggregateName/>s.remove(removed); - } - else throw new IllegalStateException("The value object does not contain object to remove"); - } public void update<XDtEjbValueObj:currentAggregateName/>(<XDtEjbValueObj:currentAggregateType/> updated) { - if ( this.<XDtEjbValueObj:currentAggregateName/>s.contains(updated) ) - { - if ( ! this.updated<XDtEjbValueObj:currentAggregateName/>s.contains(updated) - && ! this.added<XDtEjbValueObj:currentAggregateName/>s.contains(updated) ) + if ( ! this.updated<XDtEjbValueObj:currentAggregateName/>s.contains(updated)) this.updated<XDtEjbValueObj:currentAggregateName/>s.add(updated); } - else throw new IllegalStateException("The value object does not contain object to update"); - } public void clean<XDtEjbValueObj:currentAggregateName/>(){ this.added<XDtEjbValueObj:currentAggregateName/>s = new java.util.ArrayList(); @@ -221,11 +226,16 @@ */ protected boolean hasIdentity() { + <XDtEjbPk:ifHasPrimkeyField> + return <XDtEjbPk:primkeyField/>HasBeenSet; + </XDtEjbPk:ifHasPrimkeyField> + <XDtEjbPk:ifDoesntHavePrimkeyField> boolean ret = true; <XDtEjbPersistent:forAllPersistentFields superclasses="true" valueobject="<XDtEjbValueObj:valueObjectMatch/>" only-pk="true"> ret = ret && <XDtMethod:propertyName/>HasBeenSet; </XDtEjbPersistent:forAllPersistentFields> return ret; + </XDtEjbPk:ifDoesntHavePrimkeyField> } public boolean equals(Object other)
_______________________________________________ Xdoclet-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/xdoclet-devel