class PrepareStorageInfoActionHandler extends ActionHandler {

    @Override
    public ItemStatus execute(WorkerParameters params, HandlerIO handlerIO) {
        checkMandatoryParameters(params);
        final ItemStatus itemStatus = new ItemStatus(HANDLER_ID);
        try {
            checkMandatoryIOParameter(handlerIO);
            ManagementContractModel managementContract = loadManagementContractFromWorkspace(handlerIO);
            
            Map<String, JsonNode> storageCapacityNodeByStrategyId = new HashMap<>();
            try (final StorageClient storageClient = storageClientFactory.getClient()) {
                storageCapacityNodeByStrategyId.put(VitamConfiguration.getDefaultStrategy(),
                        storageClient.getStorageInformation(VitamConfiguration.getDefaultStrategy()));
                if (managementContract != null && managementContract.getStorage() != null) {
                    if (managementContract.getStorage().getUnitStrategy() != null && !storageCapacityNodeByStrategyId
                            .containsKey(managementContract.getStorage().getUnitStrategy())) {
                        storageCapacityNodeByStrategyId.put(managementContract.getStorage().getUnitStrategy(),
                                storageClient.getStorageInformation(managementContract.getStorage().getUnitStrategy()));
                    }
                    if (managementContract.getStorage().getObjectGroupStrategy() != null
                            && !storageCapacityNodeByStrategyId
                                    .containsKey(managementContract.getStorage().getObjectGroupStrategy())) {
                        storageCapacityNodeByStrategyId.put(managementContract.getStorage().getObjectGroupStrategy(),
                                storageClient.getStorageInformation(
                                        managementContract.getStorage().getObjectGroupStrategy()));
                    }
                    if (managementContract.getStorage().getObjectStrategy() != null && !storageCapacityNodeByStrategyId
                            .containsKey(managementContract.getStorage().getObjectStrategy())) {
                        storageCapacityNodeByStrategyId.put(managementContract.getStorage().getObjectStrategy(),
                                storageClient
                                        .getStorageInformation(managementContract.getStorage().getObjectStrategy()));
                    }
                }
            }

            ObjectNode strategiesInformation = JsonHandler.createObjectNode();
            for(Entry<String, JsonNode> stategyStorageCapacities : storageCapacityNodeByStrategyId.entrySet()) {
                final StorageInformation[] storageInformation = JsonHandler.getFromJsonNode(stategyStorageCapacities.getValue().get("capacities"),
                        StorageInformation[].class);
                strategiesInformation.set(stategyStorageCapacities.getKey(), generateStorageInfoNode(stategyStorageCapacities.getKey(), storageInformation));
            }
            
            storeStrategiesStorageInfo(handlerIO, strategiesInformation);

            itemStatus.increment(StatusCode.OK);

        } catch (ProcessingException | StorageNotFoundClientException | StorageServerClientException |
            InvalidParseOperationException e) {
            LOGGER.error(e);
            itemStatus.increment(StatusCode.FATAL);
        }
        return new ItemStatus(HANDLER_ID).setItemsStatus(HANDLER_ID, itemStatus);
    }

    public  PrepareStorageInfoActionHandler();
    @VisibleForTesting public  PrepareStorageInfoActionHandler(StorageClientFactory storageClientFactory);

}