blob: 1e3784760c744397b4f437f9303335c8f982102d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 Nokia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Nokia - Initial API and implementation
*******************************************************************************/
#include "TCFContext.h"
#include "ContextManager.h"
#include "AgentUtils.h"
#undef remove
/*
* Create a new context.
*/
Context::Context(const ContextID& parentID, const ContextID& internalID) {
this->internalID = internalID;
this->parentID = parentID;
Initialize();
// Don't add the context to any context cache here as there are different
// caches for different purposes.
// See ContextManager for more.
}
Context::Context(const ContextID& parentID, const ContextID& internalID, Properties& props) {
this->internalID = internalID;
this->parentID = parentID;
this->properties = props;
Initialize();
}
Context::~Context() {
properties.clear();
// delete remaining children.
//
// This makes a copy.
std::list<Context *> remainingKids = GetChildren();
for (std::list<Context *>::iterator iter = remainingKids.begin();
iter != remainingKids.end(); iter++) {
Context* kid = *iter;
delete ContextManager::findContext(kid->GetID());
}
// Remove this context from global cache.
ContextManager::removeContext(GetID());
}
void Context::Initialize()
{
SetProperty(PROP_ID, PropertyValue(internalID));
SetProperty(PROP_PARENT_ID, PropertyValue(parentID));
}
ContextID Context::GetID() const {
return internalID;
}
ContextID Context::GetParentID() const {
return parentID;
}
Properties& Context::GetProperties() {
return properties;
}
void Context::AddChild(Context* child) {
children_.push_back(child);
}
void Context::RemoveChild(Context* child) {
children_.remove(child);
}
std::list<Context*>& Context::GetChildren() {
return children_;
}
PropertyValue& Context::GetProperty(const std::string& key) {
return properties[key];
}
void Context::SetProperty(const std::string& key, const PropertyValue& value) {
properties[key] = value;
}