compound-binary-file-js
Version:
This is an implementation of [Compound Binary File v.3](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b) \ Allows reading existing files, creation of the/write operation
46 lines (39 loc) • 1.77 kB
text/typescript
import {StorageDirectoryEntry} from "./StorageDirectoryEntry";
import {DirectoryEntryChain} from "./DirectoryEntryChain";
import {CFDataview} from "../dataview/СFDataview";
import {ColorFlag, DirectoryEntry, ObjectType} from "./DirectoryEntry";
import {Color} from "../tree/Node";
import {DirectoryEntryNode} from "./DirectoryEntryNode";
export class RootStorageDirectoryEntry extends StorageDirectoryEntry {
static readonly NAME = "Root Entry";
public static readonly ID = 0;
constructor(id: number, directoryEntryChain: DirectoryEntryChain, view: CFDataview, name?: string, colorFlag?: ColorFlag , objectType: ObjectType = ObjectType.Storage) {
super(id, directoryEntryChain, view, name, colorFlag, objectType);
const child = this.getChild();
if(child != null) {
this.tree.setRoot(new DirectoryEntryNode(child, Color.BLACK));
}
}
getChild(): DirectoryEntry {
if(this.getChildPosition() === RootStorageDirectoryEntry.ID) {
throw new Error("Root Entry child cannot have ID == 0");
}
return super.getChild();
}
setRightSibling(rightSibling: DirectoryEntry): void {
if(rightSibling != null) {
throw new Error("Root Storage cannot have siblings");
}
}
setLeftSibling(leftSibling: DirectoryEntry): void {
if(leftSibling != null) {
throw new Error("Root Storage cannot have siblings");
}
}
setDirectoryEntryName(name: string): void {
if("Root Entry" !== name) {
throw new Error(`Name of Root Storage directory entry is always ${RootStorageDirectoryEntry.NAME}`);
}
super.setDirectoryEntryName(name);
}
}