class IndexObjectGroupActionPlugin extends ActionHandler {

    @Override
    public List<ItemStatus> executeList(WorkerParameters workerParameters, HandlerIO handler)
        throws ProcessingException {

        try (MetaDataClient metadataClient = metaDataClientFactory.getClient()) {
            List<ItemStatus> aggregateItemStatus = new ArrayList<>();
            List<JsonNode> objectGroups = new ArrayList<>();
            for (String objectId : workerParameters.getObjectNameList()) {

                workerParameters.setObjectName(objectId);
                handler.setCurrentObjectId(objectId);

                checkMandatoryParameters(workerParameters);

                final ItemStatus itemStatus = new ItemStatus(OG_INDEXATION);

                try {
                    checkMandatoryIOParameter(handler);

                    JsonNode objectNode = indexObjectGroup(handler, workerParameters, itemStatus);
                    if (objectNode != null) {
                        objectGroups.add(objectNode);
                    }

                } catch (final StepAlreadyExecutedException e) {
                    LOGGER.warn(e);
                    // FIXME (US 5769) : StepAlreadyExecutedException not thrown
                    itemStatus.increment(StatusCode.ALREADY_EXECUTED);
                } catch (final ProcessingInternalServerException exc) {
                    LOGGER.error(exc);
                    itemStatus.increment(StatusCode.FATAL);
                } catch (final ProcessingException e) {
                    LOGGER.error(e);
                    itemStatus.increment(StatusCode.KO);
                }

                if (StatusCode.UNKNOWN.equals(itemStatus.getGlobalStatus())) {
                    itemStatus.increment(StatusCode.WARNING);
                }

                aggregateItemStatus.add(new ItemStatus(OG_INDEXATION).setItemsStatus(OG_INDEXATION, itemStatus));
            }

            if (!objectGroups.isEmpty()) {
                try {
                    metadataClient.insertObjectGroups(objectGroups);
                } catch (final MetaDataException | InvalidParseOperationException e) {
                    LOGGER.error(e);

                    List<ItemStatus> aggregateItemStatusBis = new ArrayList<>();
                    for (ItemStatus ignored : aggregateItemStatus) {
                        aggregateItemStatusBis.add(new ItemStatus(OG_INDEXATION).setItemsStatus(OG_INDEXATION, new ItemStatus(OG_INDEXATION).increment(StatusCode.FATAL)));
                    }
                    aggregateItemStatus = aggregateItemStatusBis;


                }
            }
            return aggregateItemStatus;

        } finally {
            handler.setCurrentObjectId(null);
        }
    }

    public  IndexObjectGroupActionPlugin();
    @VisibleForTesting public  IndexObjectGroupActionPlugin(MetaDataClientFactory metaDataClientFactory);

}