/*******************************************************************************
 * Copyright (c) 2005, 2008 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
 *******************************************************************************/
package org.eclipse.dltk.core.environment;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;

/**
 * This class hold handle to file or directory, most methods semantic are
 * similar to File class.
 */
public interface IFileHandle {

	/**
	 * Return associated environment.
	 * 
	 * @return associated environment
	 */
	IEnvironment getEnvironment();

	/**
	 * Return associated environment identifier
	 * 
	 * @return environment identifier
	 */
	String getEnvironmentId();

	IPath getPath();

	/**
	 * Return OS specific path representation of this handle.
	 * 
	 * @return
	 */
	String toOSString();

	/**
	 * Return canonical path.
	 */
	String getCanonicalPath();

	/**
	 * Return full path associated with this handle. Full path contains
	 * environment identifier.
	 * 
	 * @see EnvironmentPathUtils for more information about full path to path
	 *      conversions.
	 * 
	 * @return full path.
	 */
	IPath getFullPath();

	/**
	 * Return file name.
	 * 
	 * @return file name.
	 */
	String getName();

	/**
	 * Convert file to URI.
	 * 
	 * @return uri for file.
	 */
	URI toURI();

	/**
	 * Return this file parent file handle.
	 * 
	 * @return parent file handle
	 */
	IFileHandle getParent();

	/**
	 * Return children of this directory.
	 * 
	 * @return children or <code>null</code> on error
	 */
	IFileHandle[] getChildren();

	/**
	 * Return specific child by name
	 * 
	 * @param path
	 *            - path to file
	 * @return child file handle
	 */
	IFileHandle getChild(String path);

	/**
	 * Tests file or directory existence.
	 * 
	 * @return <code>true</code> if file or directory exists.
	 */
	boolean exists();

	/**
	 * Returns input stream for this file, or throws exception if file does not
	 * exist.
	 * 
	 * @param monitor
	 *            - progress monitor
	 * @return input stream
	 * @throws IOException
	 */
	InputStream openInputStream(IProgressMonitor monitor) throws IOException;

	/**
	 * Returns an open output stream on the contents of this file. The caller is
	 * responsible for closing the provided stream when it is no longer needed.
	 * This file need not exist in the underlying file system at the time this
	 * method is called.
	 * 
	 * @param monitor
	 * @return
	 * @throws IOException
	 */
	OutputStream openOutputStream(IProgressMonitor monitor) throws IOException;

	/**
	 * Return true if this file is symbolic link
	 * 
	 * @return
	 */
	boolean isSymlink();

	/**
	 * Return <code>true</code> if file is a directory
	 */
	boolean isDirectory();

	/**
	 * Return <code>true</code> if this file is a regular file
	 */
	boolean isFile();

	/**
	 * Return last modified time, or <code>0L</code> if the file does not exist
	 * or if an I/O error occurs
	 * 
	 * @return last modified time
	 */
	long lastModified();

	/**
	 * Return file length
	 * 
	 * @return
	 */
	long length();

	/**
	 * @param destination
	 * @since 2.0
	 */
	void move(IFileHandle destination) throws CoreException;
}
