blob: b0cea77f9312cdd898ae676c46c2086afb946ab6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2014 Red Hat Incorporated 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/org/documents/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API
* Red Hat Incorporated - initial implementation
* Martin Oberhuber (Wind River) - [44107] Add symbolic links to ResourceAttributes API
*******************************************************************************/
package org.eclipse.core.resources;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileSystem;
import org.eclipse.core.internal.utils.FileUtil;
import org.eclipse.core.runtime.CoreException;
/**
* This class represents platform specific attributes of files.
* Any attributes can be added, but only the attributes that are
* supported by the platform will be used. These methods do not set the
* attributes in the file system.
*
* @author Red Hat Incorporated
* @see IResource#getResourceAttributes()
* @see IResource#setResourceAttributes(ResourceAttributes)
* @since 3.1
* @noextend This class is not intended to be subclassed by clients.
*/
public class ResourceAttributes {
private int attributes;
/**
* Creates a new resource attributes instance with attributes
* taken from the specified file in the file system. If the specified
* file does not exist or is not accessible, this method has the
* same effect as calling the default constructor.
*
* @param file The file to get attributes from
* @return A resource attributes object
*/
public static ResourceAttributes fromFile(java.io.File file) {
try {
return FileUtil.fileInfoToAttributes(EFS.getStore(file.toURI()).fetchInfo());
} catch (CoreException e) {
//file could not be accessed
return new ResourceAttributes();
}
}
/**
* Creates a new instance of <code>ResourceAttributes</code>.
*/
public ResourceAttributes() {
super();
}
/**
* Returns whether this ResourceAttributes object is marked archive.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_ARCHIVE}.</p>
*
* @return <code>true</code> if this resource is marked archive,
* <code>false</code> otherwise
* @see #setArchive(boolean)
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_ARCHIVE
*/
public boolean isArchive() {
return (attributes & EFS.ATTRIBUTE_ARCHIVE) != 0;
}
/**
* Returns whether this ResourceAttributes object is marked executable.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_EXECUTABLE}.</p>
*
* @return <code>true</code> if this resource is marked executable,
* <code>false</code> otherwise
* @see #setExecutable(boolean)
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_EXECUTABLE
*/
public boolean isExecutable() {
return (attributes & EFS.ATTRIBUTE_EXECUTABLE) != 0;
}
/**
* Returns whether this ResourceAttributes object is marked hidden.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_HIDDEN}.</p>
*
* @return <code>true</code> if this resource is marked hidden,
* <code>false</code> otherwise
* @see #setHidden(boolean)
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_HIDDEN
* @since 3.2
*/
public boolean isHidden() {
return (attributes & EFS.ATTRIBUTE_HIDDEN) != 0;
}
/**
* Returns whether this ResourceAttributes object is marked read only.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_READ_ONLY}.</p>
*
* @return <code>true</code> if this resource is marked as read only,
* <code>false</code> otherwise
* @see #setReadOnly(boolean)
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_READ_ONLY
*/
public boolean isReadOnly() {
return (attributes & EFS.ATTRIBUTE_READ_ONLY) != 0;
}
/**
* Returns whether this ResourceAttributes object is marked as symbolic link.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_SYMLINK}.</p>
*
* @return <code>true</code> if this resource is marked as symbolic link,
* <code>false</code> otherwise
* @see #setSymbolicLink(boolean)
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_SYMLINK
* @since 3.4
*/
public boolean isSymbolicLink() {
return (attributes & EFS.ATTRIBUTE_SYMLINK) != 0;
}
/**
* Sets or unsets whether this ResourceAttributes object is marked archive.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_ARCHIVE}.</p>
*
* @param archive <code>true</code> to set it to be archive,
* <code>false</code> to unset
* @see #isArchive()
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_ARCHIVE
*/
public void setArchive(boolean archive) {
set(EFS.ATTRIBUTE_ARCHIVE, archive);
}
/**
* Clears all of the bits indicated by the mask.
* @nooverride This method is not intended to be re-implemented or extended by clients.
* @noreference This method is not intended to be referenced by clients.
*/
public void set(int mask, boolean value) {
if (value)
attributes |= mask;
else
attributes &= ~mask;
}
/**
* Returns whether this ResourceAttributes object has the given mask set.
* @nooverride This method is not intended to be re-implemented or extended by clients.
* @noreference This method is not intended to be referenced by clients.
*/
public boolean isSet(int mask) {
return (attributes & mask) != 0;
}
/**
* Sets or unsets whether this ResourceAttributes object is marked executable.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_EXECUTABLE}.</p>
*
* @param executable <code>true</code> to set it to be executable,
* <code>false</code> to unset
* @see #isExecutable()
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_EXECUTABLE
*/
public void setExecutable(boolean executable) {
set(EFS.ATTRIBUTE_EXECUTABLE, executable);
}
/**
* Sets or unsets whether this ResourceAttributes object is marked hidden
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_HIDDEN}.</p>
*
* @param hidden <code>true</code> to set it to be marked hidden,
* <code>false</code> to unset
* @see #isHidden()
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_HIDDEN
* @since 3.2
*/
public void setHidden(boolean hidden) {
set(EFS.ATTRIBUTE_HIDDEN, hidden);
}
/**
* Sets or unsets whether this ResourceAttributes object is marked read only.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_READ_ONLY}.</p>
*
* @param readOnly <code>true</code> to set it to be marked read only,
* <code>false</code> to unset
* @see #isReadOnly()
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_READ_ONLY
*/
public void setReadOnly(boolean readOnly) {
set(EFS.ATTRIBUTE_READ_ONLY, readOnly);
}
/**
* Sets or unsets whether this ResourceAttributes object is marked as symbolic link.
* <p>This attribute is used only on file systems supporting {@link EFS#ATTRIBUTE_SYMLINK}.</p>
*
* @param symLink <code>true</code> to set it to be marked as symbolic link,
* <code>false</code> to unset
* @see #isSymbolicLink()
* @see IFileSystem#attributes()
* @see EFS#ATTRIBUTE_SYMLINK
* @since 3.4
*/
public void setSymbolicLink(boolean symLink) {
set(EFS.ATTRIBUTE_SYMLINK, symLink);
}
/**
* Returns a string representation of the attributes, suitable
* for debugging purposes only.
*/
@Override
public String toString() {
return "ResourceAttributes(" + attributes + ')'; //$NON-NLS-1$
}
}