@Override
    public AttributedList<Path> list(final Path directory, final ListProgressListener listener) throws BackgroundException {
        if(directory.isRoot()) {
            return new AttributedList<Path>(Collections.singletonList(
                new MantaAccountHomeInfo(session.getHost().getCredentials().getUsername(), session.getHost().getDefaultPath()).getNormalizedHomePath()));
        }
        final AttributedList<Path> children = new AttributedList<>();
        final Iterator<MantaObject> objectsIter;
        try {
            objectsIter = session.getClient().listObjects(directory.getAbsolute()).iterator();
        }
        catch(MantaObjectException e) {
            throw new MantaExceptionMappingService().map("Listing directory {0} failed", e, directory);
        }
        catch(MantaClientHttpResponseException e) {
            throw new MantaHttpExceptionMappingService().map("Listing directory {0} failed", e, directory);
        }
        catch(IOException e) {
            throw new DefaultIOExceptionMappingService().map("Listing directory {0} failed", e);
        }
        final MantaObjectAttributeAdapter adapter = new MantaObjectAttributeAdapter(session);
        while(objectsIter.hasNext()) {
            MantaObject o = objectsIter.next();
            final Path file = new Path(directory, PathNormalizer.name(o.getPath()),
                    EnumSet.of(o.isDirectory() ? Path.Type.directory : Path.Type.file), adapter.toAttributes(o)
            );
            children.add(file);
            listener.chunk(directory, children);
        }
        return children;
    }
@Test(expected = NotfoundException.class)
    public void testListNotfoundTopLevelFolder() throws Exception {
        final Path directory = new Path(testPathPrefix, "notfound-cyberduck", EnumSet.of(Path.Type.directory, Path.Type.volume));
        new MantaListService(session).list(directory, new DisabledListProgressListener());
    }