[GME-commit]
GMESRC/GME/Parser MgaDumper.cpp,1.12,1.13 MgaDumper.h,1.7,1.8
gme-commit at list.isis.vanderbilt.edu
gme-commit at list.isis.vanderbilt.edu
Wed Jun 2 16:55:36 CDT 2004
- Next message: [GME-commit]
GMESRC/GME/MgaUtil ClosureDlg.cpp,NONE,1.1 ClosureDlg.h,NONE,1.1
ClosureRes.cpp,NONE,1.1 ClosureRes.h,NONE,1.1
MakeClosure.cpp,NONE,1.1 MakeClosure.h,NONE,1.1
MgaClosure.cpp,NONE,1.1 MgaClosure.h,NONE,1.1
MgaClosure.rgs,NONE,1.1 MgaUtil.dsp,1.22,1.23 MgaUtil.rc,1.34,1.35
MgaUtilApp.cpp,1.7,1.8 MgaUtilLib.idl,1.6,1.7 resource.h,1.21,1.22
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /var/lib/gme/GMESRC/GME/Parser
In directory braindrain:/tmp/cvs-serv31285
Modified Files:
MgaDumper.cpp MgaDumper.h
Log Message:
1.Closure dumpers introduced
2.Attribute values checked for special characters like & and escaped. (Annotation names bug corrected)
CVS User: zolmol
Index: MgaDumper.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaDumper.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** MgaDumper.cpp 24 May 2004 13:35:44 -0000 1.12
--- MgaDumper.cpp 2 Jun 2004 20:55:33 -0000 1.13
***************
*** 6,9 ****
--- 6,87 ----
#define FLUSH_LIMIT 1000
+ #include "map"
+
+ // -----------------------------------------------------------
+ // --------------------------- GmeEqual ----------------------
+ // -----------------------------------------------------------
+ GmeEqual::GmeEqual( CComObjPtr<IMgaObject> obj)
+ : m_objToFind( obj), m_which( 1)
+ { }
+
+
+ GmeEqual::GmeEqual( CComObjPtr<IMgaFCO> fco)
+ : m_fcoToFind( fco), m_which( 2)
+ { }
+
+
+ GmeEqual::GmeEqual( CComObjPtr<IMgaFolder> folder)
+ : m_folderToFind( folder), m_which( 3)
+ { }
+
+
+ GmeEqual::GmeEqual( CComObjPtr<IMgaModel> model)
+ : m_modelToFind( model), m_which( 4)
+ { }
+
+
+ bool GmeEqual::operator() ( CComObjPtr<IMgaObject>& op )
+ {
+ ASSERT( m_which == 1); // which variable is set
+
+ VARIANT_BOOL is_equal;
+ COMTHROW( m_objToFind->get_IsEqual( op, &is_equal));
+
+ if (is_equal != VARIANT_FALSE)
+ return true;
+
+ return false;
+ }
+
+ bool GmeEqual::operator() ( CComObjPtr<IMgaFCO>& op )
+ {
+ ASSERT( m_which == 2); // which variable is set
+
+ VARIANT_BOOL is_equal;
+ COMTHROW( m_fcoToFind->get_IsEqual( op, &is_equal));
+
+ if (is_equal != VARIANT_FALSE)
+ return true;
+
+ return false;
+ }
+
+ bool GmeEqual::operator() ( CComObjPtr<IMgaFolder>& op )
+ {
+ ASSERT( m_which == 3); // which variable is set
+
+ VARIANT_BOOL is_equal;
+ COMTHROW( m_folderToFind->get_IsEqual( op, &is_equal));
+
+ if (is_equal != VARIANT_FALSE)
+ return true;
+
+ return false;
+ }
+
+ bool GmeEqual::operator() ( CComObjPtr<IMgaModel>& op )
+ {
+ ASSERT( m_which == 4); // which variable is set
+
+ VARIANT_BOOL is_equal;
+ COMTHROW( m_modelToFind->get_IsEqual( op, &is_equal));
+
+ if (is_equal != VARIANT_FALSE)
+ return true;
+
+ return false;
+ }
+
+
// --------------------------- CMgaDumper
***************
*** 54,58 ****
project->CommitTransaction();
}
! root_fcos.clear();
project = NULL;
}
--- 132,138 ----
project->CommitTransaction();
}
!
! m_selFcos.clear();
! m_selFolders.clear();
project = NULL;
}
***************
*** 79,99 ****
}
! STDMETHODIMP CMgaDumper::DumpFCOs(IMgaFCOs *p, BSTR xmlfile)
{
! CHECK_IN(p);
COMTRY
{
! CopyTo(p, root_fcos);
! if( root_fcos.empty() )
return S_OK;
CComObjPtr<IMgaProject> project;
! COMTHROW( root_fcos.front()->get_Project(PutOut(project)) );
InitDump(project, xmlfile);
! ofs << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
ofs << "<!DOCTYPE clipboard SYSTEM \"mga.dtd\" [\n";
ofs << "\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection)*>\n";
--- 159,191 ----
}
! STDMETHODIMP CMgaDumper::DumpFCOs(IMgaFCOs *p, IMgaFolders *f, BSTR xmlfile)
{
! m_strictDump = false; // this method uses the permissive dump
! // meaning that if a model/folder is in the closure then all children
! // and grandchildren are dumped as well
!
! //CHECK_IN( (int)p | (int)f);
COMTRY
{
! if ( p) CopyTo(p, m_selFcos);
! if ( f) CopyTo(f, m_selFolders);
! if( m_selFcos.empty() && m_selFolders.empty())
return S_OK;
CComObjPtr<IMgaProject> project;
!
! if ( !m_selFcos.empty())
! COMTHROW( m_selFcos.front()->get_Project( PutOut( project)) );
! else if ( !m_selFolders.empty())
! COMTHROW( m_selFolders.front()->get_Project( PutOut( project)) );
! else
! return S_OK;
!
InitDump(project, xmlfile);
! ofs << "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
ofs << "<!DOCTYPE clipboard SYSTEM \"mga.dtd\" [\n";
ofs << "\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection)*>\n";
***************
*** 102,107 ****
StartElem("clipboard");
! CComObjPtrVector<IMgaFCO>::iterator i = root_fcos.begin();
! while( i != root_fcos.end() )
{
// PETER: put the object into the parser's territory
--- 194,211 ----
StartElem("clipboard");
! CComObjPtrVector<IMgaFolder>::iterator fi = m_selFolders.begin();
! while( fi != m_selFolders.end() )
! {
! CComObjPtr<IMgaObject> obj;
! COMTHROW(territory->OpenObj(*fi, PutOut(obj)));
! CComObjPtr<IMgaFolder> folder;
! COMTHROW(obj.QueryInterface(folder));
!
! Dump(folder);
! ++fi;
! }
!
! CComObjPtrVector<IMgaFCO>::iterator i = m_selFcos.begin();
! while( i != m_selFcos.end() )
{
// PETER: put the object into the parser's territory
***************
*** 123,126 ****
--- 227,249 ----
// ------- Low level stuff
+ string CMgaDumper::xmlFilter( const string& in)
+ {
+ map<char, string> m;
+ m['&'] = "&";
+ m['>'] = ">";
+ m['<'] = "<";
+ m['"'] = """;
+ m['\''] = "'";
+
+ string ret;
+ for( string::const_iterator i = in.begin(); i != in.end(); ++i)
+ if ( m.find( *i) != m.end())
+ ret += m[*i];
+ else
+ ret += *i;
+
+ return ret;
+ }
+
inline void CMgaDumper::Indent(int i)
{
***************
*** 156,161 ****
ASSERT( !elems.empty() && !elems.back().inbody );
! ofs << ' ' << name << "=\"" << value << '"';
}
--- 279,286 ----
ASSERT( !elems.empty() && !elems.back().inbody );
+
+ string t = xmlFilter( value); //ZolMol
! ofs << ' ' << name << "=\"" << t.c_str() << '"';
}
***************
*** 168,174 ****
ASSERT( !elems.empty() && !elems.back().inbody && !elems.back().indata );
! ofs << ' ' << name << "=\"";
! ofs.write(value, len);
! ofs << '"';
}
--- 293,299 ----
ASSERT( !elems.empty() && !elems.back().inbody && !elems.back().indata );
! string t = xmlFilter( string( value, len)); // ZolMol
!
! ofs << ' ' << name << "=\"" << t.c_str() << '"';
}
***************
*** 230,265 ****
}
! inline bool CMgaDumper::CheckInClosure(CComObjPtr<IMgaFCO> fco)
{
! if (root_fcos.empty()) {
! // Everything is in the closure if we are not
! // dumping selected FCOs
return true;
}
bool in_closure = false;
!
! CComObjPtr<IMgaFCO> curr_fco = fco;
! while ((curr_fco != NULL) && (!in_closure)) {
!
! CComObjPtrVector<IMgaFCO>::iterator i = root_fcos.begin();
! while( i != root_fcos.end() )
{
! VARIANT_BOOL is_equal;
! COMTHROW(curr_fco->get_IsEqual(*i, &is_equal));
! if (is_equal != VARIANT_FALSE) {
! in_closure = true;
! break;
}
! ++i;
}
! CComObjPtr<IMgaModel> parent;
! COMTHROW(curr_fco->get_ParentModel(PutOut(parent)));
! curr_fco = NULL;
! if (parent != NULL) {
! COMTHROW( ::QueryInterface(parent, curr_fco) );
}
}
--- 355,452 ----
}
! // ------- CheckInClosure
! // there are two ways:
! // strict: those objects are dumped which are selected ( can be found in m_selFCO/Folder)
! // this method is used by the copy closure methods
! // permissive: hierarchical selection, meaning that if a folder/model is selected then
! // its children/grandchildren need not to be selected (need not be in m_selFCO/Folder)
! // this is used by regular clipboard methods
! //
! inline bool CMgaDumper::CheckInClosure(CComObjPtr<IMgaAttribute> ) { return true;}
! inline bool CMgaDumper::CheckInClosure(CComObjPtr<IMgaConnPoint> ) { return true;}
!
! bool CMgaDumper::CheckInClosure(CComObjPtr<IMgaFolder> folder)
{
! if ( m_selFolders.empty() && m_selFcos.empty()) {
! // if the selected FCOs and selected Folders values are empty
! // then everything is in the closure
return true;
}
bool in_closure = false;
!
! if (m_strictDump)
! {
! in_closure = find_if( m_selFolders.begin(), m_selFolders.end(), GmeEqual( folder)) != m_selFolders.end();
! }
! else
! {
! CComObjPtr<IMgaFolder> curr_folder = folder;
! while ( curr_folder != NULL && !in_closure)
{
! in_closure = find_if( m_selFolders.begin(), m_selFolders.end(), GmeEqual( curr_folder)) != m_selFolders.end();
! CComObjPtr<IMgaFolder> parent;
! COMTHROW(curr_folder->get_ParentFolder(PutOut( parent)));
!
! curr_folder = NULL;
!
! if (parent != NULL) {
! curr_folder = parent;
}
+ }
+ }
+ return in_closure;
+ }
+
+ bool CMgaDumper::CheckInClosure(CComObjPtr<IMgaFCO> fco)
+ {
+ if ( m_selFolders.empty() && m_selFcos.empty()) {
+ // if the selected FCOs and selected Folders values are empty
+ // then everything is in the closure
+ return true;
+ }
+
+ bool in_closure = false;
+
+ if (m_strictDump)
+ {
+ in_closure = find_if( m_selFcos.begin(), m_selFcos.end(), GmeEqual( fco)) != m_selFcos.end();
+ }
+ else
+ {
+
+ CComObjPtr<IMgaFCO> curr_fco = fco;
+ CComObjPtr<IMgaFCO> last_fco = fco;
+ while ( curr_fco != NULL && !in_closure) {
! in_closure = find_if( m_selFcos.begin(), m_selFcos.end(), GmeEqual( curr_fco)) != m_selFcos.end();
!
! CComObjPtr<IMgaModel> parent;
! COMTHROW(curr_fco->get_ParentModel(PutOut(parent)));
! last_fco = curr_fco;
! curr_fco = NULL;
! if (parent != NULL) {
! COMTHROW( ::QueryInterface(parent, curr_fco) );
! }
}
! if ( !in_closure) // no parent yet (model) in closure, need to check folders
! {
! CComObjPtr<IMgaFolder> par_folder;
! COMTHROW( last_fco->get_ParentFolder(PutOut( par_folder)));
!
! while ( par_folder != NULL && !in_closure)
! {
! in_closure = find_if( m_selFolders.begin(), m_selFolders.end(), GmeEqual( par_folder)) != m_selFolders.end();
!
! CComObjPtr<IMgaFolder> parent;
! COMTHROW(par_folder->get_ParentFolder(PutOut( parent)));
!
! par_folder = NULL;
!
! if (parent != NULL)
! par_folder = parent;
! }
}
}
***************
*** 844,847 ****
--- 1031,1035 ----
{
if (!CheckInClosure(*i)) {
+ ++i; // inserted by ZolMol
continue;
}
***************
*** 860,864 ****
}
! Attr(name, idrefs);
}
}
--- 1048,1053 ----
}
! if ( !idrefs.empty())
! Attr(name, idrefs);
}
}
***************
*** 1064,1066 ****
}
! }
\ No newline at end of file
--- 1253,1404 ----
}
! }
!
! void CMgaDumper::putInTerritory( CComObjPtrVector<IMgaFCO>& fco_vec)
! {
! CComObjPtrVector<IMgaFCO>::iterator i = fco_vec.begin();
! for( ; i != fco_vec.end(); ++i )
! {
! CComObjPtr<IMgaObject> obj;
! COMTHROW(territory->OpenObj(*i, PutOut(obj)));
! CComObjPtr<IMgaFCO> fco;
! COMTHROW(obj.QueryInterface(fco));
! *i = fco;
! }
! }
!
! void CMgaDumper::putInTerritory( CComObjPtrVector<IMgaFolder>& fold_vec)
! {
! CComObjPtrVector<IMgaFolder>::iterator j = fold_vec.begin();
! for( ; j != fold_vec.end(); ++j )
! {
! CComObjPtr<IMgaObject> obj;
! COMTHROW(territory->OpenObj(*j, PutOut(obj)));
! CComObjPtr<IMgaFolder> fold;
! COMTHROW(obj.QueryInterface(fold));
! *j = fold;
! }
! }
!
! STDMETHODIMP CMgaDumper::DumpClos( IMgaFCOs *p_sel_fcos, IMgaFolders *p_sel_folds, BSTR xmlfile)
! {
! m_strictDump = true;
!
! COMTRY
! {
! if ( p_sel_fcos )
! CopyTo( p_sel_fcos, m_selFcos);
!
! if ( p_sel_folds)
! CopyTo( p_sel_folds, m_selFolders);
!
! CComObjPtr<IMgaProject> project;
!
! if ( !m_selFcos.empty())
! COMTHROW( m_selFcos.front()->get_Project( PutOut( project)) );
! else if ( !m_selFolders.empty())
! COMTHROW( m_selFolders.front()->get_Project( PutOut( project)) );
! else
! return S_OK;
!
!
! InitDump( project, xmlfile);
!
! putInTerritory( m_selFcos);
! putInTerritory( m_selFolders);
!
! if ( false) // clipboard format
! {
! ofs << "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
! ofs << "<!DOCTYPE clipboard SYSTEM \"mga.dtd\" [\n";
! ofs << "\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection)*>\n";
! ofs << "]>\n\n";
!
! StartElem("clipboard");
! Dump( project);
! EndElem();
! }
! else
! {
! ofs << "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
! ofs << "<!DOCTYPE project SYSTEM \"mga.dtd\">\n\n";
!
! Dump( project);
! }
! DoneDump(false);
! }
! COMCATCH( DoneDump(true); )
!
! m_selFcos.clear();
! m_selFolders.clear();
! }
!
! STDMETHODIMP CMgaDumper::DumpClosR(
! IMgaFCOs *p_sel_fcos, IMgaFolders *p_sel_folds, BSTR xmlfile,
! IMgaFCOs *p_top_fcos, IMgaFolders *p_top_folds )
! {
! m_strictDump = true;
!
! COMTRY
! {
! if ( p_sel_fcos )
! CopyTo( p_sel_fcos, m_selFcos);
!
! if ( p_sel_folds)
! CopyTo( p_sel_folds, m_selFolders);
!
! CComObjPtr<IMgaProject> project;
!
! if ( !m_selFcos.empty())
! COMTHROW( m_selFcos.front()->get_Project( PutOut( project)) );
! else if ( !m_selFolders.empty())
! COMTHROW( m_selFolders.front()->get_Project( PutOut( project)) );
! else
! return S_OK;
!
!
! CComObjPtrVector<IMgaFCO> parentless_fcos; // parentless fcos from the selected set
! CComObjPtrVector<IMgaFolder> parentless_folders; // parentless folders from the selected set
!
! if ( p_top_fcos )
! CopyTo( p_top_fcos, parentless_fcos);
!
! if ( p_top_folds)
! CopyTo( p_top_folds, parentless_folders);
!
! if ( parentless_fcos.empty() && parentless_folders.empty())
! {
! // this case should be handled by the DumpClos()
! ASSERT( 0);
! return DumpClos( p_sel_fcos, p_sel_folds, xmlfile);
! }
!
! InitDump( project, xmlfile);
!
! putInTerritory( m_selFcos);
! putInTerritory( parentless_fcos);
! putInTerritory( m_selFolders);
! putInTerritory( parentless_folders);
!
! ofs << "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
! ofs << "<!DOCTYPE clipboard SYSTEM \"mga.dtd\" [\n";
! ofs << "\t<!ELEMENT clipboard (folder|model|atom|reference|set|connection)*>\n";
! ofs << "]>\n\n";
!
! StartElem("clipboard");
!
! for( CComObjPtrVector<IMgaFolder>::iterator j = parentless_folders.begin(); j != parentless_folders.end(); ++j )
! Dump( *j);
!
! for( CComObjPtrVector<IMgaFCO>::iterator i = parentless_fcos.begin() ; i != parentless_fcos.end(); ++i )
! Dump( *i);
!
! EndElem();
!
! DoneDump(false);
! }
! COMCATCH( DoneDump(true); )
!
! m_selFcos.clear();
! m_selFolders.clear();
! }
Index: MgaDumper.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Parser/MgaDumper.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** MgaDumper.h 26 Feb 2004 17:52:45 -0000 1.7
--- MgaDumper.h 2 Jun 2004 20:55:33 -0000 1.8
***************
*** 7,10 ****
--- 7,33 ----
#include "CommonVersionInfo.h"
+
+ class GmeEqual
+ {
+ public:
+ GmeEqual( CComObjPtr<IMgaObject>);
+ GmeEqual( CComObjPtr<IMgaFCO>);
+ GmeEqual( CComObjPtr<IMgaFolder>);
+ GmeEqual( CComObjPtr<IMgaModel>);
+
+ bool operator() ( CComObjPtr<IMgaObject>& );
+ bool operator() ( CComObjPtr<IMgaFCO>& );
+ bool operator() ( CComObjPtr<IMgaFolder>& );
+ bool operator() ( CComObjPtr<IMgaModel>& );
+ private:
+ CComObjPtr<IMgaObject> m_objToFind;
+ CComObjPtr<IMgaFCO> m_fcoToFind;
+ CComObjPtr<IMgaFolder> m_folderToFind;
+ CComObjPtr<IMgaModel> m_modelToFind;
+ int m_which; // which variable is set
+ };
+
+
+
// --------------------------- CMgaDumper
***************
*** 17,21 ****
{
public:
! CMgaDumper() { dumpversion = 1; }
DECLARE_REGISTRY_RESOURCEID(IDR_MGADUMPER)
--- 40,44 ----
{
public:
! CMgaDumper() : dumpversion( 1), m_strictDump( true) { }
DECLARE_REGISTRY_RESOURCEID(IDR_MGADUMPER)
***************
*** 36,44 ****
STDMETHOD(DumpProject)(IMgaProject *p, BSTR xmlfile);
! STDMETHOD(DumpFCOs)(IMgaFCOs *p, BSTR xmlfile);
STDMETHOD(put_FormatVersion)(long p) { dumpversion = p; return S_OK; }
// ------- Low level stuff
!
void Indent(int i);
void StartElem(const char *name);
--- 59,69 ----
STDMETHOD(DumpProject)(IMgaProject *p, BSTR xmlfile);
! STDMETHOD(DumpFCOs)(IMgaFCOs *p, IMgaFolders *f, BSTR xmlfile);
! STDMETHOD(DumpClos)( IMgaFCOs *sel_fco, IMgaFolders *sel_fold, BSTR xmlfile);
! STDMETHOD(DumpClosR)( IMgaFCOs *sel_fco, IMgaFolders *sel_fold, BSTR xmlfile, IMgaFCOs *root_fco, IMgaFolders *root_fold);
STDMETHOD(put_FormatVersion)(long p) { dumpversion = p; return S_OK; }
// ------- Low level stuff
! string xmlFilter( const string& in);
void Indent(int i);
void StartElem(const char *name);
***************
*** 129,133 ****
while( i != e )
{
! Dump(*i);
++i;
--- 154,159 ----
while( i != e )
{
! if ( CheckInClosure( *i)) // by ZolMol
! Dump(*i);
++i;
***************
*** 135,143 ****
}
! bool CheckInClosure(CComObjPtr<IMgaFCO> fco);
// ------- Dumpers
public:
void Dump(IMgaProject *project);
void Dump(IMgaFolder *folder);
--- 161,174 ----
}
! bool CheckInClosure( CComObjPtr<IMgaFCO>);
! bool CheckInClosure( CComObjPtr<IMgaFolder>);
! bool CheckInClosure( CComObjPtr<IMgaAttribute>);
! bool CheckInClosure( CComObjPtr<IMgaConnPoint>);
!
// ------- Dumpers
public:
+
void Dump(IMgaProject *project);
void Dump(IMgaFolder *folder);
***************
*** 182,191 ****
vector<elem> elems;
- CComObjPtr<IMgaProject> project;
- CComObjPtr<IMgaTerritory> territory;
- CComObjPtrVector<IMgaFCO> root_fcos; // non-empty for DumpFCOs, closure checking
-
long fco_count;
int dumpversion;
};
--- 213,229 ----
vector<elem> elems;
long fco_count;
int dumpversion;
+
+ bool m_strictDump; // if true then containers dump their children only if the child is present in the closure collection
+
+ CComObjPtr<IMgaProject> project;
+ CComObjPtr<IMgaTerritory> territory;
+
+ CComObjPtrVector<IMgaFCO> m_selFcos; // selected objects for dump or closure
+ CComObjPtrVector<IMgaFolder> m_selFolders;
+
+ void putInTerritory( CComObjPtrVector<IMgaFCO>&);
+ void putInTerritory( CComObjPtrVector<IMgaFolder>&);
};
- Next message: [GME-commit]
GMESRC/GME/MgaUtil ClosureDlg.cpp,NONE,1.1 ClosureDlg.h,NONE,1.1
ClosureRes.cpp,NONE,1.1 ClosureRes.h,NONE,1.1
MakeClosure.cpp,NONE,1.1 MakeClosure.h,NONE,1.1
MgaClosure.cpp,NONE,1.1 MgaClosure.h,NONE,1.1
MgaClosure.rgs,NONE,1.1 MgaUtil.dsp,1.22,1.23 MgaUtil.rc,1.34,1.35
MgaUtilApp.cpp,1.7,1.8 MgaUtilLib.idl,1.6,1.7 resource.h,1.21,1.22
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the GME-commit
mailing list