1/*
2 * Copyright 2009-2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef UNPACKING_DIRECTORY_H
6#define UNPACKING_DIRECTORY_H
7
8
9#include "Directory.h"
10#include "PackageDirectory.h"
11#include "UnpackingNode.h"
12
13
14class UnpackingDirectory : public Directory, public UnpackingNode {
15public:
16								UnpackingDirectory(ino_t id);
17	virtual						~UnpackingDirectory();
18
19	virtual	mode_t				Mode() const;
20	virtual	uid_t				UserID() const;
21	virtual	gid_t				GroupID() const;
22	virtual	timespec			ModifiedTime() const;
23	virtual	off_t				FileSize() const;
24
25	virtual	Node*				GetNode();
26
27	virtual	status_t			AddPackageNode(PackageNode* packageNode);
28	virtual	void				RemovePackageNode(PackageNode* packageNode);
29
30	virtual	PackageNode*		GetPackageNode();
31	virtual	bool				IsOnlyPackageNode(PackageNode* node) const;
32	virtual	bool				WillBeFirstPackageNode(
33									PackageNode* packageNode) const;
34
35	virtual	void				PrepareForRemoval();
36
37	virtual	status_t			OpenAttributeDirectory(
38									AttributeDirectoryCookie*& _cookie);
39	virtual	status_t			OpenAttribute(const char* name, int openMode,
40									AttributeCookie*& _cookie);
41
42	virtual	status_t			IndexAttribute(AttributeIndexer* indexer);
43	virtual	void*				IndexCookieForAttribute(const char* name) const;
44
45private:
46			PackageDirectoryList fPackageDirectories;
47};
48
49
50class RootDirectory : public UnpackingDirectory {
51public:
52								RootDirectory(ino_t id,
53									const timespec& modifiedTime);
54
55	virtual	timespec			ModifiedTime() const;
56
57private:
58			timespec			fModifiedTime;
59};
60
61
62#endif	// UNPACKING_DIRECTORY_H
63