[GME-commit] GMESRC/GME/Mga MgaProject.cpp,1.43,1.44 MgaProject.h,1.21,1.22

gme-commit at list.isis.vanderbilt.edu gme-commit at list.isis.vanderbilt.edu
Tue Mar 9 16:15:35 CST 2004


Update of /var/lib/gme/GMESRC/GME/Mga
In directory braindrain:/tmp/cvs-serv27160

Modified Files:
	MgaProject.cpp MgaProject.h 
Log Message:
Support for application specific notifications is added to the MGA layer. (IMgaProject::Notify).
Global notifications are allowed to be sent outside of transactions. Application specific notifications should
have APPEVENT_ prefix, see the XML import messages)

CVS User: volgy

Index: MgaProject.cpp
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Mga/MgaProject.cpp,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -d -r1.43 -r1.44
*** MgaProject.cpp	18 Dec 2003 13:28:41 -0000	1.43
--- MgaProject.cpp	9 Mar 2004 22:15:32 -0000	1.44
***************
*** 1099,1103 ****
  //			self[ATTRID_MDATE] = Now();
  		}
! 		COMTHROW(Notify(0));
  		baseterr = activeterr= NULL;
  		COMTHROW(dataproject->PopTerritory());
--- 1099,1103 ----
  //			self[ATTRID_MDATE] = Now();
  		}
! 		COMTHROW(CommitNotify());
  		baseterr = activeterr= NULL;
  		COMTHROW(dataproject->PopTerritory());
***************
*** 1195,1232 ****
  }
  
! STDMETHODIMP CMgaProject::Notify(long unusedmask) {
    if(read_only) {
! 		ASSERT(changedobjs.empty() && notifyobjs.empty());
! 		return S_OK;
!   }	
    COMTRY {
! 		if(!baseterr) COMTHROW(E_MGA_NOT_IN_TRANSACTION);
! 	
! 		if(!changedobjs.empty()) notifyqueueprocessed = true;
! 		while(!changedobjs.empty()) {
! 				FCOPtr f = changedobjs.front();
! 				changedobjs.pop();
  
  #if(1)
! 				COMTHROW(f->objrwnotify());
  #else
! 				if(f->objrwnotify() != S_OK) {
! 					ASSERT(("Notification failed", false));
! 				}
  #endif
! 		}
! 		
! 		read_only = true;
! 		while(!notifyobjs.empty()) {
! 				FCOPtr f = notifyobjs.front();
! 				notifyobjs.pop();
! 				if(f->objnotify() != S_OK) {
! 					ASSERT(("Notification failed", false));
! 				}
! 		}
! 		COMTHROW(GlobalNotify(GLOBALEVENT_NOTIFICATION_READY));
! 		read_only = false;
    } COMCATCH( read_only = false;);
  }
  
  
--- 1195,1248 ----
  }
  
! STDMETHODIMP CMgaProject::Notify(globalevent_enum event) {
! 	COMTRY {
! 		if(baseterr) COMTHROW(E_MGA_ALREADY_IN_TRANSACTION);
! 		{
! 			CComPtr<IMgaTerritory> t;
! 			COMTHROW(CreateTerritory(NULL, &t));
! 			COMTHROW(BeginTransaction(t, TRANSACTION_READ_ONLY));
! 			GlobalNotify(event);
! 			COMTHROW(CommitTransaction());
! 		}
!     }
!     COMCATCH(;);
! }
! 
! 
! STDMETHODIMP CMgaProject::CommitNotify() {
    if(read_only) {
!                 ASSERT(changedobjs.empty() && notifyobjs.empty());
!                 return S_OK;
!   }
    COMTRY {
!                 if(!baseterr) COMTHROW(E_MGA_NOT_IN_TRANSACTION);
! 
!                 if(!changedobjs.empty()) notifyqueueprocessed = true;
!                 while(!changedobjs.empty()) {
!                                 FCOPtr f = changedobjs.front();
!                                 changedobjs.pop();
  
  #if(1)
!                                 COMTHROW(f->objrwnotify());
  #else
!                                 if(f->objrwnotify() != S_OK) {
!                                         ASSERT(("Notification failed", false));
!                                 }
  #endif
!                 }
! 
!                 read_only = true;
!                 while(!notifyobjs.empty()) {
!                                 FCOPtr f = notifyobjs.front();
!                                 notifyobjs.pop();
!                                 if(f->objnotify() != S_OK) {
!                                         ASSERT(("Notification failed", false));
!                                 }
!                 }
!                 COMTHROW(GlobalNotify(GLOBALEVENT_NOTIFICATION_READY));
!                 read_only = false;
    } COMCATCH( read_only = false;);
  }
+ 
  
  

Index: MgaProject.h
===================================================================
RCS file: /var/lib/gme/GMESRC/GME/Mga/MgaProject.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -C2 -d -r1.21 -r1.22
*** MgaProject.h	17 Dec 2003 13:45:03 -0000	1.21
--- MgaProject.h	9 Mar 2004 22:15:32 -0000	1.22
***************
*** 104,110 ****
  	STDMETHOD(get_ProjectStatus)(long *stat);
  	STDMETHOD(CommitTransaction)();
  	STDMETHOD(CheckSupress)(VARIANT_BOOL);
  	STDMETHOD(GlobalNotify)(globalevent_enum msg);
! 	STDMETHOD(Notify)(long mask);
  	STDMETHOD(Redo)();
  	STDMETHOD(Undo)();
--- 104,111 ----
  	STDMETHOD(get_ProjectStatus)(long *stat);
  	STDMETHOD(CommitTransaction)();
+ 	STDMETHOD(CommitNotify)();
  	STDMETHOD(CheckSupress)(VARIANT_BOOL);
  	STDMETHOD(GlobalNotify)(globalevent_enum msg);
! 	STDMETHOD(Notify)(globalevent_enum event);
  	STDMETHOD(Redo)();
  	STDMETHOD(Undo)();



More information about the GME-commit mailing list