/******************************************************************************* * Copyright (c) 2008, 2016 xored software, Inc. * * 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: * xored software, Inc. - initial API and Implementation (Alex Panchenko) *******************************************************************************/ package org.eclipse.dltk.core.environment; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.core.internal.environment.LocalEnvironment; import org.eclipse.osgi.util.NLS; /** * {@link File} as {@link IFileHandle} wrapper */ public class FileAsFileHandle implements IFileHandle { private final IEnvironment environment; private final File file; public FileAsFileHandle(File file) { this(LocalEnvironment.getInstance(), file); } public FileAsFileHandle(IEnvironment environment, File file) { this.environment = environment; this.file = file; } @Override public boolean exists() { return file.exists(); } @Override public String getCanonicalPath() { try { return file.getCanonicalPath(); } catch (IOException e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } return file.getPath(); } } @Override public IFileHandle getChild(String path) { return new FileAsFileHandle(environment, new File(file, path)); } @Override public IFileHandle[] getChildren() { final File[] children = file.listFiles(); if (children != null) { IFileHandle[] result = new IFileHandle[children.length]; for (int i = 0; i < children.length; ++i) { result[i] = new FileAsFileHandle(environment, children[i]); } return result; } else { return null; } } @Override public IEnvironment getEnvironment() { return environment; } @Override public String getEnvironmentId() { return environment.getId(); } @Override public IPath getFullPath() { return EnvironmentPathUtils.getFullPath(environment, getPath()); } @Override public String getName() { return file.getName(); } @Override public IFileHandle getParent() { final File parentFile = file.getParentFile(); if (parentFile != null) { return new FileAsFileHandle(environment, parentFile); } else { return null; } } @Override public IPath getPath() { return new Path(file.getPath()); } @Override public boolean isDirectory() { return file.isDirectory(); } @Override public boolean isFile() { return file.isFile(); } @Override public boolean isSymlink() { return EFS.getLocalFileSystem().getStore(file.toURI()).fetchInfo() .getAttribute(EFS.ATTRIBUTE_SYMLINK); } @Override public long lastModified() { return file.lastModified(); } @Override public long length() { return file.length(); } @Override public InputStream openInputStream(IProgressMonitor monitor) throws IOException { return new FileInputStream(file); } @Override public OutputStream openOutputStream(IProgressMonitor monitor) throws IOException { return new FileOutputStream(file); } @Override public String toOSString() { return file.getPath(); } @Override public URI toURI() { return file.toURI(); } @Override public void move(IFileHandle destination) throws CoreException { final File destFile = FileHandles.asFile(destination); if (!file.renameTo(destFile)) { throw new CoreException(new Status(IStatus.ERROR, DLTKCore.PLUGIN_ID, NLS.bind("Rename {0} to {1} failed", //$NON-NLS-1$ file, destFile))); } } File getFile() { return file; } @Override public String toString() { return file.toString(); } }