platform35/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourceAttributes.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/platform35/org.eclipse.core.resources/src/org/eclipse/core/resources/ResourceAttributes.java Thu Jul 30 11:56:23 2009 -0500
@@ -0,0 +1,191 @@
+/*******************************************************************************
+ * 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 read only.
+ *
+ * @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$
+ }
+}
\ No newline at end of file