/*******************************************************************************
 * Copyright (c) 2009 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  Feb, 2010
 *******************************************************************************/

#include "RegisterGroupInAgent.h"
#include "ContextManager.h"
#include "assert.h"

/**
 * Construct a register group context. The internal ID of the context will be
 * auto-generated. <br>
 * The constructed context will be added in debugged context cache. And it
 * will be added as child of the parent context.
 *
 * @param name
 *            name of the register group.
 * @param parentID
 *            internal ID of the parent (usually a register group).
 * @param props
 *            initial properties, cannot be null but can be empty. An
 *            internal copy of it will be made in this object.
 */
RegisterGroupInAgent::RegisterGroupInAgent(const std::string& name, const ContextID& parentID, Properties& props):
	Context(parentID, createInternalID(name, parentID), props)
{
	SetProperty(PROP_NAME, new PropertyValue(name));

	// We only need to add register as debugged context.
	ContextManager::addContext(this);
	Context* parent = ContextManager::findContext(parentID);

	if (parent != NULL)
		parent->AddChild(this);
	else
		// parent is not cached, should not happen.
		assert (false);
}

std::string& RegisterGroupInAgent::createInternalID(const std::string& name, const std::string& parentID) {
	std::string* ret = new std::string(parentID);
	ret->append(".rg");
	ret->append(name);
	return *ret;
}
