/**
 * Reads a node from the document and parses into metadata.
 */
bool SessionTranslator::OnRead( Context & ctxt, const XMLElement & elem, AccessorAdaptorBase* pAdaptor )
{
	const XMLElement* pchild;
	bool bRetVal = true;
	Session session;

	if( pAdaptor == NULL)
		return 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 TOA	[0..1]
		pchild = elem.FirstChildElement("toa");
		if( pchild != NULL)
		{
			session.Toa(Date(pchild->GetText()));
		}

		//Parse Position [0..1]
		pchild = elem.FirstChildElement("position");
		if( pchild != NULL)
		{
			AccessorAdaptor<Session, Position> adapt(&session, &Session::Position);
			bRetVal &= ReadElement( session, ctxt, *pchild, &adapt);
		}

		//TODO Parse attitude [0..1]

		//Parse poc [0..1]
		session.Poc( ReadFirstElement("poc", elem, false, ""));

		//Parse contact [0..1]
		session.Contact( ReadFirstElement("contact", elem, false, ""));

		//Parse campaign [0..1]
		session.Campaign( ReadFirstElement("campaign", elem, false, ""));

		//Parse scenario [0..1]
		session.Scenario( ReadFirstElement("scenario", elem, false, ""));

		//Parse Systems [0..1]
		bRetVal &= ReadList<System>(session.Systems(), "system", ctxt, elem);
    }

	//Lastly set the session on the specified object.
	pAdaptor->set( &session);
	return bRetVal;
}
Esempio n. 2
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;
}