class BlueprintResourceProvider extends AbstractControllerResourceProvider {

  @Override
  public RequestStatus deleteResources(Request request, Predicate predicate)
      throws SystemException, UnsupportedPropertyException,
             NoSuchResourceException, NoSuchParentResourceException {

    //TODO (jspeidel): Revisit concurrency control
    Set<Resource> setResources = getResources(
        new RequestImpl(null, null, null, null), predicate);

    List<TopologyRequestEntity> provisionRequests = topologyRequestDAO.findAllProvisionRequests();
    // Blueprints for which a provision request was submitted. This blueprints (should be zero or one) are read only.
    Set<String> provisionedBlueprints =
      provisionRequests.stream().map(TopologyRequestEntity::getBlueprintName).collect(toSet());

    for (final Resource resource : setResources) {
      final String blueprintName =
        (String) resource.getPropertyValue(BLUEPRINT_NAME_PROPERTY_ID);
      Preconditions.checkArgument(!provisionedBlueprints.contains(blueprintName),
        "Blueprint %s cannot be deleted as cluster provisioning was initiated on it.", blueprintName);
      LOG.info("Deleting Blueprint, name = " + blueprintName);
      modifyResources(() -> {
        blueprintDAO.removeByName(blueprintName);
        return null;
      });
    }

    notifyDelete(Resource.Type.Blueprint, predicate);
    return getRequestStatus(null);
  }

    BlueprintResourceProvider(AmbariManagementController controller);

}