class ArcGISLayerListEnvoy extends AbstractEnvoy implements DataRegistryDataProvider {

    @Override
    public void query(DataModelCategory category, Collection<? extends Satisfaction> satisfactions,
            List<? extends PropertyMatcher<?>> parameters, List<? extends OrderSpecifier> orderSpecifiers, int limit,
            Collection<? extends PropertyDescriptor<?>> propertyDescriptors, final CacheDepositReceiver queryReceiver)
        throws InterruptedException, QueryException
    {
        if (category.getCategory() == null)
        {
            throw new QueryException("Server URL must be provided in category.");
        }

        DataModelCategory localCategory = new DataModelCategory(category.getSource(), category.getFamily(),
                category.getCategory());

        String includedSubpath = null;
        Matcher matcher = SUBPATH_PATTERN.matcher(localCategory.getCategory());
        if (matcher.matches())
        {
            String subpath = matcher.group(1);
            localCategory = localCategory.withCategory(localCategory.getCategory().replace(subpath, ""));

            // strip the leading slash from the subpath, and if there's a server
            // component, remove it from the subpath:
            includedSubpath = removeServerComponent(subpath.substring(1));
        }

        queryImpl(localCategory, queryReceiver, UrlUtilities.toURL(localCategory.getCategory()), includedSubpath);
    }

    public  ArcGISLayerListEnvoy(Toolbox toolbox);

}