root/headers/os/package/RepositoryInfo.h
/*
 * Copyright 2011-2018, Haiku, Inc.
 * Distributed under the terms of the MIT License.
 */
#ifndef _PACKAGE__REPOSITORY_INFO_H_
#define _PACKAGE__REPOSITORY_INFO_H_


#include <Archivable.h>
#include <Entry.h>
#include <StringList.h>
#include <String.h>

#include <package/PackageArchitecture.h>


namespace BPackageKit {


class BRepositoryInfo : public BArchivable {
        typedef BArchivable                     inherited;

public:
                                                                BRepositoryInfo();
                                                                BRepositoryInfo(BMessage* data);
                                                                BRepositoryInfo(const BEntry& entry);
        virtual                                         ~BRepositoryInfo();

        virtual status_t                        Archive(BMessage* data, bool deep = true) const;

                        status_t                        SetTo(const BMessage* data);
                        status_t                        SetTo(const BEntry& entry);
                        status_t                        InitCheck() const;

                        const BString&          Name() const;
                        const BString&          BaseURL() const;
                        const BString&          Identifier() const;
                        const BString&          Vendor() const;
                        const BString&          Summary() const;
                        uint8                           Priority() const;
                        BPackageArchitecture    Architecture() const;
                        const BStringList&      LicenseNames() const;
                        const BStringList&      LicenseTexts() const;

                        void                            SetName(const BString& name);
                        void                            SetBaseURL(const BString& url);
                        void                            SetIdentifier(const BString& url);
                        void                            SetVendor(const BString& vendor);
                        void                            SetSummary(const BString& summary);
                        void                            SetPriority(uint8 priority);
                        void                            SetArchitecture(BPackageArchitecture arch);

                        status_t                        AddLicense(const BString& licenseName,
                                                                        const BString& licenseText);
                        void                            ClearLicenses();

public:
        static  BRepositoryInfo*        Instantiate(BMessage* data);

        static  const uint8                     kDefaultPriority;

        static  const char* const       kNameField;
        static  const char* const       kURLField;
        static  const char* const       kIdentifierField;
        static  const char* const       kBaseURLField;
        static  const char* const       kVendorField;
        static  const char*     const   kSummaryField;
        static  const char*     const   kPriorityField;
        static  const char*     const   kArchitectureField;
        static  const char*     const   kLicenseNameField;
        static  const char*     const   kLicenseTextField;

private:
                        status_t                        _SetTo(const BMessage* data);
                        status_t                        _SetTo(const BEntry& entry);

private:
                        status_t                        fInitStatus;

                        BString                         fName;
                        BString                         fBaseURL;
                                // This is the URL to a single mirror.  This field is optional.
                        BString                         fIdentifier;
                                // This is an identifier in the form of an URI for the
                                // repository, that applies across mirrors. Good choices of
                                // URI schemes are tag: and uuid:, for example.
                        BString                         fVendor;
                        BString                         fSummary;
                        uint8                           fPriority;
                        BPackageArchitecture    fArchitecture;
                        BStringList                     fLicenseNames;
                        BStringList                     fLicenseTexts;
};


}       // namespace BPackageKit


#endif // _PACKAGE__REPOSITORY_INFO_H_