1/*
2 * Copyright 2007, Ingo Weinhold, bonefish@users.sf.net.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _DISK_SYSTEM_ADD_ON_H
6#define _DISK_SYSTEM_ADD_ON_H
7
8#include <DiskDeviceDefs.h>
9#include <String.h>
10#include <SupportDefs.h>
11
12
13class BPartitionParameterEditor;
14class BList;
15class BMutablePartition;
16class BPartitionHandle;
17class BPartitioningInfo;
18
19
20class BDiskSystemAddOn {
21public:
22								BDiskSystemAddOn(const char* name,
23									uint32 flags);
24	virtual						~BDiskSystemAddOn();
25
26			const char*			Name() const;
27			uint32				Flags() const;
28
29	virtual	status_t			CreatePartitionHandle(
30									BMutablePartition* partition,
31									BPartitionHandle** handle) = 0;
32
33	virtual	bool				CanInitialize(
34									const BMutablePartition* partition);
35	virtual	status_t			ValidateInitialize(
36									const BMutablePartition* partition,
37									BString* name, const char* parameters);
38	virtual	status_t			Initialize(BMutablePartition* partition,
39									const char* name, const char* parameters,
40									BPartitionHandle** handle);
41
42	virtual	status_t			GetParameterEditor(
43									B_PARAMETER_EDITOR_TYPE type,
44									BPartitionParameterEditor** editor);
45	virtual	status_t			GetTypeForContentType(const char* contentType,
46									BString* type);
47	virtual	bool				IsSubSystemFor(const BMutablePartition* child);
48
49private:
50			BString				fName;
51			uint32				fFlags;
52};
53
54
55class BPartitionHandle {
56public:
57								BPartitionHandle(BMutablePartition* partition);
58	virtual						~BPartitionHandle();
59
60			BMutablePartition*	Partition() const;
61
62	virtual	uint32				SupportedOperations(uint32 mask);
63	virtual	uint32				SupportedChildOperations(
64									const BMutablePartition* child,
65									uint32 mask);
66
67	virtual	bool				SupportsInitializingChild(
68									const BMutablePartition* child,
69									const char* diskSystem);
70
71	virtual	status_t			GetNextSupportedType(
72									const BMutablePartition* child,
73									int32* cookie, BString* type);
74									// child can be NULL
75
76	virtual	status_t			GetPartitioningInfo(BPartitioningInfo* info);
77
78
79	virtual	status_t			Defragment();
80	virtual	status_t			Repair(bool checkOnly);
81
82	virtual	status_t			ValidateResize(off_t* size);
83	virtual	status_t			ValidateResizeChild(
84									const BMutablePartition* child,
85									off_t* size);
86	virtual	status_t			Resize(off_t size);
87	virtual	status_t			ResizeChild(BMutablePartition* child,
88									off_t size);
89
90	virtual	status_t			ValidateMove(off_t* offset);
91	virtual	status_t			ValidateMoveChild(
92									const BMutablePartition* child,
93									off_t* offset);
94	virtual	status_t			Move(off_t offset);
95	virtual	status_t			MoveChild(BMutablePartition* child,
96									off_t offset);
97
98	virtual	status_t			ValidateSetContentName(BString* name);
99	virtual	status_t			ValidateSetName(const BMutablePartition* child,
100									BString* name);
101	virtual	status_t			SetContentName(const char* name);
102	virtual	status_t			SetName(BMutablePartition* child,
103									const char* name);
104
105	virtual	status_t			ValidateSetType(const BMutablePartition* child,
106									const char* type);
107	virtual	status_t			SetType(BMutablePartition* child,
108									const char* type);
109
110	virtual	status_t			GetContentParameterEditor(
111									BPartitionParameterEditor** editor);
112
113	virtual	status_t			ValidateSetContentParameters(
114									const char* parameters);
115	virtual	status_t			ValidateSetParameters(
116									const BMutablePartition* child,
117									const char* parameters);
118	virtual	status_t			SetContentParameters(const char* parameters);
119	virtual	status_t			SetParameters(BMutablePartition* child,
120									const char* parameters);
121
122	virtual	status_t			GetParameterEditor(
123									B_PARAMETER_EDITOR_TYPE type,
124									BPartitionParameterEditor** editor);
125	virtual	status_t			ValidateCreateChild(off_t* offset,
126									off_t* size, const char* type,
127									BString* name, const char* parameters);
128	virtual	status_t			CreateChild(off_t offset, off_t size,
129									const char* type, const char* name,
130									const char* parameters,
131									BMutablePartition** child);
132
133	virtual	status_t			DeleteChild(BMutablePartition* child);
134
135private:
136			BMutablePartition*	fPartition;
137};
138
139
140extern "C" status_t get_disk_system_add_ons(BList* addOns);
141	// Implemented in the add-on
142
143#endif	// _DISK_SYSTEM_ADD_ON_H
144