Exemplo n.º 1
0
/**
 * Reads a node from the document and parses into metadata.
 */
bool SessionTranslator::OnRead( Context & ctxt, const XMLElement & elem, AccessorAdaptorBase* pAdaptor )
{
	const XMLElement* pchild;
	const char* pszValue;

	if( pAdaptor == NULL)
		return false;
	Session session;

	bool retval = false;

	//Parse the AttributedObject Elements.
	if( !ReadAttributedObject( session, ctxt, elem))
		return false;

	//Done processing element, if no children, meaning this is 
	//an element referencing another element.
	if( elem.NoChildren())
		session.IsReference(true);
	else
	{
		//Parse scenario
		pchild = elem.FirstChildElement("scenario");
		pszValue = (pchild != NULL) ? pchild->GetText() : "";
		session.Scenario(pszValue );

		//Parse campaign
		pchild = elem.FirstChildElement("campaign");
		pszValue = (pchild != NULL) ? pchild->GetText() : "";
		session.Campaign(pszValue );
		
		//Parse location
		pchild = elem.FirstChildElement("location");
		try
		{
			double lat = atof( pchild->Attribute("lat"));
			double lon = atof( pchild->Attribute("lon"));
			double height= atof( pchild->Attribute("height"));
			Location loc(lat, lon, height);
			session.Location( loc);
		}
		catch(...)
		{
			throw TranslationException("Couldn't parse Location element");
		}

		//Parse contact
		pchild = elem.FirstChildElement("contact");
		pszValue = (pchild != NULL) ? pchild->GetText() : "";
		session.Contact(pszValue );

		//Parse poc
		pchild = elem.FirstChildElement("poc");
		pszValue = (pchild != NULL) ? pchild->GetText() : "";
		session.Poc(pszValue );
	}

	//Lastly set the session on the specified object.
	pAdaptor->set( &session);
	return true;
}