root/headers/private/storage/mime/InstalledTypes.h
/*
 * Copyright 2002-2006, Haiku.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Tyler Dauwalder
 *              Ingo Weinhold, bonefish@users.sf.net
 *              Axel Dörfler, axeld@pinc-software.de
 */
#ifndef _MIME_INSTALLED_TYPES_H
#define _MIME_INSTALLED_TYPES_H


#include <map>
#include <string>

#include <SupportDefs.h>

#include <mime/Supertype.h>


class BMessage;

namespace BPrivate {
namespace Storage {
namespace Mime {


class DatabaseLocation;


class InstalledTypes {
        public:
                InstalledTypes(DatabaseLocation* databaseLocation);
                ~InstalledTypes();

                status_t GetInstalledTypes(BMessage *types);
                status_t GetInstalledTypes(const char *supertype, BMessage *types);
                status_t GetInstalledSupertypes(BMessage *types);

                status_t AddType(const char *type);
                status_t RemoveType(const char *type);

        private:
                status_t _AddSupertype(const char* super);
                status_t _AddSubtype(const char *super, const char *sub);               
                status_t _AddSubtype(Supertype &super, const char *sub);

                status_t _RemoveSupertype(const char *super);
                status_t _RemoveSubtype(const char *super, const char *sub);            

                void _Unset();
                void _ClearCachedMessages();

                status_t _CreateMessageWithTypes(BMessage **result) const;
                status_t _CreateMessageWithSupertypes(BMessage **result) const;
                void _FillMessageWithSupertypes(BMessage *msg);

                status_t _BuildInstalledTypesList();

private:
                DatabaseLocation* fDatabaseLocation;
                std::map<std::string, Supertype> fSupertypes;
                BMessage *fCachedMessage;       
                BMessage *fCachedSupertypesMessage;
                bool fHaveDoneFullBuild;
};

} // namespace Mime
} // namespace Storage
} // namespace BPrivate

#endif  // _MIME_INSTALLED_TYPES_H