jdk/test/java/nio/file/Path/PassThroughFileSystem.java
changeset 8249 c3d31a2ce7c6
parent 8248 09e47b898040
parent 8219 4a1c655bfb69
child 8250 a36beda9b9de
--- a/jdk/test/java/nio/file/Path/PassThroughFileSystem.java	Tue Feb 15 12:34:33 2011 -0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,554 +0,0 @@
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.file.*;
-import java.nio.file.attribute.*;
-import java.nio.file.spi.FileSystemProvider;
-import java.nio.channels.SeekableByteChannel;
-import java.net.URI;
-import java.util.*;
-import java.io.*;
-
-/**
- * A "pass through" file system implementation that passes through, or delegates,
- * everything to the default file system.
- */
-
-class PassThroughFileSystem extends FileSystem {
-    private final FileSystemProvider provider;
-    private final FileSystem delegate;
-
-    PassThroughFileSystem(FileSystemProvider provider, FileSystem delegate) {
-        this.provider = provider;
-        this.delegate = delegate;
-    }
-
-    /**
-     * Creates a new "pass through" file system. Useful for test environments
-     * where the provider might not be deployed.
-     */
-    static FileSystem create() throws IOException {
-        FileSystemProvider provider = new PassThroughProvider();
-        Map<String,?> env = Collections.emptyMap();
-        URI uri = URI.create("pass:///");
-        return provider.newFileSystem(uri, env);
-    }
-
-    @Override
-    public FileSystemProvider provider() {
-        return provider;
-    }
-
-    @Override
-    public void close() throws IOException {
-        delegate.close();
-    }
-
-    @Override
-    public boolean isOpen() {
-        return delegate.isOpen();
-    }
-
-    @Override
-    public boolean isReadOnly() {
-        return delegate.isReadOnly();
-    }
-
-    @Override
-    public String getSeparator() {
-        return delegate.getSeparator();
-    }
-
-    @Override
-    public Iterable<Path> getRootDirectories() {
-        final Iterable<Path> roots = delegate.getRootDirectories();
-        return new Iterable<Path>() {
-            @Override
-            public Iterator<Path> iterator() {
-                final Iterator<Path> itr = roots.iterator();
-                return new Iterator<Path>() {
-                    @Override
-                    public boolean hasNext() {
-                        return itr.hasNext();
-                    }
-                    @Override
-                    public Path next() {
-                        return new PassThroughPath(delegate, itr.next());
-                    }
-                    @Override
-                    public void remove() {
-                        itr.remove();
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public Iterable<FileStore> getFileStores() {
-        // assume that unwrapped objects aren't exposed
-        return delegate.getFileStores();
-    }
-
-    @Override
-    public Set<String> supportedFileAttributeViews() {
-        // assume that unwrapped objects aren't exposed
-        return delegate.supportedFileAttributeViews();
-    }
-
-    @Override
-    public Path getPath(String path) {
-        return new PassThroughPath(this, delegate.getPath(path));
-    }
-
-    @Override
-    public PathMatcher getPathMatcher(String syntaxAndPattern) {
-        final PathMatcher matcher = delegate.getPathMatcher(syntaxAndPattern);
-        return new PathMatcher() {
-            @Override
-            public boolean matches(Path path) {
-                return matcher.matches(PassThroughPath.unwrap(path));
-            }
-        };
-    }
-
-    @Override
-    public UserPrincipalLookupService getUserPrincipalLookupService() {
-        // assume that unwrapped objects aren't exposed
-        return delegate.getUserPrincipalLookupService();
-    }
-
-    @Override
-    public WatchService newWatchService() throws IOException {
-        // to keep it simple
-        throw new UnsupportedOperationException();
-    }
-
-    static class PassThroughProvider extends FileSystemProvider {
-        private static final String SCHEME = "pass";
-        private static volatile PassThroughFileSystem delegate;
-
-        public PassThroughProvider() { }
-
-        @Override
-        public String getScheme() {
-            return SCHEME;
-        }
-
-        private void checkScheme(URI uri) {
-            if (!uri.getScheme().equalsIgnoreCase(SCHEME))
-                throw new IllegalArgumentException();
-        }
-
-        private void checkUri(URI uri) {
-            checkScheme(uri);
-            if (!uri.getSchemeSpecificPart().equals("///"))
-                throw new IllegalArgumentException();
-        }
-
-        @Override
-        public FileSystem newFileSystem(URI uri, Map<String,?> env)
-            throws IOException
-        {
-            checkUri(uri);
-            synchronized (PassThroughProvider.class) {
-                if (delegate != null)
-                    throw new FileSystemAlreadyExistsException();
-                PassThroughFileSystem result =
-                    new PassThroughFileSystem(this, FileSystems.getDefault());
-                delegate = result;
-                return result;
-            }
-        }
-
-        @Override
-        public FileSystem getFileSystem(URI uri) {
-            checkUri(uri);
-            FileSystem result = delegate;
-            if (result == null)
-                throw new FileSystemNotFoundException();
-            return result;
-        }
-
-        @Override
-        public Path getPath(URI uri) {
-            checkScheme(uri);
-            if (delegate == null)
-                throw new FileSystemNotFoundException();
-            uri = URI.create(delegate.provider().getScheme() + ":" +
-                             uri.getSchemeSpecificPart());
-            return new PassThroughPath(delegate, delegate.provider().getPath(uri));
-        }
-    }
-
-    static class PassThroughPath extends Path {
-        private final FileSystem fs;
-        private final Path delegate;
-
-        PassThroughPath(FileSystem fs, Path delegate) {
-            this.fs = fs;
-            this.delegate = delegate;
-        }
-
-        private Path wrap(Path path) {
-            return (path != null) ? new PassThroughPath(fs, path) : null;
-        }
-
-        static Path unwrap(Path wrapper) {
-            if (!(wrapper instanceof PassThroughPath))
-                throw new ProviderMismatchException();
-            return ((PassThroughPath)wrapper).delegate;
-        }
-
-        @Override
-        public FileSystem getFileSystem() {
-            return fs;
-        }
-
-        @Override
-        public boolean isAbsolute() {
-            return delegate.isAbsolute();
-        }
-
-        @Override
-        public Path getRoot() {
-            return wrap(delegate.getRoot());
-        }
-
-
-        @Override
-        public Path getName() {
-            return wrap(delegate.getName());
-        }
-
-        @Override
-        public Path getParent() {
-            return wrap(delegate.getParent());
-        }
-
-        @Override
-        public int getNameCount() {
-            return delegate.getNameCount();
-        }
-
-        @Override
-        public Path getName(int index) {
-            return wrap(delegate.getName(index));
-        }
-
-        @Override
-        public Path subpath(int beginIndex, int endIndex) {
-            return wrap(delegate.subpath(beginIndex, endIndex));
-        }
-
-        @Override
-        public boolean startsWith(Path other) {
-            return delegate.startsWith(unwrap(other));
-        }
-
-        @Override
-        public boolean endsWith(Path other) {
-            return delegate.endsWith(unwrap(other));
-        }
-
-        @Override
-        public Path normalize() {
-            return wrap(delegate.normalize());
-        }
-
-        @Override
-        public Path resolve(Path other) {
-            return wrap(delegate.resolve(unwrap(other)));
-        }
-
-        @Override
-        public Path resolve(String other) {
-            return wrap(delegate.resolve(other));
-        }
-
-        @Override
-        public Path relativize(Path other) {
-            return wrap(delegate.relativize(unwrap(other)));
-        }
-
-        @Override
-        public void setAttribute(String attribute, Object value, LinkOption... options)
-            throws IOException
-        {
-            delegate.setAttribute(attribute, value, options);
-        }
-
-        @Override
-        public Object getAttribute(String attribute, LinkOption... options)
-            throws IOException
-        {
-            // assume that unwrapped objects aren't exposed
-            return delegate.getAttribute(attribute, options);
-        }
-
-        @Override
-        public Map<String,?> readAttributes(String attributes, LinkOption... options)
-            throws IOException
-        {
-            // assume that unwrapped objects aren't exposed
-            return delegate.readAttributes(attributes, options);
-        }
-
-        @Override
-        public <V extends FileAttributeView> V getFileAttributeView(Class<V> type,
-                                                                    LinkOption... options)
-        {
-            return delegate.getFileAttributeView(type, options);
-        }
-
-        @Override
-        public void delete() throws IOException {
-            delegate.delete();
-        }
-
-        @Override
-        public void deleteIfExists() throws IOException {
-            delegate.deleteIfExists();
-        }
-
-        @Override
-        public Path createSymbolicLink(Path target, FileAttribute<?>... attrs)
-            throws IOException
-        {
-            delegate.createSymbolicLink(unwrap(target), attrs);
-            return this;
-        }
-
-        @Override
-        public Path createLink(Path existing) throws IOException {
-            delegate.createLink(unwrap(existing));
-            return this;
-        }
-
-        @Override
-        public Path readSymbolicLink() throws IOException {
-            return wrap(delegate.readSymbolicLink());
-        }
-
-        @Override
-        public URI toUri() {
-            String ssp = delegate.toUri().getSchemeSpecificPart();
-            return URI.create(fs.provider().getScheme() + ":" + ssp);
-        }
-
-        @Override
-        public Path toAbsolutePath() {
-            return wrap(delegate.toAbsolutePath());
-        }
-
-        @Override
-        public Path toRealPath(boolean resolveLinks) throws IOException {
-            return wrap(delegate.toRealPath(resolveLinks));
-        }
-
-        @Override
-        public Path copyTo(Path target, CopyOption... options) throws IOException {
-            return wrap(delegate.copyTo(unwrap(target), options));
-        }
-
-        @Override
-        public Path moveTo(Path target, CopyOption... options) throws IOException {
-            return wrap(delegate.copyTo(unwrap(target), options));
-        }
-
-        private DirectoryStream<Path> wrap(final DirectoryStream<Path> stream) {
-            return new DirectoryStream<Path>() {
-                @Override
-                public Iterator<Path> iterator() {
-                    final Iterator<Path> itr = stream.iterator();
-                    return new Iterator<Path>() {
-                        @Override
-                        public boolean hasNext() {
-                            return itr.hasNext();
-                        }
-                        @Override
-                        public Path next() {
-                            return wrap(itr.next());
-                        }
-                        @Override
-                        public void remove() {
-                            itr.remove();
-                        }
-                    };
-                }
-                @Override
-                public void close() throws IOException {
-                    stream.close();
-                }
-            };
-        }
-
-        @Override
-        public DirectoryStream<Path> newDirectoryStream() throws IOException {
-            return wrap(delegate.newDirectoryStream());
-        }
-
-        @Override
-        public DirectoryStream<Path> newDirectoryStream(String glob)
-            throws IOException
-        {
-            return wrap(delegate.newDirectoryStream(glob));
-        }
-
-        @Override
-        public DirectoryStream<Path> newDirectoryStream(DirectoryStream.Filter<? super Path> filter)
-            throws IOException
-        {
-            return wrap(delegate.newDirectoryStream(filter));
-        }
-
-        @Override
-        public Path createFile(FileAttribute<?>... attrs) throws IOException {
-            delegate.createFile(attrs);
-            return this;
-        }
-
-        @Override
-        public Path createDirectory(FileAttribute<?>... attrs)
-            throws IOException
-        {
-            delegate.createDirectory(attrs);
-            return this;
-        }
-
-        @Override
-        public SeekableByteChannel newByteChannel(Set<? extends OpenOption> options,
-                                                       FileAttribute<?>... attrs)
-            throws IOException
-        {
-            return delegate.newByteChannel(options, attrs);
-        }
-
-        @Override
-        public SeekableByteChannel newByteChannel(OpenOption... options)
-            throws IOException
-        {
-            return delegate.newByteChannel(options);
-        }
-
-        @Override
-        public InputStream newInputStream(OpenOption... options) throws IOException {
-            return delegate.newInputStream();
-        }
-
-        @Override
-        public OutputStream newOutputStream(OpenOption... options)
-            throws IOException
-        {
-            return delegate.newOutputStream(options);
-        }
-
-        @Override
-        public boolean isHidden() throws IOException {
-            return delegate.isHidden();
-        }
-
-        @Override
-        public void checkAccess(AccessMode... modes) throws IOException {
-            delegate.checkAccess(modes);
-        }
-
-        @Override
-        public boolean exists() {
-            return delegate.exists();
-        }
-
-        @Override
-        public boolean notExists() {
-            return delegate.notExists();
-        }
-
-        @Override
-        public FileStore getFileStore() throws IOException {
-            return delegate.getFileStore();
-        }
-
-        @Override
-        public WatchKey register(WatchService watcher,
-                                      WatchEvent.Kind<?>[] events,
-                                      WatchEvent.Modifier... modifiers)
-        {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public  WatchKey register(WatchService watcher,
-                                      WatchEvent.Kind<?>... events)
-        {
-            throw new UnsupportedOperationException();
-        }
-
-
-        @Override
-        public Iterator<Path> iterator() {
-            final Iterator<Path> itr = delegate.iterator();
-            return new Iterator<Path>() {
-                @Override
-                public boolean hasNext() {
-                    return itr.hasNext();
-                }
-                @Override
-                public Path next() {
-                    return wrap(itr.next());
-                }
-                @Override
-                public void remove() {
-                    itr.remove();
-                }
-            };
-        }
-
-        @Override
-        public int compareTo(Path other) {
-            return delegate.compareTo(unwrap(other));
-        }
-
-        @Override
-        public boolean isSameFile(Path other) throws IOException {
-            return delegate.isSameFile(unwrap(other));
-        }
-
-
-        @Override
-        public boolean equals(Object other) {
-            if (!(other instanceof PassThroughPath))
-                return false;
-            return delegate.equals(unwrap((PassThroughPath)other));
-        }
-
-        @Override
-        public int hashCode() {
-            return delegate.hashCode();
-        }
-
-        @Override
-        public String toString() {
-            return delegate.toString();
-        }
-    }
-}