/******************************************************************************* * Copyright (c) 2004, 2008 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.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. * * @return <code>true</code> if this resource is marked archive, <code>false</code> otherwise * @see #setArchive(boolean) */ public boolean isArchive() { return (attributes & EFS.ATTRIBUTE_ARCHIVE) != 0; } /** * Returns whether this ResourceAttributes object is marked executable. * * @return <code>true</code> if this resource is marked executable, <code>false</code> otherwise * @see #setExecutable(boolean) */ public boolean isExecutable() { return (attributes & EFS.ATTRIBUTE_EXECUTABLE) != 0; } /** * Returns whether this ResourceAttributes object is marked hidden. * * @return <code>true</code> if this resource is marked hidden, <code>false</code> otherwise * @see #setHidden(boolean) * @since 3.2 */ public boolean isHidden() { return (attributes & EFS.ATTRIBUTE_HIDDEN) != 0; } /** * Returns whether this ResourceAttributes object is marked read only. * * @return <code>true</code> if this resource is marked as read only, <code>false</code> * otherwise * @see #setReadOnly(boolean) */ public boolean isReadOnly() { return (attributes & EFS.ATTRIBUTE_READ_ONLY) != 0; } /** * Returns whether this ResourceAttributes object is marked as symbolic link. * * @return <code>true</code> if this resource is marked as symbolic link, <code>false</code> * otherwise * @see #setSymbolicLink(boolean) * @since 3.4 */ public boolean isSymbolicLink() { return (attributes & EFS.ATTRIBUTE_SYMLINK) != 0; } /** * Sets or unsets whether this ResourceAttributes object is marked archive. * * @param archive <code>true</code> to set it to be archive, <code>false</code> to unset * @see #isArchive() */ public void setArchive(boolean archive) { set(EFS.ATTRIBUTE_ARCHIVE, archive); } /** * Clears all of the bits indicated by the mask. */ private void set(int mask, boolean value) { if (value) attributes|= mask; else attributes&= ~mask; } /** * Sets or unsets whether this ResourceAttributes object is marked executable. * * @param executable <code>true</code> to set it to be executable, <code>false</code> to unset * @see #isExecutable() */ public void setExecutable(boolean executable) { set(EFS.ATTRIBUTE_EXECUTABLE, executable); } /** * Sets or unsets whether this ResourceAttributes object is marked hidden * * @param hidden <code>true</code> to set it to be marked hidden, <code>false</code> to unset * @see #isHidden() * @since 3.2 */ public void setHidden(boolean hidden) { set(EFS.ATTRIBUTE_HIDDEN, hidden); } /** * Sets or unsets whether this ResourceAttributes object is marked read only. * * @param readOnly <code>true</code> to set it to be marked read only, <code>false</code> to * unset * @see #isReadOnly() */ public void setReadOnly(boolean readOnly) { set(EFS.ATTRIBUTE_READ_ONLY, readOnly); } /** * Sets or unsets whether this ResourceAttributes object is marked as symbolic link. * * @param symLink <code>true</code> to set it to be marked as symbolic link, <code>false</code> * to unset * @see #isSymbolicLink() * @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. */ public String toString() { return "ResourceAttributes(" + attributes + ')'; //$NON-NLS-1$ } }