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()));
}

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 ( ) ) ) ; }
add the export remove volume step to the workflow
