I gave up tryin to figure up the correct order to generate everything in
my project and changed the dataobject.j template so it no longer user
XDtDataObject:dataObjectClassNameFromInterface. Instead of it, I
required @ejb:aggregate to have a type parameter informing the
DataObject class name. All references to
<XDtDataObject:dataObjectClassNameFromInterface/> in the template were
substituted for <XDtMethod:methodTagValue tagName="ejb:aggregate"
paramName="type"/>

Now it requires a bit more information from me (and is somewhat prone to
errors, as I need to type the full class name for the data object) but
at least works. Anyone who is facing problems similar to mine can
benefit from this modified template.

Please note that I'm *not* saying that this is better than the current
template. Just needed something to solve a specific problem of mine and
maybe someone else may also need it.

-- 
Ja ne,
   Pazu
   mailto: [EMAIL PROTECTED]

Anime Gaiden: de f�s para f�s, sempre.
/*
 * <XDtI18n:getString bundle="xdoclet.ejb.Messages" resource="do_not_edit"/>
 */
package <XDtPackage:packageOf><XDtEjbDataObj:dataObjectClass/></XDtPackage:packageOf>;

<XDtClass:importedList currentClass="<XDtEjbDataObj:dataObjectClass/>"/>

/**
 * <XDtI18n:getString bundle="xdoclet.ejb.Messages" resource="data_object_for" 
arguments="<XDtEjb:ejbName/>"/>
<XDtClass:classCommentTags indent="0"/> */
public class <XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf>
   extends <XDtEjbDataObj:extendsFrom/>
   implements java.io.Serializable<XDtClass:ifHasClassTag tagName="ejb:data-object" 
paramName="implements" superclasses="false">, <XDtClass:classTagValue 
tagName="ejb:data-object" paramName="implements" 
superclasses="false"/></XDtClass:ifHasClassTag>
{
  <XDtClass:ifHasClassTag tagName="ejb:data-object" paramName="ver-uid" 
superclasses="false">
   static final long serialVersionUID = <XDtClass:classTagValue 
tagName="ejb:data-object" paramName="ver-uid"/>;
  </XDtClass:ifHasClassTag>
  <XDtClass:ifDoesntHaveClassTag tagName="ejb:data-object" paramName="ver-uid" 
superclasses="false">
   static final long serialVersionUID = <XDtEjbDataObj:serialVersionUID/>;
  </XDtClass:ifDoesntHaveClassTag>

  <XDtEjbPersistent:forAllPersistentFields superclasses="false">
   protected <XDtMethod:methodType/> <XDtMethod:propertyName/>;
  </XDtEjbPersistent:forAllPersistentFields>

 <XDtMethod:forAllMethods>
  <XDtEjbDataObj:ifIsAggregate>
   protected <XDtMethod:methodTagValue tagName="ejb:aggregate" paramName="type"/> 
<XDtMethod:propertyName/>;
  </XDtEjbDataObj:ifIsAggregate>
 </XDtMethod:forAllMethods>

  <XDtEjbBmp:ifUseSoftLocking>
   private long _version = 0;
  </XDtEjbBmp:ifUseSoftLocking>

   public <XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf>()
   {
   }

  <XDtEjbPersistent:ifHasAtLeastOnePersistentField>
   public <XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf>( 
<XDtEjbPersistent:persistentfieldList/> )
   {
     <XDtEjbPersistent:forAllPersistentFields superclasses="false">
      this.<XDtMethod:propertyName/> = <XDtMethod:propertyName/>;
     </XDtEjbPersistent:forAllPersistentFields>
   }
  </XDtEjbPersistent:ifHasAtLeastOnePersistentField>

   public <XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf>( 
<XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf> otherData )
   {
    <XDtEjbPersistent:forAllPersistentFields superclasses="false">
      this.<XDtMethod:propertyName/> = otherData.<XDtMethod:propertyName/>;
    </XDtEjbPersistent:forAllPersistentFields>

    <XDtMethod:forAllMethods>
     <XDtEjbDataObj:ifIsAggregate>
      this.<XDtMethod:propertyName/> = new <XDtMethod:methodTagValue 
tagName="ejb:aggregate" paramName="type"/>( otherData.<XDtMethod:propertyName/> );
     </XDtEjbDataObj:ifIsAggregate>
    </XDtMethod:forAllMethods>
   }

 <XDtEjbPersistent:forAllPersistentFields superclasses="false">
   public <XDtMethod:methodType/> <XDtMethod:getterMethod/>()
   {
      return this.<XDtMethod:propertyName/>;
   }
  <XDtMethod:ifHasMethod name="<XDtMethod:setterMethod/>" 
parameters="<XDtMethod:methodType/>">
   public void <XDtMethod:setterMethod/>( <XDtMethod:methodType/> 
<XDtMethod:propertyName/> )
   {
      this.<XDtMethod:propertyName/> = <XDtMethod:propertyName/>;
   }
  </XDtMethod:ifHasMethod>

 </XDtEjbPersistent:forAllPersistentFields>
 <XDtMethod:forAllMethods>
  <XDtEjbDataObj:ifIsAggregate>
   public <XDtMethod:methodTagValue tagName="ejb:aggregate" paramName="type"/> 
<XDtMethod:getterMethod/>()
   {
      return this.<XDtMethod:propertyName/>;
   }

   <XDtMethod:ifHasMethod name="<XDtMethod:setterMethod/>" 
parameters="<XDtMethod:methodType/>">
   public void <XDtMethod:setterMethod/>( <XDtMethod:methodTagValue 
tagName="ejb:aggregate" paramName="type"/> <XDtMethod:propertyName/> )
   {
      this.<XDtMethod:propertyName/> = <XDtMethod:propertyName/>;
   }

   </XDtMethod:ifHasMethod>
  </XDtEjbDataObj:ifIsAggregate>
 </XDtMethod:forAllMethods>

  <XDtEjbBmp:ifUseSoftLocking>
   public long getVersion()
   {
      return _version;
   }

   public void setVersion(long version)
   {
      this._version = version;
   }

  </XDtEjbBmp:ifUseSoftLocking>
   public String toString()
   {
      StringBuffer str = new StringBuffer("{");

  <XDtEjbPersistent:ifHasAtLeastOnePersistentField>
      str.append(<XDtEjbPersistent:persistentfieldNameValueList/>);
  </XDtEjbPersistent:ifHasAtLeastOnePersistentField>
     <XDtEjbBmp:ifUseSoftLocking>
      str.append(",version=");
      str.append(_version);
     </XDtEjbBmp:ifUseSoftLocking>
      str.append('}');

      return(str.toString());
   }

  <XDtEjbDataObj:isDataContentEquals>
   public boolean equals( Object pOther )
   {
      <XDtClass:ifHasClassTag tagName="ejb:data-object" paramName="use-super-equals">
       <XDtClass:ifClassTagValueEquals tagName="ejb:data-object" 
paramName="use-super-equals" superclasses="false" value="true" default="false">
      if (!super.equals(pOther)) return false;    
       </XDtClass:ifClassTagValueEquals>
      </XDtClass:ifHasClassTag>
      if( pOther instanceof 
<XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf> )
      {
         <XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf> lTest = 
(<XDtClass:classOf><XDtEjbDataObj:dataObjectClass/></XDtClass:classOf>) pOther;
         boolean lEquals = true;

       <XDtEjbPersistent:forAllPersistentFields superclasses="false">
        <XDtType:ifIsPrimitive value="<XDtMethod:methodType/>">
         lEquals = lEquals && this.<XDtMethod:propertyName/> == 
lTest.<XDtMethod:propertyName/>;
        </XDtType:ifIsPrimitive>
        <XDtType:ifIsNotPrimitive value="<XDtMethod:methodType/>">
         if( this.<XDtMethod:propertyName/> == null )
         {
            lEquals = lEquals && ( lTest.<XDtMethod:propertyName/> == null );
         }
         else
         {
            lEquals = lEquals && this.<XDtMethod:propertyName/>.equals( 
lTest.<XDtMethod:propertyName/> );
         }
        </XDtType:ifIsNotPrimitive>
       </XDtEjbPersistent:forAllPersistentFields>

         return lEquals;
      }
      else
      {
         return false;
      }
   }

   public int hashCode()
   {
     <XDtClass:ifHasClassTag tagName="ejb:data-object" paramName="use-super-equals">
      <XDtClass:ifClassTagValueEquals tagName="ejb:data-object" 
paramName="use-super-equals" superclasses="false" value="true">
      int result = super.hashCode();    
      </XDtClass:ifClassTagValueEquals>
      <XDtClass:ifClassTagValueNotEquals tagName="ejb:data-object" 
paramName="use-super-equals" superclasses="false" value="true">
      int result = 17;
      </XDtClass:ifClassTagValueNotEquals>
     </XDtClass:ifHasClassTag>
     <XDtClass:ifDoesntHaveClassTag tagName="ejb:data-object" 
paramName="use-super-equals">
      int result = 17;
     </XDtClass:ifDoesntHaveClassTag>
     <XDtEjbPersistent:forAllPersistentFields>
      <XDtType:ifIsOfType type="boolean" value="return-type">
      result = 37*result + (<XDtMethod:propertyName/> ? 0 : 1);
      </XDtType:ifIsOfType>
      <XDtType:ifIsOfType type="long" value="return-type">
      result = 37*result + 
(int)(<XDtMethod:propertyName/>^(<XDtMethod:propertyName/>>>>32));
      </XDtType:ifIsOfType>
      <XDtType:ifIsOfType type="float" value="return-type">
      result = 37*result + Float.floatToIntBits(<XDtMethod:propertyName/>);
      </XDtType:ifIsOfType>
      <XDtType:ifIsOfType type="double" value="return-type">
      {
         long l = Double.doubleToLongBits(<XDtMethod:propertyName/>);
         result = 37*result + (int)(l^(l>>>32));
      }
      </XDtType:ifIsOfType>
      <XDtType:ifIsPrimitive value="<XDtMethod:methodType/>">
       <XDtType:ifIsNotOfType type="boolean" value="return-type">
        <XDtType:ifIsNotOfType type="long" value="return-type">
         <XDtType:ifIsNotOfType type="float" value="return-type">
          <XDtType:ifIsNotOfType type="double" value="return-type">
      result = 37*result + (int) <XDtMethod:propertyName/>;
          </XDtType:ifIsNotOfType>
         </XDtType:ifIsNotOfType>
        </XDtType:ifIsNotOfType>
       </XDtType:ifIsNotOfType>
      </XDtType:ifIsPrimitive>
      <XDtType:ifIsNotPrimitive value="<XDtMethod:methodType/>">
      result = 37*result + ((this.<XDtMethod:propertyName/> != null) ? 
this.<XDtMethod:propertyName/>.hashCode() : 0);
      </XDtType:ifIsNotPrimitive>
     </XDtEjbPersistent:forAllPersistentFields>
      return result;
      }

  </XDtEjbDataObj:isDataContentEquals>

   <XDtMerge:merge file="dataobject-custom.j">
   </XDtMerge:merge>
}

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to