/**
   * Aggiorna la visibilità delle schede con l'id passato e restituisce l'esito al client
   *
   * @return la serializzazione json dell'esito della richiesta
   */
  protected String bulkUpdateVisibility(
      UpdateVisibilityParameters updateVisibilityParameters,
      SPODEngine engine,
      Publisher publisher) {

    boolean updateToPublic = updateVisibilityParameters.isToPublic();

    try {
      // Si aggiorna la visibilità della scheda (tramite SP su DB site)
      // SPOD ha sia visibilità che approvazione, nella API CKAN si considerano i 2 aspetti
      // equivalenti
      // e sempre modificati contemporaneamente.
      engine.updateStatusVisibility(
          updateVisibilityParameters
              .getDatasets()
              .toArray(new String[updateVisibilityParameters.getDatasets().size()]),
          updateToPublic,
          updateToPublic);
    } catch (Exception e2) {
      SpodLogger.log(LogType.ERROR, e2);
      return Utils.toJson(
          Utils.buildActionApiResponseError(help, e2.getMessage(), "Generic Error"));
    }

    // Help generico sull'utilizzo del metodo
    String customGenericHelp = genericHelp;
    String successMessage =
        "Bulk Update " + ((updateToPublic) ? "Public" : "Private") + " successfully executed";
    SpodLogger.log(LogType.INFO, successMessage);
    return Utils.toJson(Utils.buildActionApiResponseSuccess(customGenericHelp, successMessage));
  }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    if (!enabled) Utils.sendResponse(response, "Method disabled");
    else {
      String servletPath = request.getServletPath();

      // Key per autorizzare l'operazione
      String authorization = request.getHeader("Authorization");

      if (servletPath.matches(actionAPIregex + "bulk_update_private$")
          || servletPath.matches(actionAPIregex + "bulk_update_public$")) {

        // L'uid passato per l'autorizzazione deve coincidere con quello di un utente publisher
        boolean checkPublisherExistence =
            invokeCheckExistenceOnDB(checkPublisherByUid, authorization);
        if (!checkPublisherExistence) {
          ActionApiResponseError responseActionApi =
              Utils.buildActionApiResponseError(
                  "You need authentication api key", "Forbidden", "Authorization Error");
          Utils.sendResponse(response, Utils.toJson(responseActionApi));
          return;
        }

        // L'uid authorization è esattamente quello dell'utente publisher,
        // per cui si associa direttamente.
        Publisher publisher = new Publisher();
        publisher.setUid(authorization);

        // Se legge il corpo della POST (richiesta in formato JSON).
        // Sono i parametri che dovrà avere il package/dataset creato.
        String jsonUpdateVisibilityParameters = Utils.getPostFullBody(request);

        // Validazione dei parametri
        String validationError = updateVisibilityValidation(jsonUpdateVisibilityParameters);
        if (validationError != null) {
          Utils.sendResponse(
              response,
              Utils.toJson(
                  Utils.buildActionApiResponseError(
                      help, validationError, "Parameters validation error")));
          return;
        }

        // Esecuzione richiesta di bulk update public
        if (servletPath.matches(actionAPIregex + "bulk_update_public$"))
          updateVisibilityParameters.setToPublic(true);
        else if (servletPath.matches(actionAPIregex + "bulk_update_private$")) {
          updateVisibilityParameters.setToPublic(false);
        }
        String json = bulkUpdateVisibility(updateVisibilityParameters, engine, publisher);
        Utils.sendResponse(response, json);
        return;
      }

      // Qui non si dovrebbe arrivare, servlet avviata con url errato*/
      else {
        Utils.sendResponse(response, "Url error");
        return;
      }
    }
  }