/******************************************************************************* * Copyright (c) 2006, 2015 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * James Blackburn (Broadcom Corp.) - ongoing development *******************************************************************************/ package org.eclipse.core.tests.internal.filesystem.wrapper; import java.io.*; import java.net.URI; import org.eclipse.core.filesystem.*; import org.eclipse.core.filesystem.provider.FileStore; import org.eclipse.core.runtime.*; /** * A simple file system implementation that acts as a wrapper around the * local file system. */ public class WrapperFileStore extends FileStore { private final IFileStore baseStore; public WrapperFileStore(IFileStore baseStore) { this.baseStore = baseStore; } public static IFileStore newInstance(Class<? extends WrapperFileStore> clazz, IFileStore baseStore) { try { return clazz.getConstructor(IFileStore.class).newInstance(baseStore); } catch (Exception e) { // Test infrastructure failure... throw new Error(e); } } protected IFileStore createNewWrappedStore(IFileStore store) { return newInstance(getClass(), store); } @Override public IFileInfo[] childInfos(int options, IProgressMonitor monitor) throws CoreException { return baseStore.childInfos(options, monitor); } @Override public String[] childNames(int options, IProgressMonitor monitor) throws CoreException { return baseStore.childNames(options, monitor); } @Override public IFileStore[] childStores(int options, IProgressMonitor monitor) throws CoreException { IFileStore[] childStores = baseStore.childStores(options, monitor); for (int i = 0; i < childStores.length; i++) { // replace ordinary file store with wrapper version childStores[i] = createNewWrappedStore(childStores[i]); } return childStores; } @Override public void copy(IFileStore destination, int options, IProgressMonitor monitor) throws CoreException { baseStore.copy(destination, options, monitor); } @Override public void delete(int options, IProgressMonitor monitor) throws CoreException { baseStore.delete(options, monitor); } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof WrapperFileStore)) { return false; } return baseStore.equals(((WrapperFileStore) obj).baseStore); } @Override public IFileInfo fetchInfo() { return baseStore.fetchInfo(); } @Override public IFileInfo fetchInfo(int options, IProgressMonitor monitor) throws CoreException { return baseStore.fetchInfo(options, monitor); } public IFileStore getBaseStore() { return baseStore; } @Deprecated @Override public IFileStore getChild(IPath path) { return createNewWrappedStore(baseStore.getChild(path)); } @Override public IFileStore getFileStore(IPath path) { return createNewWrappedStore(baseStore.getFileStore(path)); } @Override public IFileStore getChild(String name) { return createNewWrappedStore(baseStore.getChild(name)); } @Override public IFileSystem getFileSystem() { return WrapperFileSystem.getInstance(); } @Override public String getName() { return baseStore.getName(); } @Override public IFileStore getParent() { IFileStore baseParent = baseStore.getParent(); return baseParent == null ? null : createNewWrappedStore(baseParent); } @Override public int hashCode() { return baseStore.hashCode(); } @Override public boolean isParentOf(IFileStore other) { if (!(other instanceof WrapperFileStore)) { return false; } IFileStore otherBaseStore = ((WrapperFileStore) other).baseStore; return baseStore.isParentOf(otherBaseStore); } @Override public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException { baseStore.mkdir(options, monitor); return this; } @Override public void move(IFileStore destination, int options, IProgressMonitor monitor) throws CoreException { if (destination instanceof WrapperFileStore) { destination = ((WrapperFileStore) destination).baseStore; } baseStore.move(destination, options, monitor); } @Override public InputStream openInputStream(int options, IProgressMonitor monitor) throws CoreException { return baseStore.openInputStream(options, monitor); } @Override public OutputStream openOutputStream(int options, IProgressMonitor monitor) throws CoreException { return baseStore.openOutputStream(options, monitor); } @Override public void putInfo(IFileInfo info, int options, IProgressMonitor monitor) throws CoreException { baseStore.putInfo(info, options, monitor); } @Override public File toLocalFile(int options, IProgressMonitor monitor) throws CoreException { return baseStore.toLocalFile(options, monitor); } @Override public URI toURI() { return WrapperFileSystem.getWrappedURI(baseStore.toURI()); } }