root/src/kits/debugger/settings/TeamFileManagerSettings.cpp
/*
 * Copyright 2013, Rene Gollent, rene@gollent.com.
 * Distributed under the terms of the MIT License.
 */
#include "TeamFileManagerSettings.h"

TeamFileManagerSettings::TeamFileManagerSettings()
        :
        fValues()
{
}


TeamFileManagerSettings::~TeamFileManagerSettings()
{
}


TeamFileManagerSettings&
TeamFileManagerSettings::operator=(const TeamFileManagerSettings& other)
{
        fValues = other.fValues;

        return *this;
}


const char*
TeamFileManagerSettings::ID() const
{
        return "FileManager";
}


status_t
TeamFileManagerSettings::SetTo(const BMessage& archive)
{
        try {
                fValues = archive;
        } catch (...) {
                return B_NO_MEMORY;
        }

        return B_OK;
}


status_t
TeamFileManagerSettings::WriteTo(BMessage& archive) const
{
        try {
                archive = fValues;
        } catch (...) {
                return B_NO_MEMORY;
        }

        return B_OK;
}


int32
TeamFileManagerSettings::CountSourceMappings() const
{
        type_code type;
        int32 count = 0;

        if (fValues.GetInfo("source:mapping", &type, &count) == B_OK)
                return count;

        return 0;
}


status_t
TeamFileManagerSettings::AddSourceMapping(const BString& sourcePath,
        const BString& locatedPath)
{
        BMessage mapping;
        if (mapping.AddString("source:path", sourcePath) != B_OK
                || mapping.AddString("source:locatedpath", locatedPath) != B_OK
                || fValues.AddMessage("source:mapping", &mapping) != B_OK) {
                return B_NO_MEMORY;
        }

        return B_OK;
}


status_t
TeamFileManagerSettings::RemoveSourceMappingAt(int32 index)
{
        return fValues.RemoveData("source:mapping", index);
}


status_t
TeamFileManagerSettings::GetSourceMappingAt(int32 index, BString& sourcePath,
        BString& locatedPath)
{
        BMessage mapping;
        status_t error = fValues.FindMessage("source:mapping", index, &mapping);
        if (error != B_OK)
                return error;

        error = mapping.FindString("source:path", &sourcePath);
        if (error != B_OK)
                return error;

        return mapping.FindString("source:locatedpath", &locatedPath);
}


TeamFileManagerSettings*
TeamFileManagerSettings::Clone() const
{
        TeamFileManagerSettings* settings = new(std::nothrow)
                TeamFileManagerSettings();

        if (settings == NULL)
                return NULL;

        if (settings->SetTo(fValues) != B_OK) {
                delete settings;
                return NULL;
        }

        return settings;
}