diff --git a/headers/build/os/package/PackageInfoContentHandler.h b/headers/build/os/package/PackageInfoContentHandler.h new file mode 100644 index 0000000000..2726b6bd0f --- /dev/null +++ b/headers/build/os/package/PackageInfoContentHandler.h @@ -0,0 +1 @@ +#include <../os/package/PackageInfoContentHandler.h> diff --git a/headers/os/package/PackageInfoContentHandler.h b/headers/os/package/PackageInfoContentHandler.h new file mode 100644 index 0000000000..b186a0f94a --- /dev/null +++ b/headers/os/package/PackageInfoContentHandler.h @@ -0,0 +1,51 @@ +/* + * Copyright 2011, Haiku, Inc. + * Distributed under the terms of the MIT License. + */ +#ifndef _PACKAGE__PACKAGE_INFO_CONTENT_HANDLER_H_ +#define _PACKAGE__PACKAGE_INFO_CONTENT_HANDLER_H_ + + +#include + + +namespace BPackageKit { + + +class BPackageInfo; + + +namespace BHPKG { + class BErrorOutput; +} + + +class BPackageInfoContentHandler : public BHPKG::BPackageContentHandler { +public: + BPackageInfoContentHandler( + BPackageInfo& packageInfo, + BHPKG::BErrorOutput* errorOutput = NULL); + virtual ~BPackageInfoContentHandler(); + + virtual status_t HandleEntry(BHPKG::BPackageEntry* entry); + virtual status_t HandleEntryAttribute( + BHPKG::BPackageEntry* entry, + BHPKG::BPackageEntryAttribute* attribute); + virtual status_t HandleEntryDone(BHPKG::BPackageEntry* entry); + + virtual status_t HandlePackageAttribute( + const BHPKG::BPackageInfoAttributeValue& + value); + + virtual void HandleErrorOccurred(); + +protected: + BPackageInfo& fPackageInfo; + BHPKG::BErrorOutput* fErrorOutput; +}; + + +} // namespace BPackageKit + + +#endif // _PACKAGE__PACKAGE_INFO_CONTENT_HANDLER_H_ diff --git a/src/build/libpackage/Jamfile b/src/build/libpackage/Jamfile index 3bccce80ba..7b7d56f72f 100644 --- a/src/build/libpackage/Jamfile +++ b/src/build/libpackage/Jamfile @@ -68,6 +68,7 @@ BuildPlatformSharedLibrary libpackage_build.so Job.cpp JobQueue.cpp PackageInfo.cpp + PackageInfoContentHandler.cpp PackageInfoSet.cpp PackageResolvable.cpp PackageResolvableExpression.cpp diff --git a/src/kits/package/Jamfile b/src/kits/package/Jamfile index 309951fad7..a73037b36f 100644 --- a/src/kits/package/Jamfile +++ b/src/kits/package/Jamfile @@ -55,6 +55,7 @@ SharedLibrary libpackage.so Job.cpp JobQueue.cpp PackageInfo.cpp + PackageInfoContentHandler.cpp PackageInfoSet.cpp PackageResolvable.cpp PackageResolvableExpression.cpp diff --git a/src/kits/package/PackageInfoContentHandler.cpp b/src/kits/package/PackageInfoContentHandler.cpp new file mode 100644 index 0000000000..ecd6857dcd --- /dev/null +++ b/src/kits/package/PackageInfoContentHandler.cpp @@ -0,0 +1,161 @@ +/* + * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. + * Distributed under the terms of the MIT License. + */ + + +#include + +#include +#include +#include + + +namespace BPackageKit { + + +using namespace BHPKG; + + +BPackageInfoContentHandler::BPackageInfoContentHandler( + BPackageInfo& packageInfo, BErrorOutput* errorOutput) + : + fPackageInfo(packageInfo), + fErrorOutput(errorOutput) +{ +} + + +BPackageInfoContentHandler::~BPackageInfoContentHandler() +{ +} + + +status_t +BPackageInfoContentHandler::HandleEntry(BPackageEntry* entry) +{ + return B_OK; +} + + +status_t +BPackageInfoContentHandler::HandleEntryAttribute(BPackageEntry* entry, + BPackageEntryAttribute* attribute) +{ + return B_OK; +} + + +status_t +BPackageInfoContentHandler::HandleEntryDone(BPackageEntry* entry) +{ + return B_OK; +} + + +status_t +BPackageInfoContentHandler::HandlePackageAttribute( + const BPackageInfoAttributeValue& value) +{ + switch (value.attributeID) { + case B_PACKAGE_INFO_NAME: + fPackageInfo.SetName(value.string); + break; + + case B_PACKAGE_INFO_SUMMARY: + fPackageInfo.SetSummary(value.string); + break; + + case B_PACKAGE_INFO_DESCRIPTION: + fPackageInfo.SetDescription(value.string); + break; + + case B_PACKAGE_INFO_VENDOR: + fPackageInfo.SetVendor(value.string); + break; + + case B_PACKAGE_INFO_PACKAGER: + fPackageInfo.SetPackager(value.string); + break; + + case B_PACKAGE_INFO_FLAGS: + fPackageInfo.SetFlags(value.unsignedInt); + break; + + case B_PACKAGE_INFO_ARCHITECTURE: + fPackageInfo.SetArchitecture( + (BPackageArchitecture)value.unsignedInt); + break; + + case B_PACKAGE_INFO_VERSION: + fPackageInfo.SetVersion(value.version); + break; + + case B_PACKAGE_INFO_COPYRIGHTS: + fPackageInfo.AddCopyright(value.string); + break; + + case B_PACKAGE_INFO_LICENSES: + fPackageInfo.AddLicense(value.string); + break; + + case B_PACKAGE_INFO_PROVIDES: + fPackageInfo.AddProvides(value.resolvable); + break; + + case B_PACKAGE_INFO_REQUIRES: + fPackageInfo.AddRequires(value.resolvableExpression); + break; + + case B_PACKAGE_INFO_SUPPLEMENTS: + fPackageInfo.AddSupplements(value.resolvableExpression); + break; + + case B_PACKAGE_INFO_CONFLICTS: + fPackageInfo.AddConflicts(value.resolvableExpression); + break; + + case B_PACKAGE_INFO_FRESHENS: + fPackageInfo.AddFreshens(value.resolvableExpression); + break; + + case B_PACKAGE_INFO_REPLACES: + fPackageInfo.AddReplaces(value.string); + break; + + case B_PACKAGE_INFO_URLS: + fPackageInfo.AddURL(value.string); + break; + + case B_PACKAGE_INFO_SOURCE_URLS: + fPackageInfo.AddSourceURL(value.string); + break; + + case B_PACKAGE_INFO_CHECKSUM: + fPackageInfo.SetChecksum(value.string); + break; + + case B_PACKAGE_INFO_INSTALL_PATH: + fPackageInfo.SetInstallPath(value.string); + break; + + default: + if (fErrorOutput != NULL) { + fErrorOutput->PrintError( + "Invalid package attribute section: unexpected package " + "attribute id %d encountered\n", value.attributeID); + } + return B_BAD_DATA; + } + + return B_OK; +} + + +void +BPackageInfoContentHandler::HandleErrorOccurred() +{ +} + + +} // namespace BPackageKit diff --git a/src/kits/package/hpkg/RepositoryWriterImpl.cpp b/src/kits/package/hpkg/RepositoryWriterImpl.cpp index f6e28e7d7f..8cd6aa0b67 100644 --- a/src/kits/package/hpkg/RepositoryWriterImpl.cpp +++ b/src/kits/package/hpkg/RepositoryWriterImpl.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -85,12 +86,11 @@ private: }; -struct PackageContentHandler : public BPackageContentHandler { +struct PackageContentHandler : public BPackageInfoContentHandler { PackageContentHandler(BErrorOutput* errorOutput, BPackageInfo* packageInfo, int packageFileFD, BRepositoryInfo* repositoryInfo) : - fErrorOutput(errorOutput), - fPackageInfo(packageInfo), + BPackageInfoContentHandler(*packageInfo, errorOutput), fPackageFileReader(packageFileFD), fRepositoryInfo(repositoryInfo) { @@ -100,7 +100,7 @@ struct PackageContentHandler : public BPackageContentHandler { { // if license must be approved, read any license files from package such // that those can be stored in the repository later - if ((fPackageInfo->Flags() & B_PACKAGE_FLAG_APPROVE_LICENSE) == 0 + if ((fPackageInfo.Flags() & B_PACKAGE_FLAG_APPROVE_LICENSE) == 0 || entry == NULL) return B_OK; @@ -160,108 +160,11 @@ struct PackageContentHandler : public BPackageContentHandler { return B_OK; } - virtual status_t HandlePackageAttribute( - const BPackageInfoAttributeValue& value) - { - switch (value.attributeID) { - case B_PACKAGE_INFO_NAME: - fPackageInfo->SetName(value.string); - break; - - case B_PACKAGE_INFO_SUMMARY: - fPackageInfo->SetSummary(value.string); - break; - - case B_PACKAGE_INFO_DESCRIPTION: - fPackageInfo->SetDescription(value.string); - break; - - case B_PACKAGE_INFO_VENDOR: - fPackageInfo->SetVendor(value.string); - break; - - case B_PACKAGE_INFO_PACKAGER: - fPackageInfo->SetPackager(value.string); - break; - - case B_PACKAGE_INFO_FLAGS: - fPackageInfo->SetFlags(value.unsignedInt); - break; - - case B_PACKAGE_INFO_ARCHITECTURE: - fPackageInfo->SetArchitecture( - (BPackageArchitecture)value.unsignedInt); - break; - - case B_PACKAGE_INFO_VERSION: - fPackageInfo->SetVersion(value.version); - break; - - case B_PACKAGE_INFO_COPYRIGHTS: - fPackageInfo->AddCopyright(value.string); - break; - - case B_PACKAGE_INFO_LICENSES: - fPackageInfo->AddLicense(value.string); - break; - - case B_PACKAGE_INFO_PROVIDES: - fPackageInfo->AddProvides(value.resolvable); - break; - - case B_PACKAGE_INFO_REQUIRES: - fPackageInfo->AddRequires(value.resolvableExpression); - break; - - case B_PACKAGE_INFO_SUPPLEMENTS: - fPackageInfo->AddSupplements(value.resolvableExpression); - break; - - case B_PACKAGE_INFO_CONFLICTS: - fPackageInfo->AddConflicts(value.resolvableExpression); - break; - - case B_PACKAGE_INFO_FRESHENS: - fPackageInfo->AddFreshens(value.resolvableExpression); - break; - - case B_PACKAGE_INFO_REPLACES: - fPackageInfo->AddReplaces(value.string); - break; - - case B_PACKAGE_INFO_URLS: - fPackageInfo->AddURL(value.string); - break; - - case B_PACKAGE_INFO_SOURCE_URLS: - fPackageInfo->AddSourceURL(value.string); - break; - - case B_PACKAGE_INFO_CHECKSUM: - fPackageInfo->SetChecksum(value.string); - break; - - case B_PACKAGE_INFO_INSTALL_PATH: - fPackageInfo->SetInstallPath(value.string); - break; - - default: - fErrorOutput->PrintError( - "Invalid package attribute section: unexpected package " - "attribute id %d encountered\n", value.attributeID); - return B_BAD_DATA; - } - - return B_OK; - } - virtual void HandleErrorOccurred() { } private: - BErrorOutput* fErrorOutput; - BPackageInfo* fPackageInfo; BPackageReader* fPackageReader; BFDDataReader fPackageFileReader; BRepositoryInfo* fRepositoryInfo;