question: private void addExportRemoveVolumeSteps ( Workflow workflow , ProtectionSystem rpSystem , URI exportGroupID , List < URI > boIDs ) throws InternalException { ExportGroup exportGroup = _dbClient . queryObject ( ExportGroup . class , exportGroupID ) ; String exportStep = workflow . createStepId ( ) ; initTaskStatus ( exportGroup , exportStep , Operation . Status . pending , "export remove volumes (that contain RP snapshots)" ) ; Map < URI , List < URI > > deviceToBlockObjects = new HashMap < URI , List < URI > > ( ) ; for ( URI snapshotID : boIDs ) { BlockSnapshot snapshot = _dbClient . queryObject ( BlockSnapshot . class , snapshotID ) ; List < BlockObject > objectsToRemove = getExportObjectsForBookmark ( snapshot ) ; for ( BlockObject blockObject : objectsToRemove ) { List < URI > blockObjects = deviceToBlockObjects . get ( blockObject . getStorageController ( ) ) ; if ( blockObjects == null ) { blockObjects = new ArrayList < URI > ( ) ; deviceToBlockObjects . put ( blockObject . getStorageController ( ) , blockObjects ) ; } blockObjects . add ( blockObject . getId ( ) ) ; } } for ( Map . Entry < URI , List < URI > > deviceEntry : deviceToBlockObjects . entrySet ( ) ) { _log . info ( String . format ( "Adding workflow step to remove RP bookmarks and associated target volumes from export.  ExportGroup: %s, Storage System: %s, BlockObjects: %s" , exportGroup . getId ( ) , deviceEntry . getKey ( ) , deviceEntry . getValue ( ) ) ) ; _exportWfUtils . generateExportGroupRemoveVolumes ( workflow , STEP_EXPORT_REMOVE_SNAPSHOT , STEP_EXPORT_GROUP_DISABLE , deviceEntry . getKey ( ) , exportGroupID , deviceEntry . getValue ( ) ) ; } _log . info ( String . format ( "Created export group remove snapshot steps in workflow: %s" , exportGroup . getId ( ) ) ) ; }
target:  Add the export remove volume step to the workflow