class DataItemServiceFacade {

    List<BaseDimensionalItemObject> retrieveDataItemEntities(
        final Set<Class<? extends BaseDimensionalItemObject>> targetEntities, final List<String> filters,
        final WebOptions options, final OrderParams orderParams )
    {
        List<BaseDimensionalItemObject> dimensionalItems = new ArrayList<>( 0 );

        if ( isNotEmpty( targetEntities ) )
        {
            // Retrieving all items for each entity type.
            for ( final Class<? extends BaseDimensionalItemObject> entity : targetEntities )
            {
                final Query query = buildQueryForEntity( entity, filters, options );
                dimensionalItems.addAll( executeQuery( query ) );
            }

            // In memory sorting
            sort( dimensionalItems, orderParams );

            // In memory pagination.
            dimensionalItems = slice( options, dimensionalItems );
        }

        return dimensionalItems;
    }

      DataItemServiceFacade( final QueryService queryService );

}