root/src/apps/haikudepot/packagemodel/PackageInfo.h
/*
 * Copyright 2013-2014, Stephan Aßmus <superstippi@gmx.de>.
 * Copyright 2016-2025, Andrew Lindesay <apl@lindesay.co.nz>.
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#ifndef PACKAGE_INFO_H
#define PACKAGE_INFO_H


#include <Referenceable.h>

#include "Language.h"
#include "List.h"
#include "PackageClassificationInfo.h"
#include "PackageCoreInfo.h"
#include "PackageLocalInfo.h"
#include "PackageLocalizedText.h"
#include "PackagePublisherInfo.h"
#include "PackageScreenshotInfo.h"
#include "PackageUserRatingInfo.h"
#include "ScreenshotInfo.h"


using BPackageKit::BPackageInfo;


class PackageInfoBuilder;


/*!     Instances of this class should not be created directly; instead use the
        PackageInfoBuilder class as a builder-constructor.
*/
class PackageInfo : public BReferenceable {
friend class PackageInfoBuilder;

public:
                                                                PackageInfo();
                                                                PackageInfo(const PackageInfo& other);

                        bool                            operator==(const PackageInfo& other) const;
                        bool                            operator!=(const PackageInfo& other) const;

                        uint32                          ChangeMask(const PackageInfo& other) const;

                        const BString&          Name() const;
                        const PackageCoreInfoRef
                                                                CoreInfo() const;
                        const PackageLocalizedTextRef
                                                                LocalizedText() const;
                        const PackageClassificationInfoRef
                                                                PackageClassificationInfo() const;
                        const PackageUserRatingInfoRef
                                                                UserRatingInfo() const;
                        const PackageLocalInfoRef
                                                                LocalInfo() const;
                        const PackageScreenshotInfoRef
                                                                ScreenshotInfo() const;

private:

                        void                            SetName(const BString& value);
                        void                            SetCoreInfo(PackageCoreInfoRef value);
                        void                            SetLocalizedText(PackageLocalizedTextRef value);
                        void                            SetPackageClassificationInfo(PackageClassificationInfoRef value);
                        void                            SetUserRatingInfo(PackageUserRatingInfoRef& userRatingInfo);
                        void                            SetLocalInfo(PackageLocalInfoRef& localInfo);
                        void                            SetScreenshotInfo(PackageScreenshotInfoRef value);

private:
                        BString                         fName;

                        PackageCoreInfoRef      fCoreInfo;
                        PackageLocalizedTextRef
                                                                fLocalizedText;
                        PackageClassificationInfoRef
                                                                fClassificationInfo;
                        PackageScreenshotInfoRef
                                                                fScreenshotInfo;
                        PackageUserRatingInfoRef
                                                                fUserRatingInfo;
                        PackageLocalInfoRef     fLocalInfo;
};


typedef BReference<PackageInfo> PackageInfoRef;


class PackageInfoBuilder
{
public:
                                                                PackageInfoBuilder(const BString& name);
                                                                PackageInfoBuilder(const PackageInfoRef& value);
                                                                PackageInfoBuilder(const PackageInfo& value);
        virtual                                         ~PackageInfoBuilder();

                        PackageInfoRef          BuildRef();

                        PackageInfoBuilder&
                                                                WithCoreInfo(PackageCoreInfoRef value);
                        PackageInfoBuilder&
                                                                WithLocalizedText(PackageLocalizedTextRef value);
                        PackageInfoBuilder&
                                                                WithPackageClassificationInfo(PackageClassificationInfoRef value);
                        PackageInfoBuilder&
                                                                WithUserRatingInfo(PackageUserRatingInfoRef userRatingInfo);
                        PackageInfoBuilder&
                                                                WithLocalInfo(PackageLocalInfoRef localInfo);
                        PackageInfoBuilder&
                                                                WithScreenshotInfo(PackageScreenshotInfoRef value);

private:
                        void                            _Init(const PackageInfo* value);

private:
                        BString                         fName;

                        PackageCoreInfoRef      fCoreInfo;
                        PackageLocalizedTextRef
                                                                fLocalizedText;
                        PackageClassificationInfoRef
                                                                fClassificationInfo;
                        PackageScreenshotInfoRef
                                                                fScreenshotInfo;
                        PackageUserRatingInfoRef
                                                                fUserRatingInfo;
                        PackageLocalInfoRef     fLocalInfo;
};


#endif // PACKAGE_INFO_H