blob: 28939816a4e17e27b9dfec778387b2d1878d9016 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 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 org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.QualifiedName;
/**
* A lightweight interface for requesting information about a resource.
* All of the "get" methods on a resource proxy have trivial performance cost.
* Requesting the full path or the actual resource handle will cause extra objects
* to be created and will thus have greater cost.
* <p>
* When a resource proxy is used within an {@link IResourceProxyVisitor},
* it is a transient object that is only valid for the duration of a single visit method.
* A proxy should not be referenced once the single resource visit is complete.
* The equals and hashCode methods should not be relied on.
* </p>
* <p>
* A proxy can also be created using {@link IResource#createProxy()}. In
* this case the proxy is valid indefinitely, but will not remain in sync with
* the state of the corresponding resource.
* </p>
*
* @see IResourceProxyVisitor
* @since 2.1
* @noimplement This interface is not intended to be implemented by clients.
* @noextend This interface is not intended to be extended by clients.
*/
public interface IResourceProxy {
/**
* Returns the modification stamp of the resource being visited.
*
* @return the modification stamp, or <code>NULL_STAMP</code> if the
* resource either does not exist or exists as a closed project
* @see IResource#getModificationStamp()
*/
public long getModificationStamp();
/**
* Returns whether the resource being visited is accessible.
*
* @return <code>true</code> if the resource is accessible, and
* <code>false</code> otherwise
* @see IResource#isAccessible()
*/
public boolean isAccessible();
/**
* Returns whether the resource being visited is derived.
*
* @return <code>true</code> if the resource is marked as derived, and
* <code>false</code> otherwise
* @see IResource#isDerived()
*/
public boolean isDerived();
/**
* Returns whether the resource being visited is a linked resource.
*
* @return <code>true</code> if the resource is linked, and
* <code>false</code> otherwise
* @see IResource#isLinked()
*/
public boolean isLinked();
/**
* Returns whether the resource being visited is a phantom resource.
*
* @return <code>true</code> if the resource is a phantom resource, and
* <code>false</code> otherwise
* @see IResource#isPhantom()
*/
public boolean isPhantom();
/**
* Returns whether the resource being visited is a hidden resource.
*
* @return <code>true</code> if the resource is a hidden resource, and
* <code>false</code> otherwise
* @see IResource#isHidden()
*
* @since 3.4
*/
public boolean isHidden();
/**
* Returns whether the resource being visited is a team private member.
*
* @return <code>true</code> if the resource is a team private member, and
* <code>false</code> otherwise
* @see IResource#isTeamPrivateMember()
*/
public boolean isTeamPrivateMember();
/**
* Returns the simple name of the resource being visited.
*
* @return the name of the resource
* @see IResource#getName()
*/
public String getName();
/**
* Returns the value of the session property of the resource being
* visited, identified by the given key. Returns <code>null</code> if this
* resource has no such property.
* <p>
* Note that this method can return an out of date property value, or a
* value that no longer exists, if session properties are being modified
* concurrently with the resource visit.
* </p>
*
* @param key the qualified name of the property
* @return the string value of the session property,
* or <code>null</code> if the resource has no such property
* @see IResource#getSessionProperty(QualifiedName)
*/
public Object getSessionProperty(QualifiedName key);
/**
* Returns the type of the resource being visited.
*
* @return the resource type
* @see IResource#getType()
*/
public int getType();
/**
* Returns the full workspace path of the resource being visited.
* <p>
* Note that this is not a &quot;free&quot; proxy operation. This method
* will generally cause a path object to be created. For an optimal
* visitor, only call this method when absolutely necessary. Note that the
* simple resource name can be obtained from the proxy with no cost.
* </p>
* @return the full path of the resource
* @see IResource#getFullPath()
*/
public IPath requestFullPath();
/**
* Returns the handle of the resource being visited.
* <p>
* Note that this is not a &quot;free&quot; proxy operation. This method will
* generally cause both a path object and a resource object to be created.
* For an optimal visitor, only call this method when absolutely necessary.
* Note that the simple resource name can be obtained from the proxy with no
* cost, and the full path of the resource can be obtained through the proxy
* with smaller cost.
* </p>
* @return the resource handle
*/
public IResource requestResource();
}