/*- * Copyright (C) 2008-2009 Erik Larsson * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.catacombae.storage.fs.hfscommon; import java.util.Date; import org.catacombae.util.Util; import org.catacombae.hfs.types.hfscommon.CommonHFSCatalogAttributes; import org.catacombae.hfs.types.hfscommon.CommonHFSCatalogFileRecord; import org.catacombae.hfs.types.hfsplus.HFSPlusBSDInfo; import org.catacombae.storage.fs.FSAttributes; import org.catacombae.storage.fs.WindowsFileAttributes; /** * @author <a href="http://www.catacombae.org/" target="_top">Erik Larsson</a> */ class HFSCommonFSAttributes extends FSAttributes { private final HFSCommonFSEntry parentEntry; private final CommonHFSCatalogAttributes attributes; private POSIXFileAttributes posixAttributes = null; public HFSCommonFSAttributes(HFSCommonFSEntry parentEntry, CommonHFSCatalogAttributes attributes) { this.parentEntry = parentEntry; this.attributes = attributes; } @Override public boolean hasPOSIXFileAttributes() { return attributes.hasPermissions(); } @Override public POSIXFileAttributes getPOSIXFileAttributes() { if(attributes.hasPermissions()) { if(posixAttributes == null) { HFSPlusBSDInfo permissions = attributes.getPermissions(); posixAttributes = new DefaultPOSIXFileAttributes( Util.unsign(permissions.getOwnerID()), Util.unsign(permissions.getGroupID()), permissions.getFileMode(), attributes.getCatalogNodeID().toLong()); } return posixAttributes; } else throw new UnsupportedOperationException("Not supported."); } @Override public WindowsFileAttributes getWindowsFileAttributes() { throw new UnsupportedOperationException("Not supported."); } @Override public Date getModifyDate() { return attributes.getContentModDateAsDate(); } @Override public boolean hasWindowsFileAttributes() { return false; } @Override public boolean hasCreateDate() { return attributes.hasCreateDate(); } @Override public Date getCreateDate() { return attributes.getCreateDateAsDate(); } @Override public boolean hasModifyDate() { return attributes.hasContentModDate(); } @Override public boolean hasAttributeModifyDate() { return attributes.hasAttributeModDate(); } @Override public boolean hasAccessDate() { return attributes.hasAccessDate(); } @Override public Date getAccessDate() { return attributes.getAccessDateAsDate(); } @Override public boolean hasBackupDate() { return attributes.hasBackupDate(); } @Override public Date getBackupDate() { return attributes.getBackupDateAsDate(); } @Override public Date getAttributeModifyDate() { return attributes.getAttributeModDateAsDate(); } @Override public boolean hasLinkCount() { if(attributes instanceof CommonHFSCatalogFileRecord) { CommonHFSCatalogFileRecord fr = (CommonHFSCatalogFileRecord) attributes; if(fr.getData().isHardFileLink() /* || fr.getData().isHardDirectoryLink() */ ) return true; } return false; } @Override public Long getLinkCount() { if(attributes instanceof CommonHFSCatalogFileRecord) { return parentEntry.getFileSystemHandler().getLinkCount( (CommonHFSCatalogFileRecord) attributes); } return null; } }