blob: bf354eaf498fd45efdc8e6969dfa1e84037db135 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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
*******************************************************************************/
package org.eclipse.core.resources;
import java.io.InputStream;
import org.eclipse.core.runtime.*;
/**
* A previous state of a file stored in the workspace's local history.
* <p>
* Certain methods for updating, deleting, or moving a file cause the
* "before" contents of the file to be copied to an internal area of the
* workspace called the <b>local history area</b> thus providing
* a limited history of earlier states of a file.
* </p>
* <p>
* Moving or copying a file will cause a copy of its local history to appear
* at the new location as well as at the original location. Subsequent
* changes to either file will only affect the local history of the file
* changed. Deleting a file and creating another one at the
* same path does not affect the history. If the original file had
* history, that same history will be available for the new one.
* </p>
* <p>
* The local history does not track resource properties.
* File states are volatile; the platform does not guarantee that a
* certain state will always be in the local history.
* </p>
* <p>
* File state objects implement the <code>IAdaptable</code> interface;
* extensions are managed by the platform's adapter manager.
* </p>
*
* @see IFile
* @see IStorage
* @see Platform#getAdapterManager()
* @noimplement This interface is not intended to be implemented by clients.
* @noextend This interface is not intended to be extended by clients.
*/
public interface IFileState extends IEncodedStorage, IAdaptable {
/**
* Returns whether this file state still exists in the local history.
*
* @return <code>true</code> if this state exists, and <code>false</code>
* if it does not
*/
public boolean exists();
/**
* Returns an open input stream on the contents of this file state.
* This refinement of the corresponding
* <code>IStorage</code> method returns an open input stream
* on the contents this file state represents.
* The client is responsible for closing the stream when finished.
*
* @return an input stream containing the contents of the file
* @exception CoreException if this method fails. Reasons include:
* <ul>
* <li> This state does not exist.</li>
* </ul>
*/
@Override
public InputStream getContents() throws CoreException;
/**
* Returns the full path of this file state.
* This refinement of the corresponding <code>IStorage</code>
* method specifies that <code>IFileState</code>s always have a
* path and that path is the full workspace path of the file represented by this state.
*
* @see IResource#getFullPath()
* @see IStorage#getFullPath()
*/
@Override
public IPath getFullPath();
/**
* Returns the modification time of the file. If you create a file at
* 9:00 and modify it at 11:00, the file state added to the history
* at 11:00 will have 9:00 as its modification time.
* <p>
* Note that is used only to give the user a general idea of how
* old this file state is.
*
* @return the time of last modification, in milliseconds since
* January 1, 1970, 00:00:00 GMT.
*/
public long getModificationTime();
/**
* Returns the name of this file state.
* This refinement of the corresponding <code>IStorage</code>
* method specifies that <code>IFileState</code>s always have a
* name and that name is equivalent to the last segment of the full path
* of the resource represented by this state.
*
* @see IResource#getName()
* @see IStorage#getName()
*/
@Override
public String getName();
/**
* Returns whether this file state is read-only.
* This refinement of the corresponding
* <code>IStorage</code> method restricts <code>IFileState</code>s to
* always be read-only.
*
* @see IStorage
*/
@Override
public boolean isReadOnly();
}