/* * Copyright (C) 2012 The CyanogenMod Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.cyanogenmod.filemanager.model; import com.cyanogenmod.filemanager.R; import com.cyanogenmod.filemanager.util.FileHelper; import java.io.File; import java.io.Serializable; import java.util.Date; /** * A class that represents an abstract file system object. * * @see RegularFile * @see Directory * @see Symlink * @see SystemFile */ public abstract class FileSystemObject implements Serializable, Comparable<FileSystemObject> { private static final long serialVersionUID = 5877049750925761305L; //Resource identifier for default icon private static final int RESOURCE_ICON_DEFAULT = R.drawable.ic_fso_default; private int mResourceIconId; private String mName; private String mParent; private User mUser; private Group mGroup; private Permissions mPermissions; private long mSize; private Date mLastAccessedTime; private Date mLastModifiedTime; private Date mLastChangedTime; /** * Constructor of <code>FileSystemObject</code>. * * @param name The name of the object * @param parent The parent folder of the object * @param user The user proprietary of the object * @param group The group proprietary of the object * @param permissions The permissions of the object * @param size The size in bytes of the object * @param lastAccessedTime The last time that the object was accessed * @param lastModifiedTime The last time that the object was modified * @param lastChangedTime The last time that the object was changed */ public FileSystemObject(String name, String parent, User user, Group group, Permissions permissions, long size, Date lastAccessedTime, Date lastModifiedTime, Date lastChangedTime) { super(); this.mName = name; this.mParent = parent; this.mUser = user; this.mGroup = group; this.mPermissions = permissions; this.mSize = size; this.mLastAccessedTime = lastAccessedTime; this.mLastModifiedTime = lastModifiedTime; this.mLastChangedTime = lastChangedTime; this.mResourceIconId = RESOURCE_ICON_DEFAULT; } /** * Method that returns the character that identifies the object in unix. * * @return char The character that identifies the object in unix */ public abstract char getUnixIdentifier(); /** * Method that returns the name of the object. * * @return String The name of the object */ public String getName() { return this.mName; } /** * Method that sets the name of the object. * * @param name The name to set */ public void setName(String name) { this.mName = name; } /** * Method that returns the parent folder of the object. * * @return String The parent folder of the object */ public String getParent() { return this.mParent; } /** * Method that sets the parent folder of the object. * * @param parent The parent folder of the object */ public void setParent(String parent) { this.mParent = parent; } /** * Method that returns the user proprietary of the object. * * @return User The user proprietary of the object */ public User getUser() { return this.mUser; } /** * Method that sets the user proprietary of the object. * * @param user The user proprietary of the object */ public void setUser(User user) { this.mUser = user; } /** * Method that returns the group proprietary of the object. * * @return Group The group proprietary of the object */ public Group getGroup() { return this.mGroup; } /** * Method that sets the group proprietary of the object. * * @param group The group proprietary of the object */ public void setGroup(Group group) { this.mGroup = group; } /** * Method that returns the permissions of the object. * * @return Permissions The permissions of the object */ public Permissions getPermissions() { return this.mPermissions; } /** * Method that sets the permissions of the object. * * @param permissions The permissions of the object */ public void setPermissions(Permissions permissions) { this.mPermissions = permissions; } /** * Method that returns the size in bytes of the object. * * @return long The size in bytes of the object */ public long getSize() { return this.mSize; } /** * Method that sets the size in bytes of the object. * * @param size The size in bytes of the object */ public void setSize(long size) { this.mSize = size; } /** * Method that returns the last time that the object was accessed. * * @return Date The last time that the object was accessed */ public Date getLastAccessedTime() { return this.mLastAccessedTime; } /** * Method that sets the last time that the object was accessed. * * @param lastAccessedTime The last time that the object was accessed */ public void setLastAccessedTime(Date lastAccessedTime) { this.mLastAccessedTime = lastAccessedTime; } /** * Method that returns the last time that the object was modified. * * @return Date The last time that the object was modified */ public Date getLastModifiedTime() { return this.mLastModifiedTime; } /** * Method that sets the last time that the object was modified. * * @param lastModifiedTime The last time that the object was modified */ public void setLastModifiedTime(Date lastModifiedTime) { this.mLastModifiedTime = lastModifiedTime; } /** * Method that returns the last time that the object was changed. * * @return Date The last time that the object was changed */ public Date getLastChangedTime() { return this.mLastChangedTime; } /** * Method that sets the last time that the object was changed. * * @param lastChangedTime The last time that the object was changed */ public void setLastChangedTime(Date lastChangedTime) { this.mLastChangedTime = lastChangedTime; } /** * Method that returns of the object is hidden object. * * @return boolean If the object is hidden object */ public boolean isHidden() { return this.mName.startsWith("."); //$NON-NLS-1$ } /** * Method that returns the identifier of the drawable icon associated * to the object. * * @return int The identifier of the drawable icon * @hide */ public int getResourceIconId() { return this.mResourceIconId; } /** * Method that sets the identifier of the drawable icon associated * to the object. * * @param resourceIconId The identifier of the drawable icon * @hide */ protected void setResourceIconId(int resourceIconId) { this.mResourceIconId = resourceIconId; } /** * Method that returns the full path of the file system object. * * @return String The full path of the file system object */ public String getFullPath() { if (FileHelper.isRootDirectory(this)) { return FileHelper.ROOT_DIRECTORY; } else if (FileHelper.isParentRootDirectory(this)) { if (this.mParent == null) { return FileHelper.ROOT_DIRECTORY + this.mName; } return this.mParent + this.mName; } return this.mParent + File.separator + this.mName; } /** * {@inheritDoc} */ @Override public int compareTo(FileSystemObject another) { String o1 = this.getFullPath(); String o2 = another.getFullPath(); return o1.compareTo(o2); } /** * {@inheritDoc} */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((this.mName == null) ? 0 : this.mName.hashCode()); result = prime * result + ((this.mParent == null) ? 0 : this.mParent.hashCode()); return result; } /** * {@inheritDoc} */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; FileSystemObject other = (FileSystemObject) obj; if (this.mName == null) { if (other.mName != null) return false; } else if (!this.mName.equals(other.mName)) return false; if (this.mParent == null) { if (other.mParent != null) return false; } else if (!this.mParent.equals(other.mParent)) return false; return true; } /** * Method that returns the unix string representation of the type and permissions of the * file system object. * * @return String The string representation */ public String toRawPermissionString() { return String.format("%s%s", //$NON-NLS-1$ String.valueOf(getUnixIdentifier()), getPermissions().toRawString()); } /** * {@inheritDoc} */ @Override public String toString() { return "FileSystemObject [mResourceIconId=" + this.mResourceIconId //$NON-NLS-1$ + ", mName=" + this.mName + ", mParent=" + this.mParent //$NON-NLS-1$ //$NON-NLS-2$ + ", mUser=" + this.mUser + ", mGroup=" + this.mGroup //$NON-NLS-1$ //$NON-NLS-2$ + ", mPermissions=" + this.mPermissions //$NON-NLS-1$ + ", mSize=" + this.mSize //$NON-NLS-1$ + ", mLastAccessedTime=" + this.mLastAccessedTime //$NON-NLS-1$ + ", mLastModifiedTime=" + this.mLastModifiedTime //$NON-NLS-1$ + ", mLastChangedTime=" + this.mLastChangedTime //$NON-NLS-1$ + "]"; //$NON-NLS-1$ } }