@Override
  protected void complete(DbClient dbClient, Operation.Status status, ServiceCoded coded)
      throws DeviceControllerException {
    log.info("START ApplicationCompleter complete");
    super.setStatus(dbClient, status, coded);
    updateWorkflowStatus(status, coded);
    if (addVolumes != null) {
      for (URI voluri : addVolumes) {
        switch (status) {
          case error:
            setErrorOnDataObject(dbClient, Volume.class, voluri, coded);
            break;
          default:
            setReadyOnDataObject(dbClient, Volume.class, voluri);
            addApplicationToVolume(voluri, dbClient);
        }
      }
    }

    if (removeVolumes != null) {
      for (URI voluri : removeVolumes) {
        switch (status) {
          case error:
            setErrorOnDataObject(dbClient, Volume.class, voluri, coded);
            break;
          default:
            setReadyOnDataObject(dbClient, Volume.class, voluri);
            removeApplicationFromVolume(voluri, dbClient);
        }
      }
    }

    if (consistencyGroups != null && !consistencyGroups.isEmpty()) {
      for (URI cguri : consistencyGroups) {
        switch (status) {
          case error:
            setErrorOnDataObject(dbClient, BlockConsistencyGroup.class, cguri, coded);
            break;
          default:
            updateConsistencyGroup(cguri, dbClient);
            setReadyOnDataObject(dbClient, BlockConsistencyGroup.class, cguri);
        }
      }
    }
    log.info("END ApplicationCompleter complete");
  }