[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
- Previous message: [GME-commit]
GMESRC/GME/MgaUtil ClosureSmart.cpp,1.1,1.2 ClosureSmart.h,1.1,1.2
MakeClosure.cpp,1.10,1.11 MgaUtil.rc,1.42,1.43 resource.h,1.26,1.27
- Next message: [GME-commit] GMESRC/GME/Parser MgaParserClosureHelper.cpp,1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
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
- Previous message: [GME-commit]
GMESRC/GME/MgaUtil ClosureSmart.cpp,1.1,1.2 ClosureSmart.h,1.1,1.2
MakeClosure.cpp,1.10,1.11 MgaUtil.rc,1.42,1.43 resource.h,1.26,1.27
- Next message: [GME-commit] GMESRC/GME/Parser MgaParserClosureHelper.cpp,1.1,1.2
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the GME-commit
mailing list