/*- * 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 org.catacombae.hfs.types.hfscommon.CommonHFSCatalogFileRecord; import org.catacombae.hfs.types.hfscommon.CommonHFSCatalogFolder; import org.catacombae.hfs.types.hfscommon.CommonHFSCatalogFolderRecord; import org.catacombae.hfs.types.hfscommon.CommonHFSCatalogLeafRecord; import org.catacombae.hfs.types.hfscommon.CommonHFSCatalogNodeID; import org.catacombae.storage.fs.FSAttributes; import org.catacombae.storage.fs.FSEntry; import org.catacombae.storage.fs.FSFolder; import org.catacombae.storage.fs.FSFork; /** * @author <a href="http://www.catacombae.org/" target="_top">Erik Larsson</a> */ public class HFSCommonFSFolder extends HFSCommonFSEntry implements FSFolder { /** * The record from which this file was referenced. In the case of a * non-hardlinked directory, this variable is equal to * <code>folderRecord</code>. * The key record supplies the name/location of the folder, but all other * data is taken from <code>folderRecord</code>. */ private final CommonHFSCatalogLeafRecord keyRecord; /** * The folder record, from which folder data and attributes are retrieved. * Could be called the 'inode' although it's not really proper in regard to * the structure of HFS. */ private final CommonHFSCatalogFolderRecord folderRecord; private final HFSCommonFSAttributes attributes; public HFSCommonFSFolder(HFSCommonFileSystemHandler iParent, CommonHFSCatalogFolderRecord iFolderRecord) { this(iParent, null, iFolderRecord); } HFSCommonFSFolder(HFSCommonFileSystemHandler iParent, CommonHFSCatalogFileRecord iHardLinkFileRecord, CommonHFSCatalogFolderRecord iFolderRecord) { super(iParent, iFolderRecord.getData()); // Input check if(iParent == null) throw new IllegalArgumentException("iParent must not be null!"); if(iFolderRecord == null) throw new IllegalArgumentException("iFolderRecord must not be null!"); if(iHardLinkFileRecord != null) this.keyRecord = iHardLinkFileRecord; else this.keyRecord = iFolderRecord; this.folderRecord = iFolderRecord; this.attributes = new HFSCommonFSAttributes(this, folderRecord.getData()); } /* @Override */ public String[] list() { return fsHandler.listNames(folderRecord); } /* @Override */ public FSEntry[] listEntries() { return fsHandler.listFSEntries(folderRecord); } /* @Override */ public FSEntry getChild(String name) { return fsHandler.getEntry(folderRecord, name); } /* @Override */ public long getValence() { return folderRecord.getData().getValence(); } /* @Override */ public FSAttributes getAttributes() { return attributes; } /* @Override */ public String getName() { return fsHandler.getProperNodeName(keyRecord); } /* @Override public FSFolder getParent() { return fsHandler.lookupParentFolder(keyRecord); } * */ /* @Override */ public boolean isCompressed() { return false; } /* @Override */ protected CommonHFSCatalogNodeID getCatalogNodeID() { return folderRecord.getData().getFolderID(); } /* @Override */ protected FSFork getResourceFork() { return null; } public CommonHFSCatalogFolder getInternalCatalogFolder() { return folderRecord.getData(); } CommonHFSCatalogFolderRecord getInternalCatalogFolderRecord() { return folderRecord; } }