public LDIFChangeRecord nextRecord ( ) { if ( entryIterator . hasNext ( ) ) { try { final Node entryNode = entryIterator . next ( ) ; final String dn = entryNode . valueOf ( "@dn" ) ; final List < Attribute > attributes = new ArrayList < Attribute > ( ) ; final List < Node > objectClassList = ( List < Node > ) objectClassXPath . selectNodes ( entryNode ) ; final String [ ] objectClasses = new String [ objectClassList . size ( ) ] ; for ( int j = 0 ; j < objectClasses . length ; ++ j ) { objectClasses [ j ] = objectClassList . get ( j ) . getStringValue ( ) ; } attributes . add ( new Attribute ( "objectclass" , objectClasses ) ) ; for ( final Node attributeNode : ( List < Node > ) attrXPath . selectNodes ( entryNode ) ) { final String attributeName = attributeNode . valueOf ( "@name" ) ; final List < Node > attributeValueNodes = ( List < Node > ) attrValueXPath . selectNodes ( attributeNode ) ; switch ( attributeValueNodes . size ( ) ) { case 0 : break ; case 1 : { final String attributeValue = attributeValueNodes . get ( 0 ) . getStringValue ( ) ; attributes . add ( new Attribute ( attributeName , attributeValue ) ) ; break ; } default : { final String [ ] attributeValues = new String [ attributeValueNodes . size ( ) ] ; for ( int j = 0 ; j < attributeValueNodes . size ( ) ; ++ j ) { attributeValues [ j ] = attributeValueNodes . get ( j ) . getStringValue ( ) ; } attributes . add ( new Attribute ( attributeName , attributeValues ) ) ; break ; } } } return new LDIFAddChangeRecord ( dn , attributes ) ; } catch ( final JaxenException e ) { return null ; } } else { return null ; } }
Read the next change record from the underlying input stream .