From: <ga...@us...> - 2009-01-09 15:56:27
|
Revision: 4840 http://jnode.svn.sourceforge.net/jnode/?rev=4840&view=rev Author: galatnm Date: 2009-01-09 15:56:22 +0000 (Fri, 09 Jan 2009) Log Message: ----------- Add creation of new catalog object. Modified Paths: -------------- trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/NodeDescriptor.java Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java 2009-01-09 13:48:41 UTC (rev 4839) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/HFSPlusDirectory.java 2009-01-09 15:56:22 UTC (rev 4840) @@ -37,7 +37,8 @@ throw new ReadOnlyFileSystemException(); } Superblock volumeHeader = ((HfsPlusFileSystem) getFileSystem()).getVolumeHeader(); - CatalogFolder newFolder = new CatalogFolder(new CatalogNodeId(volumeHeader.getNextCatalogId())); + CatalogFolder newFolder = new CatalogFolder(); + newFolder.setFolderId(new CatalogNodeId(volumeHeader.getNextCatalogId())); log.debug("New catalog folder :\n" + newFolder.toString()); CatalogKey key = new CatalogKey(this.folder.getFolderId(), new HFSUnicodeString(name)); log.debug("New catalog key :\n" + key.toString()); Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java 2009-01-09 13:48:41 UTC (rev 4839) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java 2009-01-09 15:56:22 UTC (rev 4840) @@ -6,6 +6,7 @@ import java.util.List; import org.apache.log4j.Logger; +import org.jnode.fs.hfsplus.HFSPlusParams; import org.jnode.fs.hfsplus.HFSUnicodeString; import org.jnode.fs.hfsplus.HfsPlusConstants; import org.jnode.fs.hfsplus.HfsPlusFileSystem; @@ -22,7 +23,46 @@ private NodeDescriptor btnd; private BTHeaderRecord bthr; private int firstNodeOffset; - + + /** + * Create new Catalog + * + * @param params + */ + public Catalog(HFSPlusParams params){ + btnd = new NodeDescriptor(); + btnd.setKind(HfsPlusConstants.BT_HEADER_NODE); + btnd.setHeight(0); + btnd.setRecordCount(3); + // + bthr = new BTHeaderRecord(); + bthr.setTreeDepth(1); + bthr.setRootNode(1); + bthr.settFirstLeafNode(1); + bthr.setLastLeafNode(1); + bthr.setLeafRecords(params.isJournaled() ? 6 : 2); + bthr.setNodeSize(params.getCatalogNodeSize()); + bthr.setTotalNodes(params.getCatalogClumpSize()/params.getCatalogNodeSize()); + bthr.setFreeNodes(bthr.getTotalNodes() - 2); + bthr.setClumpSize(params.getCatalogClumpSize()); + //TODO initialize attributes, max key length and key comparaison type. + // Root directory + CatalogKey ck = new CatalogKey(CatalogNodeId.HFSPLUS_POR_CNID,new HFSUnicodeString(params.getVolumeName())); + CatalogFolder folder = new CatalogFolder(); + folder.setFolderId(CatalogNodeId.HFSPLUS_ROOT_CNID); + folder.setValence(params.isJournaled() ? 2 : 0); + //TODO creation date, content modification date, text encoding and access rights. + ck = new CatalogKey(CatalogNodeId.HFSPLUS_ROOT_CNID,new HFSUnicodeString("")); + CatalogThread ct = new CatalogThread(HfsPlusConstants.RECORD_TYPE_FOLDER_THREAD, CatalogNodeId.HFSPLUS_ROOT_CNID, new HFSUnicodeString("")); + } + + /** + * Create Catalog based on catalog file that exist on the file system. + * + * @param fs + * + * @throws IOException + */ public Catalog(final HfsPlusFileSystem fs) throws IOException { log.debug("Initialize catalog\n"); this.fs = fs; Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java 2009-01-09 13:48:41 UTC (rev 4839) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/CatalogFolder.java 2009-01-09 15:56:22 UTC (rev 4840) @@ -18,17 +18,19 @@ * @param folderId * */ - public CatalogFolder(CatalogNodeId folderId) { + public CatalogFolder() { data = new byte[88]; BigEndian.setInt16(data, 0, HfsPlusConstants.RECORD_TYPE_FOLDER); - BigEndian.setInt32(data, 4, 0); - System.arraycopy(folderId.getBytes(), 0, data, 8, folderId.getBytes().length); } public final int getRecordType() { return BigEndian.getInt16(data, 0); } + public final void setValence(int valence) { + BigEndian.setInt32(data, 4, valence); + } + public final int getValence() { return BigEndian.getInt32(data, 4); } @@ -36,6 +38,10 @@ public final CatalogNodeId getFolderId() { return new CatalogNodeId(data, 8); } + + public final void setFolderId(CatalogNodeId folderId){ + System.arraycopy(folderId.getBytes(), 0, data, 8, folderId.getBytes().length); + } public final int getCreateDate() { return BigEndian.getInt32(data, 12); Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java 2009-01-09 13:48:41 UTC (rev 4839) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java 2009-01-09 15:56:22 UTC (rev 4840) @@ -6,6 +6,10 @@ public static final int BT_HEADER_RECORD_LENGTH = 106; private byte[] data; + public BTHeaderRecord() { + data = new byte[BT_HEADER_RECORD_LENGTH]; + } + public BTHeaderRecord(final byte[] src) { data = new byte[BT_HEADER_RECORD_LENGTH]; System.arraycopy(src, 0, data, 0, BT_HEADER_RECORD_LENGTH); @@ -15,26 +19,98 @@ return BigEndian.getInt16(data, 0); } + public void setTreeDepth(int depth){ + BigEndian.setInt16(data, 0, depth); + } + public final int getRootNode() { return BigEndian.getInt32(data, 2); } + + public void setRootNode(int node){ + BigEndian.setInt32(data, 2, node); + } public final int getLeafRecords() { return BigEndian.getInt32(data, 6); } + + public void setLeafRecords(int count){ + BigEndian.setInt32(data, 6, count); + } public final int getFirstLeafNode() { return BigEndian.getInt32(data, 10); } + public void settFirstLeafNode(int node){ + BigEndian.setInt32(data, 10, node); + } + public final int getLastLeafNode() { return BigEndian.getInt32(data, 14); } + + public void setLastLeafNode(int node){ + BigEndian.setInt32(data, 14, node); + } public final int getNodeSize() { return BigEndian.getInt16(data, 18); } + public void setNodeSize(int size){ + BigEndian.setInt16(data, 18, size); + } + + public int getMaxKeyLength(){ + return BigEndian.getInt16(data, 20); + } + + public void setMaxKeyLength(int length){ + BigEndian.setInt16(data, 20, length); + } + + public int getTotalNodes(){ + return BigEndian.getInt32(data, 22); + } + + public void setTotalNodes(int count){ + BigEndian.setInt32(data, 22, count); + } + + public int getFreeNodes(){ + return BigEndian.getInt32(data, 26); + } + + public void setFreeNodes(int count){ + BigEndian.setInt32(data, 26, count); + } + + public int getClumpSize(){ + return BigEndian.getInt32(data, 32); + } + + public void setClumpSize(int size){ + BigEndian.setInt32(data, 32, size); + } + + public int getTreeType(){ + return BigEndian.getInt8(data, 36); + } + + public void setTreeType(int type){ + BigEndian.setInt8(data, 36, type); + } + + public int getKeyCompareType(){ + return BigEndian.getInt8(data, 37); + } + + public void setKeyCompareType(int type){ + BigEndian.setInt8(data, 38, type); + } + public final String toString() { return ("Root node: " + getRootNode() + "\n" + "First leaf: " + getFirstLeafNode() + "\n" + "Last leaf: " + getLastLeafNode() + "\n" + "node size: " + getNodeSize() + "\n"); Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/NodeDescriptor.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/NodeDescriptor.java 2009-01-09 13:48:41 UTC (rev 4839) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/NodeDescriptor.java 2009-01-09 15:56:22 UTC (rev 4840) @@ -1,11 +1,16 @@ package org.jnode.fs.hfsplus.tree; +import org.jnode.fs.hfsplus.HfsPlusConstants; import org.jnode.util.BigEndian; public class NodeDescriptor { public static final int BT_NODE_DESCRIPTOR_LENGTH = 14; private byte[] data; + public NodeDescriptor(){ + data = new byte[BT_NODE_DESCRIPTOR_LENGTH]; + } + public NodeDescriptor(final byte[] src) { data = new byte[BT_NODE_DESCRIPTOR_LENGTH]; System.arraycopy(src, 0, data, 0, BT_NODE_DESCRIPTOR_LENGTH); @@ -22,14 +27,26 @@ public final int getKind() { return BigEndian.getInt8(data, 8); } + + public void setKind(int kind){ + BigEndian.setInt8(data, 8, kind); + } public final int getHeight() { return BigEndian.getInt8(data, 9); } + public void setHeight(int height){ + BigEndian.setInt8(data, 9, height); + } + public final int getNumRecords() { return BigEndian.getInt16(data, 10); } + + public void setRecordCount(int count){ + BigEndian.setInt16(data, 10, count); + } public final String toString() { return ("FLink: " + getFLink() + "\n" + "BLink: " + getBLink() + "\n" + "Kind: " + getKind() + "\n" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |