class TableMapStore implements MapStore<String, Table> {

    @Override
    public void storeAll(Map<String, Table> map) {
        if (map == null) {
            throw new RuntimeException("Illegal Store Request - Null Map");
        }
        if (map.containsKey(null)) {
            throw new RuntimeException("Illegal Store Request - Null Key is Present");
        }

        logger.info("Store all called for multiple values");
        BulkRequestBuilder bulkRequestBuilder = elasticsearchConnection.getClient().prepareBulk().setConsistencyLevel(WriteConsistencyLevel.ALL).setRefresh(true);
        for (Map.Entry<String, Table> mapEntry : map.entrySet()) {
            try {
                if (mapEntry.getValue() == null) {
                    throw new RuntimeException(String.format("Illegal Store Request - Object is Null for Table - %s", mapEntry.getKey()));
                }
                bulkRequestBuilder.add(elasticsearchConnection.getClient()
                        .prepareIndex(TABLE_META_INDEX, TABLE_META_TYPE, mapEntry.getKey())
                        .setSource(objectMapper.writeValueAsString(mapEntry.getValue())));
            } catch (JsonProcessingException e) {
                throw new RuntimeException("Error bulk saving meta: ", e);
            }
        }
        bulkRequestBuilder.execute().actionGet();
    }

    public  TableMapStore(ElasticsearchConnection elasticsearchConnection);

}