1/*
2 * Copyright 2011, Oliver Tappe <zooey@hirschkaefer.de>
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE__HPKG__PRIVATE__REPOSITORY_WRITER_IMPL_H_
6#define _PACKAGE__HPKG__PRIVATE__REPOSITORY_WRITER_IMPL_H_
7
8
9#include <Entry.h>
10
11#include <package/hpkg/PackageContentHandler.h>
12#include <package/hpkg/RepositoryWriter.h>
13#include <package/hpkg/WriterImplBase.h>
14#include <package/PackageInfo.h>
15
16
17namespace BPackageKit {
18
19
20namespace BHPKG {
21
22
23class BPackageEntry;
24class BPackageEntryAttribute;
25struct BPackageInfoAttributeValue;
26
27
28namespace BPrivate {
29
30
31struct hpkg_header;
32
33class RepositoryWriterImpl : public WriterImplBase {
34	typedef	WriterImplBase		inherited;
35
36public:
37								RepositoryWriterImpl(
38									BRepositoryWriterListener* listener,
39									BRepositoryInfo* repositoryInfo);
40								~RepositoryWriterImpl();
41
42			status_t			Init(const char* fileName);
43			status_t			AddPackage(const BEntry& packageEntry);
44			status_t			AddPackageInfo(const BPackageInfo& packageInfo);
45			status_t			Finish();
46
47private:
48			status_t			_Init(const char* fileName);
49			status_t			_AddPackage(const BEntry& packageEntry);
50			status_t			_AddPackageInfo(
51									const BPackageInfo& packageInfo);
52			status_t			_Finish();
53
54			status_t			_RegisterCurrentPackageInfo();
55			status_t			_WriteRepositoryInfo(hpkg_repo_header& header,
56									uint64& _length);
57			void				_WritePackageAttributes(
58									hpkg_repo_header& header, uint64& _length);
59
60			struct PackageNameSet;
61
62private:
63			BRepositoryWriterListener*	fListener;
64
65			BRepositoryInfo*	fRepositoryInfo;
66
67			BPackageInfo		fPackageInfo;
68			uint32				fPackageCount;
69			PackageNameSet*		fPackageNames;
70};
71
72
73}	// namespace BPrivate
74
75}	// namespace BHPKG
76
77}	// namespace BPackageKit
78
79
80#endif	// _PACKAGE__HPKG__PRIVATE__REPOSITORY_WRITER_IMPL_H_
81