Package org.jnode.fs.hfsplus.catalog

Source Code of org.jnode.fs.hfsplus.catalog.CatalogThread

/*
* $Id$
*
* Copyright (C) 2003-2014 JNode.org
*
* This library is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This library 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 Lesser General Public
* License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; If not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package org.jnode.fs.hfsplus.catalog;

import org.jnode.fs.hfsplus.HfsUnicodeString;
import org.jnode.util.BigEndian;

public class CatalogThread {

    public static final int CATALOG_THREAD_SIZE = 512;

    /**
     * The catalog thread record type. Can be a file or a folder.
     */
    private int recordType;

    /**
     * the catalog node id of the file or folder referenced by the thread
     * record.
     */
    private CatalogNodeId parentId;

    /**
     * the name of the file or folder reference by the thread record.
     */
    private HfsUnicodeString nodeName;

    /**
     * Create catalog thread from existing data.
     *
     * @param src byte array contains catalog thread data.
     */
    public CatalogThread(final byte[] src) {
        byte[] data = new byte[512];
        System.arraycopy(src, 0, data, 0, CATALOG_THREAD_SIZE);
        recordType = BigEndian.getInt16(data, 0);
        parentId = new CatalogNodeId(data, 4);
        nodeName = new HfsUnicodeString(data, 8);
    }

    /**
     * Create a new catalog thread.
     *
     * @param type   catalog thread record type.
     * @param parent {@link CatalogNodeId} of the file or folder reference by
     *               the tread record.
     * @param name   {@link HfsUnicodeString} represent the name of the file or
     *               folder reference by the tread record.
     */
    public CatalogThread(int type, CatalogNodeId parent, HfsUnicodeString name) {
        this.recordType = type;
        this.parentId = parent;
        this.nodeName = name;
    }

    /**
     * @return the thread encoded as data
     */
    public byte[] getBytes() {
        byte[] data = new byte[512];
        BigEndian.setInt16(data, 0, recordType);
        BigEndian.setInt32(data, 4, (int) parentId.getId());
        System.arraycopy(parentId.getBytes(), 0, data, 4, 4);
        System.arraycopy(nodeName.getBytes(), 0, data, 8, nodeName.getBytes().length);
        return data;
    }

}
TOP

Related Classes of org.jnode.fs.hfsplus.catalog.CatalogThread

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.