[GME-commit] GMESRC/GME/Parser MgaParser.cpp,1.25,1.26 MgaParser.h,1.10,1.11 MgaParserBC.cpp,1.2,1.3 MgaParserSC.cpp,1.1,1.2

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Wed Sep 29 17:02:00 CDT 2004


Update of /var/lib/gme/GMESRC/GME/Parser
In directory braindrain:/tmp/cvs-serv26041

Modified Files:
	MgaParser.cpp MgaParser.h MgaParserBC.cpp MgaParserSC.cpp 
Log Message:
After Smartcopy parse a 2nd step done to reestablish relationships.


CVS User: zolmol

Index: MgaParser.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaParser.cpp,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** MgaParser.cpp	27 Sep 2004 21:33:01 -0000	1.25
--- MgaParser.cpp	29 Sep 2004 21:01:58 -0000	1.26
***************
*** 1566,1618 ****
  	}
  
- #if(0)
- 	/*
- 	//- orroekprofkpeok
- 	CComObjPtr<IMgaObject> target_obj = target;
- 	CComObjPtr<IMgaProject> p;
- 	COMTHROW( target_obj->get_Project(PutOut(p)) );
- 	ASSERT( p != NULL );
- 	COMTHROW( p->CreateTerritory(NULL, PutOut(territory), NULL) );
- 	COMTHROW( p->BeginTransaction(territory, TRANSACTION_NON_NESTED) );
- 
- 	CComObjPtr<IMgaObject> target_in_terr;
- 	COMTHROW(territory->OpenObj(target_obj, PutOut(target_in_terr)));
- 
- 	CComObjPtr<IMgaModel> model;
- 	CComObjPtr<IMgaFolder> folder;
- 
- 	target_in_terr.QueryInterface(model);
- 	target_in_terr.QueryInterface(folder);
- 
- 
- 	CComBstrObj kind_name;
- 	if( model)
- 	{
- 		CComObjPtr<IMgaMetaFCO> k_meta;
- 		COMTHROW( model->get_Meta( PutOut( k_meta)));
- 		COMTHROW( k_meta->get_Name( PutOut(kind_name)) );
- 	}
- 	else if( folder)
- 	{
- 		CComObjPtr<IMgaMetaFolder> f_meta;
- 		COMTHROW( folder->get_MetaFolder( PutOut( f_meta)));
- 		COMTHROW( f_meta->get_Name( PutOut(kind_name)) );
- 	}
- 	COMTHROW( p->CommitTransaction() );
- 	project = NULL;
- 		
- 	// check if the accepting kind exists among the accepting kinds
- 	string kind_nm, acc_kinds;
- 	CopyTo( kind_name, kind_nm);
- 
- 	CComBstrObj acckinds = *closacckind;
- 	CopyTo( acckinds, acc_kinds);
- 
- 	*is_acceptable = VARIANT_FALSE;
- 	if( findExact( acc_kinds, kind_nm))
- 		*is_acceptable = VARIANT_TRUE;
- */
- //-
- #endif
  	return S_OK;
  }
--- 1566,1569 ----

Index: MgaParser.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaParser.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** MgaParser.h	27 Sep 2004 21:33:01 -0000	1.10
--- MgaParser.h	29 Sep 2004 21:01:58 -0000	1.11
***************
*** 12,15 ****
--- 12,26 ----
  #include <list>
  #include <vector>
+ #include <map>
+ 
+ class CompareCComObj
+ {
+  public:
+ 	 bool operator()( const CComObjPtr<IMgaFCO>& p1, const CComObjPtr<IMgaFCO>& p2)
+ 	 {
+ 		 return p1.p < p2.p;
+ 	 }
+ };
+ 
  // --------------------------- CMgaParser
  
***************
*** 162,165 ****
--- 173,181 ----
  	vector< CComObjPtr<IMgaObject> > m_parsed3; // the archetype
  
+ 	bool isNeedFor2ndStep();
+ 	void tryToFindMissedReferreds();
+ 	void tryToFindMissedSetMembers();
+ 	map< CComObjPtr<IMgaFCO>, string, CompareCComObj > m_notFoundReferredObject;
+ 	map< CComObjPtr<IMgaFCO>, vector< string >, CompareCComObj > m_notFoundSetMembers;
  	int  m_clVer;
  	string m_clVerStr;

Index: MgaParserBC.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaParserBC.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** MgaParserBC.cpp	28 Sep 2004 22:44:52 -0000	1.2
--- MgaParserBC.cpp	29 Sep 2004 21:01:58 -0000	1.3
***************
*** 218,223 ****
  		CopyTo( kind_name, kind_nm);
  
! 		if( !findExact( *acceptingkinds, kind_nm))
  			HR_THROW(E_INVALID_MGA);
  
  	}
--- 218,236 ----
  		CopyTo( kind_name, kind_nm);
  
! 		if( acceptingkinds->empty()) // if "" token avoid check
! 		{
! 			CComBSTR bstr("[Parser] \"clipboard\" element has empty \"acceptingkind\" attribute.");
! 			if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_WARNING));
! 		}
! 		else if( !findExact( *acceptingkinds, kind_nm))
! 		{
! 			CComBSTR bstr("[Parser] Target kind \"");
! 			bstr.Append( kind_nm.c_str());
! 			bstr.Append("\" not found among accepting kinds: \"");
! 			bstr.Append( acceptingkinds->c_str());
! 			bstr.Append("\". If you'd like to avoid this check remove or modify to \"\" the \"acceptingkind\" attribute of \"clipboard\" element in an editor.");
! 			if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
  			HR_THROW(E_INVALID_MGA);
+ 		}
  
  	}

Index: MgaParserSC.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaParserSC.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** MgaParserSC.cpp	27 Sep 2004 21:33:01 -0000	1.1
--- MgaParserSC.cpp	29 Sep 2004 21:01:58 -0000	1.2
***************
*** 102,105 ****
--- 102,116 ----
  			ASSERT( elements.empty() );
  			ranges.clear();
+ 
+ 			if( isNeedFor2ndStep())
+ 			{
+ 				CComBSTR bstr1("[Smartcopy Parser] Some objects were not found during parsing.");
+ 				CComBSTR bstr2("[Smartcopy Parser] Invoking 2nd step...");
+ 				if( m_GME) COMTHROW( m_GME->ConsoleMessage( bstr1, MSG_ERROR));
+ 				if( m_GME) COMTHROW( m_GME->ConsoleMessage( bstr2, MSG_INFO));
+ 				
+ 				tryToFindMissedReferreds();
+ 				tryToFindMissedSetMembers();
+ 			}
  		}
  	    catch(const XMLException &e)
***************
*** 556,559 ****
--- 567,573 ----
  				bstr.Append( makeViewable( *s).c_str());
  				if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
+ 
+ 				// store data to process in 2nd step
+ 				m_notFoundReferredObject[ fco ] = *s;
  			}
  		}
***************
*** 679,682 ****
--- 693,699 ----
  				bstr.Append( makeViewable( member_str).c_str());
  				if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
+ 
+ 				// insert data to process in 2nd step
+ 				m_notFoundSetMembers[ fco ].push_back( member_str);
  			}
  
***************
*** 748,749 ****
--- 765,927 ----
  	writeInfo( parent_obj, CComObjPtr<IMgaObject>( cur_conn), CComObjPtr<IMgaObject>(), s && d );
  }
+ 
+ bool CMgaParser::isNeedFor2ndStep()
+ {
+ 	return !m_notFoundReferredObject.empty() || !m_notFoundSetMembers.empty();
+ }
+ 
+ void CMgaParser::tryToFindMissedReferreds()
+ {
+ 	map< CComObjPtr<IMgaFCO>, string >::iterator it = m_notFoundReferredObject.begin();
+ 	map< CComObjPtr<IMgaFCO>, string >::iterator itend = m_notFoundReferredObject.end();
+ 	for( ; it != itend; ++it)
+ 	{
+ 		if( !it->first) continue;
+ 		bool error = false;
+ 
+ 		CComObjPtr<IMgaObject> target;
+ 		findObjOnRelPath( CComObjPtr<IMgaObject>( it->first), it->second, target, "referred object");
+ 		if( target)
+ 		{
+ 			CComObjPtr<IMgaReference> ref;
+ 			COMTHROW( it->first.QueryInterface( ref));
+ 			CComObjPtr<IMgaFCO> fco_target;
+ 			COMTHROW( target.QueryInterface( fco_target));
+ 
+ 			if( ref && fco_target)
+ 			{
+ 				COMTHROW( ref->put_Referred( fco_target));
+ 
+ 				CComBSTR id1, nm1, id2, nm2, bstr("[Smartcopy Parser] Reference <A HREF=\"mga:");
+ 				COMTHROW( ref->get_ID( &id1));
+ 				COMTHROW( ref->get_Name( &nm1));
+ 				COMTHROW( fco_target->get_ID( &id2));
+ 				COMTHROW( fco_target->get_Name( &nm2));
+ 
+ 				bstr.AppendBSTR( id1);
+ 				bstr.Append("\">");
+ 				if( nm1.Length() != 0)
+ 					bstr.AppendBSTR( nm1);
+ 				else
+ 					bstr.Append("emptyname");
+ 
+ 				bstr.Append("</A> set to refer to <A HREF=\"mga:");
+ 				bstr.AppendBSTR( id2);
+ 				bstr.Append("\">");
+ 				if( nm2.Length() != 0)
+ 					bstr.AppendBSTR( nm2);
+ 				else
+ 					bstr.Append("emptyname");
+ 
+ 				bstr.Append("</A> in 2nd step successfully.");
+ 				if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_INFO));
+ 			}
+ 			else
+ 				error = true;
+ 		}
+ 		else 
+ 			error = true;
+ 
+ 		if( error)
+ 		{
+ 			CComBSTR id1, nm1, bstr( "[Smartcopy Parser] Reference <A HREF=\"mga:");
+ 			COMTHROW( it->first->get_ID( &id1));
+ 			COMTHROW( it->first->get_Name( &nm1));
+ 			bstr.AppendBSTR( id1);
+ 			bstr.Append("\">");
+ 			if( nm1.Length() != 0)
+ 				bstr.AppendBSTR( nm1);
+ 			else
+ 				bstr.Append("emptyname");
+ 
+ 			bstr.Append("</A>: target not found in 2nd step. ");
+ 			bstr.Append("Search path used: ");
+ 			bstr.Append( makeViewable( it->second).c_str());
+ 
+ 			if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
+ 		}
+ 	}
+ }
+ 
+ void CMgaParser::tryToFindMissedSetMembers()
+ {
+ 	map< CComObjPtr<IMgaFCO>, vector< string >, CompareCComObj >::iterator it = m_notFoundSetMembers.begin();
+ 	map< CComObjPtr<IMgaFCO>, vector< string >, CompareCComObj >::iterator itend = m_notFoundSetMembers.end();
+ 	for( ; it != itend; ++it)
+ 	{
+ 		if( !it->first || it->second.empty()) continue;
+ 
+ 		CComObjPtr<IMgaSet> set;
+ 		COMTHROW( it->first.QueryInterface( set));
+ 
+ 		if( !set) continue;
+ 
+ 		vector< string >::iterator member_it = it->second.begin();
+ 		vector< string >::iterator member_it_end = it->second.end();
+ 		for( ; member_it != member_it_end; ++member_it)
+ 		{
+ 			if( member_it->empty()) continue;
+ 
+ 			bool error = false;
+ 			CComObjPtr<IMgaObject> member;
+ 			findObjOnRelPath( CComObjPtr<IMgaObject>( it->first), *member_it, member, "set member");
+ 			if( member)
+ 			{
+ 				CComObjPtr<IMgaFCO> fco_member;
+ 				COMTHROW( member.QueryInterface( fco_member));
+ 
+ 				if( fco_member)
+ 				{
+ 					COMTHROW( set->AddMember( fco_member));
+ 
+ 					CComBSTR id1, nm1, id2, nm2, bstr("[Smartcopy Parser] Member <A HREF=\"mga:");
+ 					COMTHROW( set->get_ID( &id1));
+ 					COMTHROW( set->get_Name( &nm1));
+ 					COMTHROW( fco_member->get_ID( &id2));
+ 					COMTHROW( fco_member->get_Name( &nm2));
+ 
+ 					bstr.AppendBSTR( id2);
+ 					bstr.Append("\">");
+ 					if( nm2.Length() != 0)
+ 						bstr.AppendBSTR( nm2);
+ 					else
+ 						bstr.Append("emptyname");
+ 
+ 					bstr.Append("</A> added to set <A HREF=\"mga:");
+ 					bstr.AppendBSTR( id1);
+ 					bstr.Append("\">");
+ 					if( nm1.Length() != 0)
+ 						bstr.AppendBSTR( nm1);
+ 					else
+ 						bstr.Append("emptyname");
+ 
+ 					bstr.Append("</A> in 2nd step successfully.");
+ 					if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_INFO));
+ 				}
+ 				else
+ 					error = true;
+ 			}
+ 			else
+ 				error = true;
+ 
+ 			if( error)
+ 			{
+ 				CComBSTR id1, nm1, bstr( "[Smartcopy Parser] Set <A HREF=\"mga:");
+ 				COMTHROW( set->get_ID( &id1));
+ 				COMTHROW( set->get_Name( &nm1));
+ 				bstr.AppendBSTR( id1);
+ 				bstr.Append("\">");
+ 				if( nm1.Length() != 0)
+ 					bstr.AppendBSTR( nm1);
+ 				else
+ 					bstr.Append("emptyname");
+ 
+ 				bstr.Append("</A>: member not found in 2nd step. ");
+ 				bstr.Append("Search path used: ");
+ 				bstr.Append( makeViewable( *member_it).c_str());
+ 
+ 				if( m_GME) COMTHROW( m_GME->ConsoleMessage(bstr, MSG_ERROR));
+ 			}
+ 		}
+ 	}
+ }
\ No newline at end of file



More information about the GME-commit mailing list