public void processReference ( String template , Properties attributes ) throws XDocletException { String name = OjbMemberTagsHandler . getMemberName ( ) ; XClass type = OjbMemberTagsHandler . getMemberType ( ) ; int dim = OjbMemberTagsHandler . getMemberDimension ( ) ; ReferenceDescriptorDef refDef = _curClassDef . getReference ( name ) ; String attrName ; if ( refDef == null ) { refDef = new ReferenceDescriptorDef ( name ) ; _curClassDef . addReference ( refDef ) ; } LogHelper . debug ( false , OjbTagsHandler . class , "processReference" , " Processing reference " + refDef . getName ( ) ) ; for ( Enumeration attrNames = attributes . propertyNames ( ) ; attrNames . hasMoreElements ( ) ; ) { attrName = ( String ) attrNames . nextElement ( ) ; refDef . setProperty ( attrName , attributes . getProperty ( attrName ) ) ; } // storing default info for later use if ( type == null ) { throw new XDocletException ( Translator . getString ( XDocletModulesOjbMessages . class , XDocletModulesOjbMessages . COULD_NOT_DETERMINE_TYPE_OF_MEMBER , new String [ ] { name } ) ) ; } if ( dim > 0 ) { throw new XDocletException ( Translator . getString ( XDocletModulesOjbMessages . class , XDocletModulesOjbMessages . MEMBER_CANNOT_BE_A_REFERENCE , new String [ ] { name , _curClassDef . getName ( ) } ) ) ; } refDef . setProperty ( PropertyHelper . OJB_PROPERTY_VARIABLE_TYPE , type . getQualifiedName ( ) ) ; // searching for default type String typeName = searchForPersistentSubType ( type ) ; if ( typeName != null ) { refDef . setProperty ( PropertyHelper . OJB_PROPERTY_DEFAULT_CLASS_REF , typeName ) ; } _curReferenceDef = refDef ; generate ( template ) ; _curReferenceDef = null ; }
Sets the current reference definition derived from the current member and optionally some attributes .