public Iterable < RowKey > getKeys ( ) { if ( currentState . isEmpty ( ) ) { if ( cleared ) { // if the association has been cleared and the currentState is empty, we consider that there are no rows. return Collections . emptyList ( ) ; } else { // otherwise, the snapshot rows are the current ones return snapshot . getRowKeys ( ) ; } } else { // It may be a bit too large in case of removals, but that's fine for now Set < RowKey > keys = CollectionHelper . newLinkedHashSet ( cleared ? currentState . size ( ) : snapshot . size ( ) + currentState . size ( ) ) ; if ( ! cleared ) { // we add the snapshot RowKeys only if the association has not been cleared for ( RowKey rowKey : snapshot . getRowKeys ( ) ) { keys . add ( rowKey ) ; } } for ( Map . Entry < RowKey , AssociationOperation > op : currentState . entrySet ( ) ) { switch ( op . getValue ( ) . getType ( ) ) { case PUT : keys . add ( op . getKey ( ) ) ; break ; case REMOVE : keys . remove ( op . getKey ( ) ) ; break ; } } return keys ; } }
Returns all keys of all rows contained within this association .