certi-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[certi-cvs] certi RTIG/FederationsList.cc RTIG/Federation.c...


From: certi-cvs
Subject: [certi-cvs] certi RTIG/FederationsList.cc RTIG/Federation.c...
Date: Wed, 18 Nov 2009 18:50:49 +0000

CVSROOT:        /sources/certi
Module name:    certi
Changes by:     Eric NOULARD <erk>      09/11/18 18:50:49

Modified files:
        RTIG           : FederationsList.cc Federation.cc 
                         FederationsList.hh RTIG_processing.cc 
                         Federation.hh 
        RTIA           : Statistics.cc FederationManagement.cc 
                         FederationManagement.hh RTIA.cc 
                         RTIA_federate.cc 
        scripts        : NW_MessageType.txt GenerateMessages.py 
                         CERTI_NetworkMessage.msg 
        libCERTI       : Interaction.cc ObjectClass.cc Interaction.hh 
                         ObjectClass.hh RoutingSpace.hh 
                         ObjectClassAttribute.cc PrettyDebEx.cc 
                         RootObject.hh NM_Classes.cc NM_Classes.hh 
                         NetworkMessage.hh RootObject.cc 

Log message:
        Merge-in 
        patch #6939: Send object model information as binary encoding
        from Mathias
        There are some improvement to to after this patch
        but the overall idea is OK.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/FederationsList.cc?cvsroot=certi&r1=3.64&r2=3.65
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.cc?cvsroot=certi&r1=3.114&r2=3.115
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/FederationsList.hh?cvsroot=certi&r1=3.48&r2=3.49
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/RTIG_processing.cc?cvsroot=certi&r1=3.89&r2=3.90
http://cvs.savannah.gnu.org/viewcvs/certi/RTIG/Federation.hh?cvsroot=certi&r1=3.58&r2=3.59
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/Statistics.cc?cvsroot=certi&r1=3.19&r2=3.20
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/FederationManagement.cc?cvsroot=certi&r1=3.75&r2=3.76
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/FederationManagement.hh?cvsroot=certi&r1=3.25&r2=3.26
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA.cc?cvsroot=certi&r1=3.30&r2=3.31
http://cvs.savannah.gnu.org/viewcvs/certi/RTIA/RTIA_federate.cc?cvsroot=certi&r1=3.100&r2=3.101
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/NW_MessageType.txt?cvsroot=certi&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/GenerateMessages.py?cvsroot=certi&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/certi/scripts/CERTI_NetworkMessage.msg?cvsroot=certi&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Interaction.cc?cvsroot=certi&r1=3.54&r2=3.55
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectClass.cc?cvsroot=certi&r1=3.68&r2=3.69
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/Interaction.hh?cvsroot=certi&r1=3.36&r2=3.37
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectClass.hh?cvsroot=certi&r1=3.45&r2=3.46
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/RoutingSpace.hh?cvsroot=certi&r1=3.10&r2=3.11
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/ObjectClassAttribute.cc?cvsroot=certi&r1=3.33&r2=3.34
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/PrettyDebEx.cc?cvsroot=certi&r1=4.7&r2=4.8
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/RootObject.hh?cvsroot=certi&r1=3.32&r2=3.33
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/NM_Classes.cc?cvsroot=certi&r1=3.19&r2=3.20
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/NM_Classes.hh?cvsroot=certi&r1=3.14&r2=3.15
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/NetworkMessage.hh?cvsroot=certi&r1=3.49&r2=3.50
http://cvs.savannah.gnu.org/viewcvs/certi/libCERTI/RootObject.cc?cvsroot=certi&r1=3.42&r2=3.43

Patches:
Index: RTIG/FederationsList.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/FederationsList.cc,v
retrieving revision 3.64
retrieving revision 3.65
diff -u -b -r3.64 -r3.65
--- RTIG/FederationsList.cc     21 Oct 2009 20:04:45 -0000      3.64
+++ RTIG/FederationsList.cc     18 Nov 2009 18:50:48 -0000      3.65
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: FederationsList.cc,v 3.64 2009/10/21 20:04:45 erk Exp $
+// $Id: FederationsList.cc,v 3.65 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -281,7 +281,8 @@
 FederateHandle
 FederationsList::addFederate(Handle handle,
                              const char *name,
-                             SocketTCP *tcp_link)
+                             SocketTCP *tcp_link,
+                             NM_Join_Federation_Execution& objectModelData)
     throw (FederationExecutionDoesNotExist,
            FederateAlreadyExecutionMember,
            MemoryExhausted,
@@ -303,6 +304,8 @@
     // adding the federate and return its handle
     FederateHandle federate = federation->add(name, tcp_link);
 
+    federation->getFOM(objectModelData);
+
     G.Out(pdGendoc,"exit FederationsList::addFederate");
 
     return federate ;
@@ -526,7 +529,7 @@
                            bool &is_syncing,
                            SocketMC* &comm_mc)
 #else
-    std::string FederationsList::info(Handle handle,
+    void FederationsList::info(Handle handle,
                                int &nb_federates,
                                int &nb_regulators,
                                bool &is_syncing)
@@ -551,8 +554,6 @@
     comm_mc = federation->MCLink ;
 #endif
     G.Out(pdGendoc,"exit  FederationsList::info");
-    // Return FEDid
-    return FED_Filename ;
 }
 
 // ----------------------------------------------------------------------------
@@ -1749,5 +1750,5 @@
 
 }} // certi::rtig
 
-// EOF $Id: FederationsList.cc,v 3.64 2009/10/21 20:04:45 erk Exp $
+// EOF $Id: FederationsList.cc,v 3.65 2009/11/18 18:50:48 erk Exp $
 

Index: RTIG/Federation.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.cc,v
retrieving revision 3.114
retrieving revision 3.115
diff -u -b -r3.114 -r3.115
--- RTIG/Federation.cc  21 Oct 2009 20:04:45 -0000      3.114
+++ RTIG/Federation.cc  18 Nov 2009 18:50:48 -0000      3.115
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: Federation.cc,v 3.114 2009/10/21 20:04:45 erk Exp $
+// $Id: Federation.cc,v 3.115 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -751,6 +751,12 @@
     this->broadcastAnyMessage(&msg, 0);
 }
 
+void
+Federation::getFOM(NM_Join_Federation_Execution& objectModelData)
+{
+    root->getFOM(objectModelData);
+}
+
 // ----------------------------------------------------------------------------
 //! Broadcast 'msg' to all Federate except the specified one
 void
@@ -2606,5 +2612,5 @@
 
 }} // namespace certi/rtig
 
-// $Id: Federation.cc,v 3.114 2009/10/21 20:04:45 erk Exp $
+// $Id: Federation.cc,v 3.115 2009/11/18 18:50:48 erk Exp $
 

Index: RTIG/FederationsList.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/FederationsList.hh,v
retrieving revision 3.48
retrieving revision 3.49
diff -u -b -r3.48 -r3.49
--- RTIG/FederationsList.hh     20 Nov 2008 18:21:56 -0000      3.48
+++ RTIG/FederationsList.hh     18 Nov 2009 18:50:48 -0000      3.49
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: FederationsList.hh,v 3.48 2008/11/20 18:21:56 approx Exp $
+// $Id: FederationsList.hh,v 3.49 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_RTIG_FEDERATIONS_LIST_HH
@@ -79,7 +79,7 @@
               bool &is_syncing,
               SocketMC* &comm_mc)
 #else
-        std::string info(Handle theHandle,
+        void info(Handle theHandle,
                   int &nb_federes,
                   int &nb_regulateurs,
                   bool &is_syncing)
@@ -154,7 +154,8 @@
     // -------------------------
     FederateHandle addFederate(Handle theHandle,
                                const char *theFederateName,
-                               SocketTCP *theTCPLink)
+                               SocketTCP *theTCPLink,
+                               NM_Join_Federation_Execution& objectModelData)
         throw (FederationExecutionDoesNotExist,
                FederateAlreadyExecutionMember,
                MemoryExhausted,
@@ -649,4 +650,4 @@
 
 #endif // _CERTI_RTIG_FEDERATIONS_LIST_HH
 
-// $Id: FederationsList.hh,v 3.48 2008/11/20 18:21:56 approx Exp $
+// $Id: FederationsList.hh,v 3.49 2009/11/18 18:50:48 erk Exp $

Index: RTIG/RTIG_processing.cc
===================================================================
RCS file: /sources/certi/certi/RTIG/RTIG_processing.cc,v
retrieving revision 3.89
retrieving revision 3.90
diff -u -b -r3.89 -r3.90
--- RTIG/RTIG_processing.cc     21 Oct 2009 20:04:45 -0000      3.89
+++ RTIG/RTIG_processing.cc     18 Nov 2009 18:50:48 -0000      3.90
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: RTIG_processing.cc,v 3.89 2009/10/21 20:04:45 erk Exp $
+// $Id: RTIG_processing.cc,v 3.90 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -130,7 +130,6 @@
 {
     std::string federation = req->getFederationName();
     std::string federate   = req->getFederateName();
-    std::string filename ;
 
     unsigned int peer     = req->bestEffortPeer ;
     unsigned long address = req->bestEffortAddress ;
@@ -145,7 +144,7 @@
     G.Out(pdGendoc,"BEGIN ** JOIN FEDERATION SERVICE **");
     G.Out(pdGendoc,"enter RTIG::processJoinFederation");
 
-    if ((federation.length()==0) || (federate.length() == 0))
+    if (federation.empty() || federate.empty())
         throw RTIinternalError("Invalid Federation/Federate Name.");
 
     auditServer << "Federate \"" << federate.c_str() << "\" joins Federation 
\""
@@ -153,27 +152,19 @@
 
     federations.exists(federation.c_str(), num_federation);
 
+    // Need to dump the fom into that
+    NM_Join_Federation_Execution rep ;
     try
        {
         num_federe = federations.addFederate(num_federation,
                                           federate.c_str(),
-                                          static_cast<SocketTCP*>(link));
+                                          static_cast<SocketTCP*>(link),
+                                          rep);
         }
     catch (FederateAlreadyExecutionMember &e)
         {
-        // Federate yet has joined this federation(same or another with same 
name)
-        // RTIG has to return something to RTIA
-        // RTIA waits a GET_FED_FILE message
-        // RTIG says not OK to RTIA in a GET_FED_FILE message
-        NM_Get_FED_File repFED ;
-       repFED.setException(e_FederateAlreadyExecutionMember);
-       repFED.exceptionReason="Federate with same name has yet joined the 
federation";
-       G.Out(pdGendoc,"processJoinFederation==>Answer to RTIA GFF ERROR 
%s",repFED.exceptionReason.c_str());
-       repFED.send(link,NM_msgBufSend);
-
        G.Out(pdGendoc,"exit RTIG::processJoinFederation on Error");
        G.Out(pdGendoc,"END ** JOIN FEDERATION (BAD) SERVICE **");
-       // FIXME strange to send 2 messages?
        // Prepare answer about JoinFederationExecution
        NM_Join_Federation_Execution rep ;
        rep.setException(e_FederateAlreadyExecutionMember);
@@ -192,7 +183,7 @@
                       pause, com_mc);
      assert(com_mc != NULL);
 #else
-     filename = federations.info(num_federation, nb_federes, nb_regulateurs, 
pause);
+     federations.info(num_federation, nb_federes, nb_regulateurs, pause);
 #endif
 
     // Store Federate <->Socket reference.
@@ -206,8 +197,6 @@
                << ". Socket " << int(link->returnSocket());
 
     // Prepare answer about JoinFederationExecution
-    // This answer wille be made AFTER FED file processing
-    NM_Join_Federation_Execution rep ;
     rep.setFederationName(federation);
     rep.federate = num_federe ;
     rep.federation = num_federation ;
@@ -215,81 +204,7 @@
     rep.bestEffortPeer = peer ;
     rep.bestEffortAddress = address ;
 
-    // Here begin FED file processing i.e. RTIG gives FED file contents to RTIA
-    TypeException e = e_NO_EXCEPTION ;
-    // Open FED file and says to RTIA if success
-    std::ifstream fedFile(filename.c_str());
-    if ( !fedFile.is_open()) {
-        // Problem : file has been opened during create federation and now we 
can't
-        // May be file has been deleted
-        cout << "processJoinFederation : FED file " << filename << " has 
vanished." << endl;
-        e = e_RTIinternalError ;
-    }
-
-    // RTIG says OK or not to RTIA
-    NM_Get_FED_File repFED ;
-    repFED.federate = num_federe ;
-    repFED.federation = num_federation ;
-    repFED.setLineno(0);
-    repFED.setFEDid(filename);
-    repFED.setException(e);
-    // Send answer
-    D.Out(pdTrace,"send NetworkMessage of Type %d after open \"%s\"",
-          repFED.getType(),repFED.getFEDid().c_str());
-    G.Out(pdGendoc,"processJoinFederation====>Begin FED file transfer");
-
-    repFED.send(link,NM_msgBufSend);
-
-    if ( e ==  e_NO_EXCEPTION )
-        {
-        // Wait for OK from RTIA
-       NM_Get_FED_File msg ;
-        D.Out(pdTrace,"wait NetworkMessage of Type %d",msg.getType());
-        msg.receive(link,NM_msgBufReceive);
-        assert ( msg.getLineno() == 0 );
-        // RTIA has opened working file then RTIG has to transfer file contents
-        // line by line
-        std::string fileLine;
-        unsigned int num_line = 0 ;
-        while (!fedFile.eof())
-            {
-            num_line++;
-            // Read a line
-            std::getline(fedFile,fileLine);
-            fileLine = fileLine+"\n";
-            // RTIG sends line to RTIA and number gives line number
-            repFED.setException(e_NO_EXCEPTION);
-            repFED.federate = num_federe ;
-            repFED.federation = num_federation ;
-            repFED.setLineno(num_line);
-            repFED.setFEDid(filename);
-            // line transfered
-            repFED.setFEDLine(fileLine);
-            // Send answer
-            repFED.send(link,NM_msgBufSend);
-
-            // Wait for OK from RTIA
-            msg.receive(link,NM_msgBufReceive);
-            assert ( msg.getLineno() == num_line );
-            }
-
-           // close
-           fedFile.close();
-        repFED.setException(e_NO_EXCEPTION);
-        repFED.federate = num_federe ;
-        repFED.federation = num_federation ;
-        repFED.setLineno(0) ;
-        repFED.setFEDid(filename);
-        // Send answer
-
-        G.Out(pdGendoc,"processJoinFederation====>End  FED file transfer");
-
-        repFED.send(link,NM_msgBufSend);
-        }
-    // END of FED file processing
-
     // Now we have to answer about JoinFederationExecution
-
 #ifdef FEDERATION_USES_MULTICAST
     rep.AdresseMulticast = com_mc->returnAdress();
 #endif
@@ -1554,4 +1469,4 @@
 
 }} // namespace certi/rtig
 
-// $Id: RTIG_processing.cc,v 3.89 2009/10/21 20:04:45 erk Exp $
+// $Id: RTIG_processing.cc,v 3.90 2009/11/18 18:50:48 erk Exp $

Index: RTIG/Federation.hh
===================================================================
RCS file: /sources/certi/certi/RTIG/Federation.hh,v
retrieving revision 3.58
retrieving revision 3.59
diff -u -b -r3.58 -r3.59
--- RTIG/Federation.hh  16 Sep 2009 07:55:58 -0000      3.58
+++ RTIG/Federation.hh  18 Nov 2009 18:50:48 -0000      3.59
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: Federation.hh,v 3.58 2009/09/16 07:55:58 erk Exp $
+// $Id: Federation.hh,v 3.59 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_RTIG_FEDERATION_HH
@@ -649,6 +649,9 @@
                RestoreInProgress,
                RTIinternalError); 
 
+    void getFOM(NM_Join_Federation_Execution& objectModelData);
+
+
 private:
     // Private methods
     void broadcastAnyMessage(NetworkMessage *msg, FederateHandle Except);
@@ -684,4 +687,4 @@
 
 #endif // _CERTI_RTIG_FEDERATION_HH
 
-// $Id: Federation.hh,v 3.58 2009/09/16 07:55:58 erk Exp $
+// $Id: Federation.hh,v 3.59 2009/11/18 18:50:48 erk Exp $

Index: RTIA/Statistics.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/Statistics.cc,v
retrieving revision 3.19
retrieving revision 3.20
diff -u -b -r3.19 -r3.20
--- RTIA/Statistics.cc  8 Apr 2009 10:47:18 -0000       3.19
+++ RTIA/Statistics.cc  18 Nov 2009 18:50:48 -0000      3.20
@@ -297,7 +297,6 @@
        RTI_MSG_NAME(NetworkMessage::DDM_SUBSCRIBE_INTERACTION);
        RTI_MSG_NAME(NetworkMessage::DDM_UNSUBSCRIBE_INTERACTION);
         RTI_MSG_NAME(NetworkMessage::PROVIDE_ATTRIBUTE_VALUE_UPDATE);
-        RTI_MSG_NAME(NetworkMessage::GET_FED_FILE);
        RTI_MSG_NAME(NetworkMessage::SET_CLASS_RELEVANCE_ADVISORY_SWITCH);
        RTI_MSG_NAME(NetworkMessage::SET_INTERACTION_RELEVANCE_ADVISORY_SWITCH);
        RTI_MSG_NAME(NetworkMessage::SET_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH);
@@ -374,4 +373,4 @@
 #undef FED_MSG_NAME
 #undef RTI_MSG_NAME
 
-// $Id: Statistics.cc,v 3.19 2009/04/08 10:47:18 approx Exp $
+// $Id: Statistics.cc,v 3.20 2009/11/18 18:50:48 erk Exp $

Index: RTIA/FederationManagement.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/FederationManagement.cc,v
retrieving revision 3.75
retrieving revision 3.76
diff -u -b -r3.75 -r3.76
--- RTIA/FederationManagement.cc        21 Oct 2009 18:56:28 -0000      3.75
+++ RTIA/FederationManagement.cc        18 Nov 2009 18:50:48 -0000      3.76
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: FederationManagement.cc,v 3.75 2009/10/21 18:56:28 erk Exp $
+// $Id: FederationManagement.cc,v 3.76 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -70,7 +70,6 @@
 
     _nom_federation = "";
     _nom_federe     = "";
-    //_FEDid          = NULL;is now a string then...
     G.Out(pdGendoc,"exit  FederationManagement::FederationManagement");
 }
 
@@ -96,7 +95,6 @@
         cout << "RTIA: Federate destroyed" << endl ;
     //}
     
-    //delete[] _FEDid ;
     G.Out(pdGendoc,"exit  ~FederationManagement");
 }
 
@@ -104,7 +102,8 @@
 //! createFederationExecution.
 void
 FederationManagement::
-createFederationExecution(std::string theName,
+createFederationExecution(const std::string& theName,
+                          const std::string& fedId,
                           TypeException &e)
          throw ( FederationExecutionAlreadyExists,
                  CouldNotOpenFED,ErrorReadingFED,
@@ -126,7 +125,7 @@
     if (e == e_NO_EXCEPTION)
         {               
         requete.setFederationName(theName);
-        requete.setFEDid(_FEDid);
+        requete.setFEDid(fedId);
 
         G.Out(pdGendoc,"createFederationExecution====>   send Message to 
RTIG");
 
@@ -217,25 +216,6 @@
         if (reponse->getException() == e_NO_EXCEPTION) {
             _nom_federation    = "" ;
             _numero_federation = 0 ;
-            // Now, remove temporary file (if not yet done)
-            if ( _FEDid.c_str() != NULL )
-               {
-               if ( _FEDid[0] != '\0' )
-                   {
-                   // If RTIA end (abort ?) before join don't remove file if 
not temporary
-                   // temporary file name begins with _RT ( yes, but...)
-                   if ( _FEDid[0] == '_' || _FEDid[1] == 'R' || _FEDid[2] == 
'T')
-                      {
-                      std::cout<<"Removing temporary file "<<_FEDid<<" on 
destroy federation."<<std::endl;
-                      std::remove(_FEDid.c_str());
-                      _FEDid[0] = '\0' ;
-                      }
-                   else
-                      {
-                      std::cout<<"** W ** I don't remove file 
"<<_FEDid<<std::endl;
-                      }                   
-                   }
-               }
             }
         else
             {
@@ -253,13 +233,11 @@
 FederationManagement::
 joinFederationExecution(std::string Federate,
                         std::string Federation,
+                        RootObject* rootObject,
                         TypeException &e)
 {
     NM_Join_Federation_Execution requete;
-    NM_Get_FED_File              requeteFED;
-    
     int i, nb ;
-    string filename ; // Needed for working file name
 
     G.Out(pdGendoc,"enter FederationManagement::joinFederationExecution");
     D.Out(pdInit, "Join Federation %s as %s.", Federation.c_str(), 
Federate.c_str());
@@ -284,110 +262,15 @@
 
         comm->sendMessage(&requete);
 
-        // Waiting RTIG answer for FED file opened
-        std::auto_ptr<NetworkMessage> 
reponse(comm->waitMessage(NetworkMessage::GET_FED_FILE, 0));
-        NM_Get_FED_File*  getFedMsg = 
static_cast<NM_Get_FED_File*>(reponse.get());
-
-        if ( reponse->getException() != e_NO_EXCEPTION)
-            {
-            // Bad answer from RTIG
-            e = reponse->getException() ;
-            }
-        else
-            {
-           stat->rtiService(NetworkMessage::GET_FED_FILE);
-            // RTIA have to open a new file for working
-            // We have to build a name for working file, name begins by _RTIA_ 
(6 char)
-            // First pid converted in char and added
-            // Then federation name
-            // File type (4)
-            char pid_name[10];
-            sprintf(pid_name,"%d_",getpid());
-
-            #ifdef _WIN32      //Write the file into 
-            char       *theDir; 
-            
-            theDir= getenv("TMP"); if (theDir == NULL) theDir= getenv("TEMP"); 
         
-            if (theDir) { filename+= theDir; filename+= "\\";}      
-            #endif
-            
-            filename+= "_RTIA_";
-            filename+= pid_name ;
-            filename+= Federation ;
-            // Last file type : fed or xml ?
-   
-            string filename_RTIG = getFedMsg->getFEDid();
-            int nbcar_filename_RTIG=filename_RTIG.length();        
-            string extension = filename_RTIG.substr(nbcar_filename_RTIG-3,3) ;
-              if ( !strcasecmp(extension.c_str(),"fed") )
-                  {
-                  filename += ".fed";
-                  }
-              else if  ( !strcasecmp(extension.c_str(),"xml") )
-                  {
-                  filename += ".xml";
-                  } 
-              else 
-                  throw CouldNotOpenFED("nor .fed nor .xml"); 
-            // FED filename for working must be stored
-            _FEDid = filename ;              
-            // RTIA opens working file
-            std::ofstream fedWorkFile(filename.c_str());
-            if ( !fedWorkFile.is_open()) {
-                throw RTIinternalError("FED file has vanished.") ;
-            }
-              
-            // RTIA says RTIG OK for file transfer            
-            requeteFED.setFederateName(Federate);
-            requeteFED.setFEDid(filename);
-            if ( e == e_NO_EXCEPTION)
-                requeteFED.setLineno(0);  // OK for open
-            else
-                requeteFED.setLineno(1);
-
-            G.Out(pdGendoc,"joinFederationExecution====> begin FED file get 
from RTIG");
-
-            comm->sendMessage(&requeteFED);
-    
-            // Now read loop from RTIG to get line contents and then write it 
into file            
-            unsigned int num_line = 0 ; // no line read
-            for (;;)
-                {              
-                reponse.reset(comm->waitMessage(NetworkMessage::GET_FED_FILE, 
0));
-                getFedMsg = static_cast<NM_Get_FED_File*>(reponse.get());
-                if ( reponse->getException() != e_NO_EXCEPTION)
-                    {
-                    cout << "Bad answer from RTIG" << endl ;
-                    e = e_RTIinternalError ;
-                    break ;
-                    }
-                stat->rtiService(NetworkMessage::GET_FED_FILE);
-                // Line read
-                num_line++ ;
-                // Check for EOF
-                if ( getFedMsg->getLineno() == 0 ) break;
-                 
-                assert ( num_line == getFedMsg->getLineno() ) ;
-                reponse->handleArraySize = 1 ;                
-                fedWorkFile << getFedMsg->getFEDLine();
-                // RTIA says OK to RTIG                
-                requeteFED.setFederateName(Federate);
-                requeteFED.setLineno(num_line);
-                requeteFED.setFEDid(filename);
-                comm->sendMessage(&requeteFED);            
-                }
-            // close working file
-            fedWorkFile.close(); 
-            }                          
- 
-        G.Out(pdGendoc,"joinFederationExecution====> end FED file get from 
RTIG"); 
-          
-         // Waiting RTIG answer (from any federate)
-        
reponse.reset(comm->waitMessage(NetworkMessage::JOIN_FEDERATION_EXECUTION, 0));
+        // Waiting RTIG answer
+        std::auto_ptr<NetworkMessage> 
reponse(comm->waitMessage(NetworkMessage::JOIN_FEDERATION_EXECUTION, 0));
 
         // If OK, regulators number is inside the answer.
         // Then we except a NULL message from each.
         if (reponse->getException() == e_NO_EXCEPTION) {
+            NM_Join_Federation_Execution* joinResponse = 
static_cast<NM_Join_Federation_Execution*>(reponse.get());
+            rootObject->setFOM(*joinResponse);
+
             _nom_federation = std::string(Federation);            
             _nom_federe =  std::string(Federate);
             _numero_federation = reponse->federation ;
@@ -455,16 +338,6 @@
         _est_membre_federation = false ;
         _numero_federation = 0 ;
         federate = 0 ;
-        // Now, remove temporary file (if not yet done)
-        if ( _FEDid.c_str() != NULL)
-            {
-            if ( _FEDid[0] != '\0' )
-                {
-                std::cout<<"Removing temporary file "<<_FEDid<<" on resign 
federation."<<std::endl;
-                std::remove(_FEDid.c_str());
-                _FEDid[0] = '\0' ;
-                }
-            }
         G.Out(pdGendoc,"exit  
FederationManagement::resignFederationExecution");
         }
     else

Index: RTIA/FederationManagement.hh
===================================================================
RCS file: /sources/certi/certi/RTIA/FederationManagement.hh,v
retrieving revision 3.25
retrieving revision 3.26
diff -u -b -r3.25 -r3.26
--- RTIA/FederationManagement.hh        11 Oct 2009 11:22:55 -0000      3.25
+++ RTIA/FederationManagement.hh        18 Nov 2009 18:50:48 -0000      3.26
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: FederationManagement.hh,v 3.25 2009/10/11 11:22:55 erk Exp $
+// $Id: FederationManagement.hh,v 3.26 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_RTIA_FEDERATION_MANAGEMENT
@@ -30,6 +30,9 @@
 #include "Statistics.hh"
 
 namespace certi {
+
+class RootObject;
+
 namespace rtia {
 
 class TimeManagement ;
@@ -44,7 +47,8 @@
     void checkFederationRestoring(void) throw (RestoreInProgress);
 
     // -- Create/Destroy --
-    void createFederationExecution(std::string theName, TypeException &e)
+    void createFederationExecution(const std::string& theName,
+                                   const std::string& fedId, TypeException &e)
          throw ( FederationExecutionAlreadyExists,
                  CouldNotOpenFED,ErrorReadingFED,
                  RTIinternalError);
@@ -53,6 +57,7 @@
     // -- Join/Resign --
     FederateHandle joinFederationExecution(std::string Federate,
                                            std::string Federation,
+                                           RootObject* rootObject,
                                            TypeException &e);
 
     void resignFederationExecution(RTI::ResignAction action,
@@ -101,7 +106,6 @@
     Handle _numero_federation ;
     FederateHandle federate ;
     bool _fin_execution ;
-    std::string  _FEDid ;
 
 private:
     Communications *comm ;
@@ -124,4 +128,4 @@
 
 #endif // _CERTI_RTIA_FEDERATION_MANAGEMENT
 
-// $Id: FederationManagement.hh,v 3.25 2009/10/11 11:22:55 erk Exp $
+// $Id: FederationManagement.hh,v 3.26 2009/11/18 18:50:48 erk Exp $

Index: RTIA/RTIA.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA.cc,v
retrieving revision 3.30
retrieving revision 3.31
diff -u -b -r3.30 -r3.31
--- RTIA/RTIA.cc        21 Oct 2009 18:56:28 -0000      3.30
+++ RTIA/RTIA.cc        18 Nov 2009 18:50:48 -0000      3.31
@@ -18,7 +18,7 @@
 // along with this program ; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 //
-// $Id: RTIA.cc,v 3.30 2009/10/21 18:56:28 erk Exp $
+// $Id: RTIA.cc,v 3.31 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include <config.h>
@@ -60,26 +60,6 @@
 
 
 RTIA::~RTIA() {
-     // Remove temporary file (if not yet done)
-     if ( fm->_FEDid.c_str() != NULL)
-        {
-        if ( fm->_FEDid[0] != '\0' )
-           {
-           // If RTIA end (abort ?) before join don't remove file if not 
temporary
-           // temporary file name begins with _RT ( yes, but...)
-           if ( fm->_FEDid[0] != '_' || fm->_FEDid[1] != 'R' || fm->_FEDid[2] 
!= 'T')
-              {
-               std::cout<<"** W ** I don't remove file 
"<<fm->_FEDid<<std::endl;
-              }
-           else
-              {
-              std::cout<<"*** W ** Removing temporary file "<<fm->_FEDid<<" on 
RTIA stop."<<std::endl;
-              std::remove(fm->_FEDid.c_str());
-              }
-           fm->_FEDid[0] = '\0' ;
-           }
-        }
-
     /* 
      * FIXME Erk
      * this is may be a design issue
@@ -200,4 +180,4 @@
 
 }} // namespace certi/rtia
 
-// $Id: RTIA.cc,v 3.30 2009/10/21 18:56:28 erk Exp $
+// $Id: RTIA.cc,v 3.31 2009/11/18 18:50:48 erk Exp $

Index: RTIA/RTIA_federate.cc
===================================================================
RCS file: /sources/certi/certi/RTIA/RTIA_federate.cc,v
retrieving revision 3.100
retrieving revision 3.101
diff -u -b -r3.100 -r3.101
--- RTIA/RTIA_federate.cc       21 Oct 2009 20:04:47 -0000      3.100
+++ RTIA/RTIA_federate.cc       18 Nov 2009 18:50:48 -0000      3.101
@@ -117,8 +117,8 @@
         D.Out(pdTrace,
               "Receiving Message from Federate, type CreateFederation.");
         // Store FEDid for future usage (JOIN_FEDERATION_EXECUTION) into fm
-        fm->_FEDid = req->getFEDid() ;
-        fm->createFederationExecution(req->getFederationName(), e);
+        fm->createFederationExecution(req->getFederationName(),
+                                      req->getFEDid(), e);
         if ( e == e_RTIinternalError )
             {
             rep.setException(e,"Federate is yet a creator or a member !");
@@ -126,7 +126,7 @@
         D.Out(pdTrace, "Receiving Message from Federate, "
               "type CreateFederation done.");
         // RTIA needs FEDid into the answer (rep Message) to federate
-        rep.setFEDid(fm->_FEDid) ;
+        rep.setFEDid(req->getFEDid()) ;
         // RTIA needs federation name into the answer (rep Message) to federate
         rep.setFederationName(req->getFederationName());
         break ;
@@ -144,73 +144,25 @@
         rep.setFederationName(req->getFederationName());
         break ;
 
-      case Message::JOIN_FEDERATION_EXECUTION: {
+      case Message::JOIN_FEDERATION_EXECUTION:
           D.Out(pdTrace,
                 "Receiving Message from Federate, type JoinFederation.");
           rep.setFederate(fm->joinFederationExecution(req->getFederateName(),
                                                       req->getFederationName(),
-                                                      e));
+                                                      rootObject, e));
           if ( e == e_NO_EXCEPTION )
               {
               /// Set RTIA PrettyDebug federate name
               PrettyDebug::setFederateName(req->getFederateName());
               // Set federation name for the answer message (rep)
               rep.setFederationName(req->getFederationName());
-
-              string filename = fm->_FEDid ;
-              int nbcar_filename=filename.length();
-              bool is_a_fed = false ;
-              bool is_an_xml = false ;
-
-              // Hope there is a . before fed or xml
-              if ( filename.at(nbcar_filename-4) != '.' )
-                  throw CouldNotOpenFED(". missing or not in place");
-
-              string extension = filename.substr(nbcar_filename-3,3) ;
-              if ( !strcasecmp(extension.c_str(),"fed") )
-                  {
-                  is_a_fed = true ;
-                  D.Out(pdTrace, "Trying to use .fed file");
-                  }
-              else if  ( !strcasecmp(extension.c_str(),"xml") )
-                  {
-                  is_an_xml = true ;
-                  D.Out(pdTrace, "Trying to use .xml file");
-                  }
-              else
-                  throw CouldNotOpenFED("nor .fed nor .xml");
-
-              ifstream fdd(filename.c_str());
-              if (fdd.is_open())
-                  {
-                  if ( is_a_fed )
-                      {
-                     int result = certi::fedparser::build(filename.c_str(),
-                                                          rootObject, false);
-                      if (result != 0 ) throw ErrorReadingFED("invalid .fed");
-                      }
-                  else if ( is_an_xml )
-                      {
-                      if (XmlParser::exists())
-                          {
-                          XmlParser parser(rootObject);
-                          parser.parse(filename);
-                          }
-                      else
-                          throw CouldNotOpenFED("no XmlParser");
-                      }
-                  }
-              else
-                  throw CouldNotOpenFED("File not found");
-              break ;
               }
           else
               {
               // JOIN FAILED
               throw FederateAlreadyExecutionMember("Federate yet joined or 
same name");
-              break;
-              }
       }
+          break;
       case Message::RESIGN_FEDERATION_EXECUTION:
         D.Out(pdTrace,
               "Receiving Message from Federate, type ResignFederation.");

Index: scripts/NW_MessageType.txt
===================================================================
RCS file: /sources/certi/certi/scripts/NW_MessageType.txt,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- scripts/NW_MessageType.txt  12 May 2008 12:17:04 -0000      1.2
+++ scripts/NW_MessageType.txt  18 Nov 2009 18:50:48 -0000      1.3
@@ -82,5 +82,4 @@
 DDM_SUBSCRIBE_INTERACTION 
 DDM_UNSUBSCRIBE_INTERACTION 
 PROVIDE_ATTRIBUTE_VALUE_UPDATE 
-GET_FED_FILE 
 LAST

Index: scripts/GenerateMessages.py
===================================================================
RCS file: /sources/certi/certi/scripts/GenerateMessages.py,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- scripts/GenerateMessages.py 16 Sep 2009 09:57:29 -0000      1.22
+++ scripts/GenerateMessages.py 18 Nov 2009 18:50:48 -0000      1.23
@@ -19,7 +19,7 @@
 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 ## USA
 ##
-## $Id: GenerateMessages.py,v 1.22 2009/09/16 09:57:29 erk Exp $
+## $Id: GenerateMessages.py,v 1.23 2009/11/18 18:50:48 erk Exp $
 ## ----------------------------------------------------------------------------
 
 """
@@ -1181,46 +1181,66 @@
         if field.typeid.name == "onoff":
             if field.qualifier == "repeated":
                 stream.write(self.getIndent())
+                stream.write("uint32_t getNum"+self.upperFirst(field.name)+"() 
const")
+                stream.write(" {return "+field.name+".size();}\n")
+
+                stream.write(self.getIndent())
+                stream.write("void 
setNum"+self.upperFirst(field.name)+"(uint32_t num)")
+                stream.write(" {"+field.name+".resize(num);}\n")
+
+                stream.write(self.getIndent())
                 stream.write("void "+field.name+"On(uint32_t rank)")
-                stream.write(" {"+field.name+"[rank] = true;};\n")
+                stream.write(" {"+field.name+"[rank] = true;}\n")
             
                 stream.write(self.getIndent())
                 stream.write("void "+field.name+"Off(uint32_t rank)")
-                stream.write(" {"+field.name+"[rank] = false;};\n")
+                stream.write(" {"+field.name+"[rank] = false;}\n")
         
                 stream.write(self.getIndent())
-                stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On(uint32_t rank)")
-                stream.write(" {return "+field.name+"[rank];};\n")
+                stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On(uint32_t rank) const")
+                stream.write(" {return "+field.name+"[rank];}\n")
             else:
                 stream.write(self.getIndent())
                 stream.write("void "+field.name+"On()")
-                stream.write(" {"+field.name+" = true;};\n")
+                stream.write(" {"+field.name+" = true;}\n")
             
                 stream.write(self.getIndent())
                 stream.write("void "+field.name+"Off()")
-                stream.write(" {"+field.name+" = false;};\n")
+                stream.write(" {"+field.name+" = false;}\n")
         
                 stream.write(self.getIndent())
-                stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On()")
-                stream.write(" {return "+field.name+";};\n")
+                stream.write(targetTypeName+ " 
is"+self.upperFirst(field.name)+"On() const")
+                stream.write(" {return "+field.name+";}\n")
         else:
             if field.qualifier == "repeated":
                 stream.write(self.getIndent())
-                stream.write(targetTypeName + " 
get"+self.upperFirst(field.name)+"(uint32_t rank)")
-                stream.write(" {return "+field.name+"[rank];};\n")  
+                stream.write("uint32_t getNum"+self.upperFirst(field.name)+"() 
const")
+                stream.write(" {return "+field.name+".size();}\n")
+
+                stream.write(self.getIndent())
+                stream.write("void 
setNum"+self.upperFirst(field.name)+"(uint32_t num)")
+                stream.write(" {"+field.name+".resize(num);}\n")
+
+                stream.write(self.getIndent())
+                stream.write("const "+targetTypeName+"& 
get"+self.upperFirst(field.name)+"(uint32_t rank) const")
+                stream.write(" {return "+field.name+"[rank];}\n")  
+                
+                stream.write(self.getIndent())
+                stream.write(targetTypeName+"& 
get"+self.upperFirst(field.name)+"(uint32_t rank)")
+                stream.write(" {return "+field.name+"[rank];}\n")  
                 
                 stream.write(self.getIndent())
-                stream.write("void set"+self.upperFirst(field.name)+"(")
-                stream.write(targetTypeName+" 
new"+self.upperFirst(field.name)+", uint32_t rank)")
-                stream.write(" 
{"+field.name+"[rank]=new"+self.upperFirst(field.name)+";};\n")      
+                stream.write("void set"+self.upperFirst(field.name)+"(const ")
+                stream.write(targetTypeName+"& 
new"+self.upperFirst(field.name)+", uint32_t rank)")
+                stream.write(" 
{"+field.name+"[rank]=new"+self.upperFirst(field.name)+";}\n")      
             else:
                 stream.write(self.getIndent())
-                stream.write(targetTypeName + " 
get"+self.upperFirst(field.name)+"()")
-                stream.write(" {return "+field.name+";};\n")        
+                stream.write("const "+targetTypeName+"& 
get"+self.upperFirst(field.name)+"() const")
+                stream.write(" {return "+field.name+";}\n")        
             
                 stream.write(self.getIndent())
-                stream.write("void set"+self.upperFirst(field.name)+"(")
-                stream.write(targetTypeName+" 
new"+self.upperFirst(field.name)+") {")
+                stream.write("void set"+self.upperFirst(field.name)+"(const ")
+                stream.write(targetTypeName+"& 
new"+self.upperFirst(field.name)+") {")
                 if field.qualifier == "optional":                              
          
                     stream.write("\n")
                     self.indent();                    
@@ -1230,7 +1250,7 @@
                     stream.write(self.getIndent())                    
                 else:
                     
stream.write(field.name+"=new"+self.upperFirst(field.name)+";")
-                stream.write("};\n")
+                stream.write("}\n")
             
     def writeDeclarationFieldStatement(self,stream,field):
         stream.write(self.getIndent())     
@@ -1315,8 +1335,10 @@
                 stream.write("class CERTI_EXPORT %s" % msg.name)
                 if msg.hasMerge():
                     stream.write(" : public %s {\n" % msg.merge.name)          
      
+                    virtual = "virtual "
                 else:
                     stream.write(" {\n")
+                    virtual = ""
                 
                 self.indent()
                 
@@ -1327,14 +1349,14 @@
                    stream.write(self.getIndent()+"typedef %s 
Super;\n"%msg.merge.name) 
                 # now write constructor/destructor
                 stream.write(self.getIndent()+msg.name+"();\n")
-                stream.write(self.getIndent()+"virtual ~"+msg.name+"();\n")
+                stream.write(self.getIndent()+virtual+"~"+msg.name+"();\n")
                 
                 # write virtual serialize and deserialize
                 # if we have some specific field
                 if len(msg.fields)>0:
                     # serialize/deserialize 
-                    stream.write(self.getIndent()+"virtual void 
serialize(MessageBuffer& msgBuffer);\n")
-                    stream.write(self.getIndent()+"virtual void 
deserialize(MessageBuffer& msgBuffer);\n")
+                    stream.write(self.getIndent()+virtual+"void 
serialize(MessageBuffer& msgBuffer);\n")
+                    stream.write(self.getIndent()+virtual+"void 
deserialize(MessageBuffer& msgBuffer);\n")
                     # specific getter/setter
                     stream.write(self.getIndent()+self.commentLineBeginWith+" 
specific Getter(s)/Setter(s)\n")
                     for field in msg.fields:

Index: scripts/CERTI_NetworkMessage.msg
===================================================================
RCS file: /sources/certi/certi/scripts/CERTI_NetworkMessage.msg,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- scripts/CERTI_NetworkMessage.msg    16 Sep 2009 09:57:29 -0000      1.11
+++ scripts/CERTI_NetworkMessage.msg    18 Nov 2009 18:50:48 -0000      1.12
@@ -43,6 +43,73 @@
     language CXX [#include "certi.hh"]
 }
 
+native DimensionHandle {
+    language CXX [#include "certi.hh"]
+}
+
+native InteractionClassHandle {
+    language CXX [#include "certi.hh"]
+}
+
+native ObjectClassHandle {
+    language CXX [#include "certi.hh"]
+}
+
+native ParameterHandle {
+    language CXX [#include "certi.hh"]
+}
+
+native SpaceHandle {
+    language CXX [#include "certi.hh"]
+}
+
+native TransportType {
+    language CXX [#include "certi.hh"]
+}
+
+native OrderType {
+    language CXX [#include "certi.hh"]
+}
+
+message NM_FOM_Dimension {
+        required DimensionHandle handle
+        required string name
+}
+
+message NM_FOM_Rounting_Space {
+       required SpaceHandle space
+       required string name
+        repeated NM_FOM_Dimension dimensions
+}
+
+message NM_FOM_Attribute {
+        required AttributeHandle handle
+        required string name
+       required SpaceHandle spaceHandle
+       required OrderType order
+       required TransportType transport
+}
+
+message NM_FOM_Object_Class {
+       required ObjectClassHandle handle
+       required ObjectClassHandle superClass
+       required string name
+        repeated NM_FOM_Attribute attributes
+}
+
+message NM_FOM_Parameter {
+        required ParameterHandle handle
+        required string name
+}
+
+message NM_FOM_Interaction_Class {
+       required InteractionClassHandle handle
+       required SpaceHandle space
+       required OrderType order
+       required TransportType transport
+        repeated NM_FOM_Parameter parameters
+}
+
 message NM_Close_Connexion : merge NetworkMessage {}
 
 message NM_Message_Null : merge NetworkMessage {}
@@ -66,6 +133,9 @@
        required uint32  bestEffortPeer
        required string  federationName // the federation name
        required string  federateName   // the federate name (should be unique 
within a federation)
+        repeated NM_FOM_Rounting_Space routingSpaces
+        repeated NM_FOM_Object_Class objectClasses
+        repeated NM_FOM_Interaction_Class interactionClasses
 }
 
 // Resign from federation
@@ -83,11 +153,6 @@
 
 message NM_Time_Constrained_Enabled : merge NetworkMessage {}
 
-native ObjectClassHandle {
-       language CXX [#include "certi.hh"]
-}
-
-
 message NM_Set_Class_Relevance_Advisory_Switch : merge NetworkMessage {    
        required onoff classRelevanceAdvisorySwitch // value of CRA switch      
 }
@@ -152,10 +217,6 @@
 
 message NM_Unpublish_Object_Class : merge NetworkMessage {}
 
-native InteractionClassHandle {
-       language CXX [#include "certi.hh"]
-}
-
 message NM_Publish_Interaction_Class : merge NetworkMessage {
        required InteractionClassHandle interactionClass // the interaction 
class
 }
@@ -244,10 +305,6 @@
 
 message NM_Confirm_Attribute_Ownership_Acquisition_Cancellation : merge 
NM_Request_Object_Attribute_Value_Update {}
 
-native SpaceHandle {
-       language CXX [#include "certi.hh"]
-}
-
 message NM_DDM_Create_Region : merge NM_DDM_Base {
        required SpaceHandle space
        required int32 region
@@ -277,13 +334,6 @@
 
 message NM_Provide_Attribute_Value_Update : merge 
NM_Request_Object_Attribute_Value_Update {}
 
-message NM_Get_FED_File : merge NetworkMessage {
-        required string federateName // the Federate name
-       required string FEDid        // the FED identifier
-        required uint32 lineno       // the line number, 0 means open the file
-       required string line         // one line of the FED file
-}
-
 message NM_Start_Registration_For_Object_Class : merge NetworkMessage {
        required ObjectClassHandle objectClass
 }

Index: libCERTI/Interaction.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/Interaction.cc,v
retrieving revision 3.54
retrieving revision 3.55
diff -u -b -r3.54 -r3.55
--- libCERTI/Interaction.cc     21 Oct 2009 20:04:46 -0000      3.54
+++ libCERTI/Interaction.cc     18 Nov 2009 18:50:48 -0000      3.55
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: Interaction.cc,v 3.54 2009/10/21 20:04:46 erk Exp $
+// $Id: Interaction.cc,v 3.55 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 
@@ -45,7 +45,7 @@
 
 Interaction::Interaction(const std::string& theName, InteractionClassHandle 
theHandle, TransportType theTransport, OrderType theOrder)
 : parent(0), depth(0), transport(theTransport), order(theOrder), 
handle(theHandle),
-id(PublicLevelID)
+  superClass(0), id(PublicLevelID), space(0)
 {
        setName(theName);
        /*
@@ -547,4 +547,4 @@
 
 } // namespace certi
 
-// $Id: Interaction.cc,v 3.54 2009/10/21 20:04:46 erk Exp $
+// $Id: Interaction.cc,v 3.55 2009/11/18 18:50:48 erk Exp $

Index: libCERTI/ObjectClass.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectClass.cc,v
retrieving revision 3.68
retrieving revision 3.69
diff -u -b -r3.68 -r3.69
--- libCERTI/ObjectClass.cc     21 Oct 2009 20:04:46 -0000      3.68
+++ libCERTI/ObjectClass.cc     18 Nov 2009 18:50:48 -0000      3.69
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: ObjectClass.cc,v 3.68 2009/10/21 20:04:46 erk Exp $
+// $Id: ObjectClass.cc,v 3.69 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include  "Object.hh"
@@ -1827,11 +1827,11 @@
 //     }
 // }
 
-ObjectClass::AttributeList_t
+const ObjectClass::AttributeList_t&
 ObjectClass::getAttributeList(void) {
            return attributeSet;
 }
 
 } // namespace certi
 
-// $Id: ObjectClass.cc,v 3.68 2009/10/21 20:04:46 erk Exp $
+// $Id: ObjectClass.cc,v 3.69 2009/11/18 18:50:48 erk Exp $

Index: libCERTI/Interaction.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/Interaction.hh,v
retrieving revision 3.36
retrieving revision 3.37
diff -u -b -r3.36 -r3.37
--- libCERTI/Interaction.hh     9 Nov 2008 12:41:40 -0000       3.36
+++ libCERTI/Interaction.hh     18 Nov 2009 18:50:48 -0000      3.37
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: Interaction.hh,v 3.36 2008/11/09 12:41:40 gotthardp Exp $
+// $Id: Interaction.hh,v 3.37 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_INTERACTION_HH
@@ -70,6 +70,12 @@
         * @param[in] transport the transport type
         * @param[in] order the receive order type
         */
+
+       /**
+        * The type for the parameter list.
+        */
+       typedef std::list<Parameter*> ParameterList_t;
+
     Interaction(const std::string& theName, InteractionClassHandle theHandle, 
TransportType theTransport, OrderType theOrder);
     /**
      * Destructor.
@@ -184,6 +190,12 @@
 
     void broadcastInteractionMessage(InteractionBroadcastList *, const 
RTIRegion *);
 
+    /**
+     * Getter for the parameter list of the interaction class.
+     * param[out] ParameterList_t @see Interaction::ParameterList_t
+     */
+    const ParameterList_t& getParameterList(void) const { return parameterSet; 
}
+
     //! This Object helps to find a TCPLink given a Federate Handle.
     SecurityServer *server ;
     /**
@@ -236,7 +248,7 @@
     SpaceHandle space ;
 
     //! List of this Interaction Class' Parameters.
-    std::list<Parameter *> parameterSet ;
+    ParameterList_t parameterSet ;
 
     typedef std::set<FederateHandle> PublishersList ;
     PublishersList publishers ;
@@ -246,4 +258,4 @@
 
 #endif // _CERTI_INTERACTION.HH
 
-// $Id: Interaction.hh,v 3.36 2008/11/09 12:41:40 gotthardp Exp $
+// $Id: Interaction.hh,v 3.37 2009/11/18 18:50:48 erk Exp $

Index: libCERTI/ObjectClass.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectClass.hh,v
retrieving revision 3.45
retrieving revision 3.46
diff -u -b -r3.45 -r3.46
--- libCERTI/ObjectClass.hh     16 Dec 2008 07:08:29 -0000      3.45
+++ libCERTI/ObjectClass.hh     18 Nov 2009 18:50:48 -0000      3.46
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: ObjectClass.hh,v 3.45 2008/12/16 07:08:29 approx Exp $
+// $Id: ObjectClass.hh,v 3.46 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_OBJECT_CLASS_HH
@@ -269,7 +269,7 @@
          * Getter for the attribute list of the object class.
          * param[out] AttributeList_t @see ObjectClass::AttributeList_t
          */
-       AttributeList_t getAttributeList(void);
+       const AttributeList_t& getAttributeList(void);
 
        //! This Object help to find a TCPLink from a Federate Handle.
        SecurityServer *server ;
@@ -334,4 +334,4 @@
 
 #endif // _CERTI_OBJECT_CLASS_HH
 
-// $Id: ObjectClass.hh,v 3.45 2008/12/16 07:08:29 approx Exp $
+// $Id: ObjectClass.hh,v 3.46 2009/11/18 18:50:48 erk Exp $

Index: libCERTI/RoutingSpace.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/RoutingSpace.hh,v
retrieving revision 3.10
retrieving revision 3.11
diff -u -b -r3.10 -r3.11
--- libCERTI/RoutingSpace.hh    31 Oct 2007 10:30:22 -0000      3.10
+++ libCERTI/RoutingSpace.hh    18 Nov 2009 18:50:48 -0000      3.11
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RoutingSpace.hh,v 3.10 2007/10/31 10:30:22 erk Exp $
+// $Id: RoutingSpace.hh,v 3.11 2009/11/18 18:50:48 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef _CERTI_ROUTING_SPACE
@@ -86,6 +86,8 @@
     
     Extent createExtent() const ;
 
+    const std::vector<Dimension>& getDimensions() const { return dimensions; }
+
 private:
     std::vector<Dimension> dimensions ;
 };
@@ -94,5 +96,5 @@
 
 #endif // _CERTI_ROUTING_SPACE
 
-// $Id: RoutingSpace.hh,v 3.10 2007/10/31 10:30:22 erk Exp $
+// $Id: RoutingSpace.hh,v 3.11 2009/11/18 18:50:48 erk Exp $
 

Index: libCERTI/ObjectClassAttribute.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/ObjectClassAttribute.cc,v
retrieving revision 3.33
retrieving revision 3.34
diff -u -b -r3.33 -r3.34
--- libCERTI/ObjectClassAttribute.cc    21 Oct 2009 20:04:46 -0000      3.33
+++ libCERTI/ObjectClassAttribute.cc    18 Nov 2009 18:50:49 -0000      3.34
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: ObjectClassAttribute.cc,v 3.33 2009/10/21 20:04:46 erk Exp $
+// $Id: ObjectClassAttribute.cc,v 3.34 2009/11/18 18:50:49 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include "ObjectClassAttribute.hh"
@@ -41,7 +41,7 @@
 static PrettyDebug D("OBJECTCLASSATTRIBUTE", "(Obj.Cl.Attr) ");
 
 ObjectClassAttribute::ObjectClassAttribute(const std::string theName, 
TransportType theTransport, OrderType theOrder)
- : order(theOrder), transport(theTransport) {
+  : level(PublicLevelID), order(theOrder), transport(theTransport), server(0), 
handle(0), space(0) {
        setName(theName);
 
 }
@@ -219,4 +219,4 @@
 
 } // namespace
 
-// $Id: ObjectClassAttribute.cc,v 3.33 2009/10/21 20:04:46 erk Exp $
+// $Id: ObjectClassAttribute.cc,v 3.34 2009/11/18 18:50:49 erk Exp $

Index: libCERTI/PrettyDebEx.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/PrettyDebEx.cc,v
retrieving revision 4.7
retrieving revision 4.8
diff -u -b -r4.7 -r4.8
--- libCERTI/PrettyDebEx.cc     21 Oct 2009 19:51:13 -0000      4.7
+++ libCERTI/PrettyDebEx.cc     18 Nov 2009 18:50:49 -0000      4.8
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: PrettyDebEx.cc,v 4.7 2009/10/21 19:51:13 erk Exp $
+// $Id: PrettyDebEx.cc,v 4.8 2009/11/18 18:50:49 erk Exp $
 // ----------------------------------------------------------------------------
 
 
@@ -309,7 +309,6 @@
                case certi::NetworkMessage::DDM_UNSUBSCRIBE_ATTRIBUTES :        
                                        
strcat(theMessage,"DDM_UNSUBSCRIBE_ATTRIBUTES"); break;
                case certi::NetworkMessage::DDM_SUBSCRIBE_INTERACTION :         
                                                
strcat(theMessage,"DDM_SUBSCRIBE_INTERACTION"); break;
                case certi::NetworkMessage::DDM_UNSUBSCRIBE_INTERACTION :       
                                        
strcat(theMessage,"DDM_UNSUBSCRIBE_INTERACTION"); break;
-               case certi::NetworkMessage::GET_FED_FILE :                      
                                                                
strcat(theMessage,"GET_FED_FILE"); break;
                default:                                                        
                                                                                
                                                sprintf(theMessage,"NETWORK 
UNKNOWED MESSAGE %hd",testMess);
                }
        }
@@ -318,4 +317,4 @@
 }
 #endif // NDEBUG
 
-// $Id: PrettyDebEx.cc,v 4.7 2009/10/21 19:51:13 erk Exp $
+// $Id: PrettyDebEx.cc,v 4.8 2009/11/18 18:50:49 erk Exp $

Index: libCERTI/RootObject.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/RootObject.hh,v
retrieving revision 3.32
retrieving revision 3.33
diff -u -b -r3.32 -r3.33
--- libCERTI/RootObject.hh      8 Nov 2008 11:08:03 -0000       3.32
+++ libCERTI/RootObject.hh      18 Nov 2009 18:50:49 -0000      3.33
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RootObject.hh,v 3.32 2008/11/08 11:08:03 erk Exp $
+// $Id: RootObject.hh,v 3.33 2009/11/18 18:50:49 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef LIBCERTI_ROOT_OBJECT
@@ -37,6 +37,7 @@
        class InteractionSet;
        class RTIRegion;
        class RoutingSpace;
+        class NM_Join_Federation_Execution;
 }  // namespace certi
 
 #include "certi.hh"
@@ -166,6 +167,16 @@
      */
     ObjectSet      *objects;
 
+    /**
+     * Serialize the federate object model into a message buffer.
+     */
+    void getFOM(NM_Join_Federation_Execution& message);
+
+    /**
+     * Deserialize the federate object model from a message buffer.
+     */
+    void setFOM(const NM_Join_Federation_Execution& message);
+
 private:
 
     std::vector<RoutingSpace> spaces;
@@ -183,4 +194,4 @@
 
 #endif // LIBCERTI_ROOT_OBJECT
 
-// $Id: RootObject.hh,v 3.32 2008/11/08 11:08:03 erk Exp $
+// $Id: RootObject.hh,v 3.33 2009/11/18 18:50:49 erk Exp $

Index: libCERTI/NM_Classes.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/NM_Classes.cc,v
retrieving revision 3.19
retrieving revision 3.20
diff -u -b -r3.19 -r3.20
--- libCERTI/NM_Classes.cc      14 Sep 2009 21:21:31 -0000      3.19
+++ libCERTI/NM_Classes.cc      18 Nov 2009 18:50:49 -0000      3.20
@@ -301,9 +301,6 @@
        case NetworkMessage::PROVIDE_ATTRIBUTE_VALUE_UPDATE:
                msg = new NM_Provide_Attribute_Value_Update(); 
                break;
-       case NetworkMessage::GET_FED_FILE:
-               msg = new NM_Get_FED_File(); 
-               break;
        case NetworkMessage::LAST:
                throw RTIinternalError("LAST message type should not be 
used!!");
                msg = new NM_Last(); 
@@ -419,6 +416,112 @@
 }
 /*<END>---------- Message_Null ------------<END>*/
 
+/*<BEGIN>---------- FOM_Dimension ------------<BEGIN>*/
+void NM_FOM_Dimension::serialize(MessageBuffer& msgBuffer) {
+       msgBuffer.write_uint32(_handle);
+       msgBuffer.write_string(_name);
+}
+void NM_FOM_Dimension::deserialize(MessageBuffer& msgBuffer) {
+       _handle = msgBuffer.read_uint32();
+       _name = msgBuffer.read_string();
+}
+/*<END>---------- FOM_Dimension ------------<END>*/
+
+/*<BEGIN>---------- FOM_Routing_Space ------------<BEGIN>*/
+void NM_FOM_Routing_Space::serialize(MessageBuffer& msgBuffer) {
+       msgBuffer.write_uint32(_handle);
+       msgBuffer.write_string(_name);
+        uint32_t size = _dimensions.size();
+       msgBuffer.write_uint32(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _dimensions[i].serialize(msgBuffer);
+} /* end of serialize */ 
+void NM_FOM_Routing_Space::deserialize(MessageBuffer& msgBuffer) {
+       _handle = msgBuffer.read_uint32();
+       _name = msgBuffer.read_string();
+       uint32_t size = msgBuffer.read_uint32();
+        _dimensions.resize(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _dimensions[i].deserialize(msgBuffer);
+} /* end of deserialize */
+/*<END>---------- FOM_Routing_Space ------------<END>*/
+
+/*<BEGIN>---------- FOM_Attribute ------------<BEGIN>*/
+void NM_FOM_Attribute::serialize(MessageBuffer& msgBuffer) {
+       msgBuffer.write_uint32(_handle);
+       msgBuffer.write_string(_name);
+       msgBuffer.write_uint32(_spaceHandle);
+       msgBuffer.write_uint8(_order);
+       msgBuffer.write_uint8(_transport);
+}
+void NM_FOM_Attribute::deserialize(MessageBuffer& msgBuffer) {
+       _handle = msgBuffer.read_uint32();
+       _name = msgBuffer.read_string();
+        _spaceHandle = msgBuffer.read_uint32();
+       _order = msgBuffer.read_uint8();
+       _transport = msgBuffer.read_uint8();
+}
+/*<END>---------- FOM_Attribute ------------<END>*/
+
+/*<BEGIN>---------- FOM_Object_Class ------------<BEGIN>*/
+void NM_FOM_Object_Class::serialize(MessageBuffer& msgBuffer) {
+       msgBuffer.write_uint32(_handle);
+       msgBuffer.write_string(_name);
+       msgBuffer.write_uint32(_superclassHandle);
+        uint32_t size = _attributes.size();
+       msgBuffer.write_uint32(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _attributes[i].serialize(msgBuffer);
+} /* end of serialize */ 
+void NM_FOM_Object_Class::deserialize(MessageBuffer& msgBuffer) {
+       _handle = msgBuffer.read_uint32();
+       _name = msgBuffer.read_string();
+        _superclassHandle = msgBuffer.read_uint32();
+       uint32_t size = msgBuffer.read_uint32();
+        _attributes.resize(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _attributes[i].deserialize(msgBuffer);
+} /* end of deserialize */
+/*<END>---------- FOM_Object_Class ------------<END>*/
+
+/*<BEGIN>---------- FOM_FOM_Parameter ------------<BEGIN>*/
+void NM_FOM_Parameter::serialize(MessageBuffer& msgBuffer) {
+       msgBuffer.write_uint32(_handle);
+       msgBuffer.write_string(_name);
+}
+void NM_FOM_Parameter::deserialize(MessageBuffer& msgBuffer) {
+       _handle = msgBuffer.read_uint32();
+       _name = msgBuffer.read_string();
+}
+/*<END>---------- FOM_FOM_Parameter ------------<END>*/
+
+/*<BEGIN>---------- FOM_Interaction_Class ------------<BEGIN>*/
+void NM_FOM_Interaction_Class::serialize(MessageBuffer& msgBuffer) {
+       msgBuffer.write_uint32(_handle);
+       msgBuffer.write_string(_name);
+       msgBuffer.write_uint32(_superclassHandle);
+       msgBuffer.write_uint32(_spaceHandle);
+       msgBuffer.write_uint8(_order);
+       msgBuffer.write_uint8(_transport);
+        uint32_t size = _parameters.size();
+       msgBuffer.write_uint32(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _parameters[i].serialize(msgBuffer);
+} /* end of serialize */ 
+void NM_FOM_Interaction_Class::deserialize(MessageBuffer& msgBuffer) {
+       _handle = msgBuffer.read_uint32();
+       _name = msgBuffer.read_string();
+        _superclassHandle = msgBuffer.read_uint32();
+        _spaceHandle = msgBuffer.read_uint32();
+       _order = msgBuffer.read_uint8();
+       _transport = msgBuffer.read_uint8();
+       uint32_t size = msgBuffer.read_uint32();
+        _parameters.resize(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _parameters[i].deserialize(msgBuffer);
+} /* end of deserialize */
+/*<END>---------- FOM_Interaction_Class ------------<END>*/
+
 /*<BEGIN>---------- Create_Federation_Execution ------------<BEGIN>*/
 NM_Create_Federation_Execution::NM_Create_Federation_Execution() {
        this->name = "CREATE_FEDERATION_EXECUTION";
@@ -469,7 +572,6 @@
 NM_Join_Federation_Execution::NM_Join_Federation_Execution() {
        this->name = "JOIN_FEDERATION_EXECUTION";
        this->type = NetworkMessage::JOIN_FEDERATION_EXECUTION;
-       federateName = std::string("");
        /* specific field init */
 }
 NM_Join_Federation_Execution::~NM_Join_Federation_Execution() {
@@ -484,6 +586,18 @@
        msgBuffer.write_uint32(bestEffortPeer);
        msgBuffer.write_string(federationName);
        msgBuffer.write_string(federateName);
+        uint32_t size = _routingSpaces.size();
+       msgBuffer.write_uint32(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _routingSpaces[i].serialize(msgBuffer);
+        size = _objectClasses.size();
+       msgBuffer.write_uint32(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _objectClasses[i].serialize(msgBuffer);
+        size = _interactionClasses.size();
+       msgBuffer.write_uint32(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _interactionClasses[i].serialize(msgBuffer);
 } /* end of serialize */ 
 void NM_Join_Federation_Execution::deserialize(MessageBuffer& msgBuffer) {
        /* call mother class */      
@@ -495,6 +609,18 @@
        bestEffortPeer     = msgBuffer.read_uint32();
        federationName     = msgBuffer.read_string();
        federateName       = msgBuffer.read_string();
+       uint32_t size = msgBuffer.read_uint32();
+        _routingSpaces.resize(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _routingSpaces[i].deserialize(msgBuffer);
+       size = msgBuffer.read_uint32();
+        _objectClasses.resize(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _objectClasses[i].deserialize(msgBuffer);
+       size = msgBuffer.read_uint32();
+        _interactionClasses.resize(size);
+        for (uint32_t i = 0; i < size; ++i)
+          _interactionClasses[i].deserialize(msgBuffer);
 } /* end of deserialize */
 /*<END>---------- Join_Federation_Execution ------------<END>*/
 
@@ -1779,38 +1905,6 @@
 }
 /*<END>---------- Provide_Attribute_Value_Update ------------<END>*/
 
-/*<BEGIN>---------- Get_FED_File ------------<BEGIN>*/
-NM_Get_FED_File::NM_Get_FED_File() {
-       this->name = "GET_FED_FILE";
-       this->type = NetworkMessage::GET_FED_FILE;
-       /* specific field init */
-}
-NM_Get_FED_File::~NM_Get_FED_File() {
-}
-void NM_Get_FED_File::serialize(MessageBuffer& msgBuffer) {
-       /* call mother class */      
-       Super::serialize(msgBuffer); 
-       /* specific code (if any) goes here */
-       msgBuffer.write_string(federateName);
-       msgBuffer.write_string(FEDid);
-       msgBuffer.write_int16(lineno);
-       if (lineno>0) {
-               msgBuffer.write_string(line);
-       }
-} /* end of serialize */ 
-void NM_Get_FED_File::deserialize(MessageBuffer& msgBuffer) {
-       /* call mother class */      
-       Super::deserialize(msgBuffer); 
-       /* specific code (if any) goes here */
-       federateName = msgBuffer.read_string();
-       FEDid        = msgBuffer.read_string();
-       lineno       = msgBuffer.read_int16();
-       if (lineno>0) {
-               line = msgBuffer.read_string();
-       }
-} /* end of deserialize */
-/*<END>---------- Get_FED_File ------------<END>*/
-
 /*<BEGIN>---------- Last ------------<BEGIN>*/
 NM_Last::NM_Last() {
        this->name = "LAST";

Index: libCERTI/NM_Classes.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/NM_Classes.hh,v
retrieving revision 3.14
retrieving revision 3.15
diff -u -b -r3.14 -r3.15
--- libCERTI/NM_Classes.hh      11 Oct 2009 11:13:15 -0000      3.14
+++ libCERTI/NM_Classes.hh      18 Nov 2009 18:50:49 -0000      3.15
@@ -124,6 +124,168 @@
 
 /*<END>---------- Message_Null ------------<END>*/
 
+/*<BEGIN>---------- FOM_Dimension ------------<BEGIN>*/
+class CERTI_EXPORT NM_FOM_Dimension {
+public:
+        NM_FOM_Dimension() : _handle(0) {}
+       void serialize(MessageBuffer& msgBuffer);
+       void deserialize(MessageBuffer& msgBuffer);
+       /* specific Getter/Setter */
+       const DimensionHandle& getHandle() const {return _handle;}
+       void setHandle(const DimensionHandle& handle) {_handle=handle;}
+       const std::string& getName() const {return _name;}
+       void setName(const std::string& name) {_name=name;}
+protected:
+       /* specific field */
+        DimensionHandle _handle;
+        std::string _name;
+private:
+};
+
+/*<END>---------- FOM_Dimension ------------<END>*/
+
+/*<BEGIN>---------- FOM_Routing_Space ------------<BEGIN>*/
+class CERTI_EXPORT NM_FOM_Routing_Space {
+public:
+        NM_FOM_Routing_Space() : _handle(0) {}
+       void serialize(MessageBuffer& msgBuffer);
+       void deserialize(MessageBuffer& msgBuffer);
+       /* specific Getter/Setter */
+       const SpaceHandle& getHandle() const {return _handle;}
+       void setHandle(const SpaceHandle& handle) {_handle=handle;}
+       const std::string& getName() const {return _name;}
+       void setName(const std::string& name) {_name=name;}
+        uint32_t getNumDimensions() const { return _dimensions.size(); }
+        void setNumDimensions(uint32_t num) { _dimensions.resize(num); }
+        const NM_FOM_Dimension& getDimension(uint32_t index) const { return 
_dimensions[index]; }
+        NM_FOM_Dimension& getDimension(uint32_t index) { return 
_dimensions[index]; }
+        void setDimension(uint32_t index, const NM_FOM_Dimension& dimension) { 
_dimensions[index] = dimension; }
+protected:
+       /* specific field */
+        SpaceHandle _handle;
+        std::string _name;
+        std::vector<NM_FOM_Dimension> _dimensions;
+private:
+};
+
+/*<END>---------- FOM_Routing_Space ------------<END>*/
+
+/*<BEGIN>---------- FOM_Attribute ------------<BEGIN>*/
+class CERTI_EXPORT NM_FOM_Attribute {
+public:
+        NM_FOM_Attribute() : _handle(0), _spaceHandle(0), _order(0), 
_transport(0) {}
+       void serialize(MessageBuffer& msgBuffer);
+       void deserialize(MessageBuffer& msgBuffer);
+       /* specific Getter/Setter */
+       const AttributeHandle& getHandle() const {return _handle;}
+       void setHandle(const AttributeHandle& handle) {_handle=handle;}
+       const std::string& getName() const {return _name;}
+       void setName(const std::string& name) {_name=name;}
+       const SpaceHandle& getSpaceHandle() const {return _spaceHandle;}
+       void setSpaceHandle(const SpaceHandle& spaceHandle) 
{_spaceHandle=spaceHandle;}
+       const OrderType& getOrder() const {return _order;}
+       void setOrder(const OrderType& order) {_order=order;}
+       const TransportType& getTransport() const {return _transport;}
+       void setTransport(const TransportType& transport) 
{_transport=transport;}
+protected:
+       /* specific field */
+        AttributeHandle _handle;
+        std::string _name;
+        SpaceHandle _spaceHandle;
+        OrderType _order;
+        TransportType _transport;
+private:
+};
+
+/*<END>---------- FOM_Attribute ------------<END>*/
+
+/*<BEGIN>---------- FOM_Object_Class ------------<BEGIN>*/
+class CERTI_EXPORT NM_FOM_Object_Class {
+public:
+        NM_FOM_Object_Class() : _handle(0), _superclassHandle(0) {}
+       void serialize(MessageBuffer& msgBuffer);
+       void deserialize(MessageBuffer& msgBuffer);
+       /* specific Getter/Setter */
+       const ObjectClassHandle& getHandle() const {return _handle;}
+       void setHandle(const ObjectClassHandle& handle) {_handle=handle;}
+       const std::string& getName() const {return _name;}
+       void setName(const std::string& name) {_name=name;}
+       const ObjectClassHandle& getSuperclassHandle() const {return 
_superclassHandle;}
+       void setSuperclassHandle(const ObjectClassHandle& superclassHandle) 
{_superclassHandle=superclassHandle;}
+        uint32_t getNumAttributes() const { return _attributes.size(); }
+        void setNumAttributes(uint32_t num) { _attributes.resize(num); }
+        const NM_FOM_Attribute& getAttribute(uint32_t index) const { return 
_attributes[index]; }
+        NM_FOM_Attribute& getAttribute(uint32_t index) { return 
_attributes[index]; }
+        void setAttribute(uint32_t index, const NM_FOM_Attribute& attribute) { 
_attributes[index] = attribute; }
+protected:
+       /* specific field */
+        ObjectClassHandle _handle;
+        std::string _name;
+        ObjectClassHandle _superclassHandle;
+        std::vector<NM_FOM_Attribute> _attributes;
+private:
+};
+
+/*<END>---------- FOM_Object_Class ------------<END>*/
+
+/*<BEGIN>---------- FOM_Parameter ------------<BEGIN>*/
+class CERTI_EXPORT NM_FOM_Parameter {
+public:
+        NM_FOM_Parameter() : _handle(0) {}
+       void serialize(MessageBuffer& msgBuffer);
+       void deserialize(MessageBuffer& msgBuffer);
+       /* specific Getter/Setter */
+       const ParameterHandle& getHandle() const {return _handle;}
+       void setHandle(const ParameterHandle& handle) {_handle=handle;}
+       const std::string& getName() const {return _name;}
+       void setName(const std::string& name) {_name=name;}
+protected:
+       /* specific field */
+        ParameterHandle _handle;
+        std::string _name;
+private:
+};
+
+/*<END>---------- FOM_Parameter ------------<END>*/
+
+/*<BEGIN>---------- FOM_Interaction_Class ------------<BEGIN>*/
+class CERTI_EXPORT NM_FOM_Interaction_Class {
+public:
+        NM_FOM_Interaction_Class() : _handle(0), _superclassHandle(0), 
_spaceHandle(0), _order(0), _transport(0) {}
+       void serialize(MessageBuffer& msgBuffer);
+       void deserialize(MessageBuffer& msgBuffer);
+       /* specific Getter/Setter */
+       const InteractionClassHandle& getHandle() const {return _handle;}
+       void setHandle(const InteractionClassHandle& handle) {_handle=handle;}
+       const std::string& getName() const {return _name;}
+       void setName(const std::string& name) {_name=name;}
+       const InteractionClassHandle& getSuperclassHandle() const {return 
_superclassHandle;}
+       void setSuperclassHandle(const InteractionClassHandle& 
superclassHandle) {_superclassHandle=superclassHandle;}
+       const SpaceHandle& getSpaceHandle() const {return _spaceHandle;}
+       void setSpaceHandle(const SpaceHandle& spaceHandle) 
{_spaceHandle=spaceHandle;}
+       const OrderType& getOrder() const {return _order;}
+       void setOrder(const OrderType& order) {_order=order;}
+       const TransportType& getTransport() const {return _transport;}
+       void setTransport(const TransportType& transport) 
{_transport=transport;}
+        uint32_t getNumParameters() const { return _parameters.size(); }
+        void setNumParameters(uint32_t num) { _parameters.resize(num); }
+        const NM_FOM_Parameter& getParameter(uint32_t index) const { return 
_parameters[index]; }
+        NM_FOM_Parameter& getParameter(uint32_t index) { return 
_parameters[index]; }
+        void setParameter(uint32_t index, const NM_FOM_Parameter& parameter) { 
_parameters[index] = parameter; }
+protected:
+       /* specific field */
+        InteractionClassHandle _handle;
+        std::string _name;
+        InteractionClassHandle _superclassHandle;
+        SpaceHandle _spaceHandle;
+        OrderType _order;
+        TransportType _transport;
+        std::vector<NM_FOM_Parameter> _parameters;
+private:
+};
+
+/*<END>---------- FOM_Interaction_Class ------------<END>*/
+
 /*<BEGIN>---------- Create_Federation_Execution ------------<BEGIN>*/
 class CERTI_EXPORT NM_Create_Federation_Execution : public NetworkMessage {
 public:
@@ -178,6 +340,21 @@
        std::string getFederationName() {return federationName;};
        void setFederationName(std::string newFederationName) 
{federationName=newFederationName;};
        /* specific Getter/Setter */
+        uint32_t getNumRoutingSpaces() const { return _routingSpaces.size(); }
+        void setNumRoutingSpaces(uint32_t num) { _routingSpaces.resize(num); }
+        const NM_FOM_Routing_Space& getRoutingSpace(uint32_t index) const { 
return _routingSpaces[index]; }
+        NM_FOM_Routing_Space& getRoutingSpace(uint32_t index) { return 
_routingSpaces[index]; }
+        void setRoutingSpace(uint32_t index, const NM_FOM_Routing_Space& 
routingSpace) { _routingSpaces[index] = routingSpace; }
+        uint32_t getNumObjectClasses() const { return _objectClasses.size(); }
+        void setNumObjectClasses(uint32_t num) { _objectClasses.resize(num); }
+        const NM_FOM_Object_Class& getObjectClass(uint32_t index) const { 
return _objectClasses[index]; }
+        NM_FOM_Object_Class& getObjectClass(uint32_t index) { return 
_objectClasses[index]; }
+        void setObjectClass(uint32_t index, const NM_FOM_Object_Class& 
objectClass) { _objectClasses[index] = objectClass; }
+        uint32_t getNumInteractionClasses() const { return 
_interactionClasses.size(); }
+        void setNumInteractionClasses(uint32_t num) { 
_interactionClasses.resize(num); }
+        const NM_FOM_Interaction_Class& getInteractionClass(uint32_t index) 
const { return _interactionClasses[index]; }
+        NM_FOM_Interaction_Class& getInteractionClass(uint32_t index) { return 
_interactionClasses[index]; }
+        void setInteractionClass(uint32_t index, const 
NM_FOM_Interaction_Class& interactionClass) { _interactionClasses[index] = 
interactionClass; }
 protected:
        /* specific field */
        //      int32_t  numberOfRegulators;
@@ -186,6 +363,9 @@
        //      uint32_t bestEffortPeer;
        std::string federationName;
        std::string federateName;
+        std::vector<NM_FOM_Routing_Space> _routingSpaces;
+        std::vector<NM_FOM_Object_Class> _objectClasses;
+        std::vector<NM_FOM_Interaction_Class> _interactionClasses;
 private:
 };
 
@@ -1522,35 +1702,6 @@
 
 /*<END>---------- Provide_Attribute_Value_Update ------------<END>*/
 
-/*<BEGIN>---------- Get_Fed_File ------------<BEGIN>*/
-class CERTI_EXPORT NM_Get_FED_File : public NetworkMessage {
-public:
-       typedef NetworkMessage Super;
-       NM_Get_FED_File();
-       virtual ~NM_Get_FED_File();
-       virtual void serialize(MessageBuffer& msgBuffer);
-       virtual void deserialize(MessageBuffer& msgBuffer);
-       /* specific Getter/Setter */
-       std::string getFederateName() {return federateName;};
-    void setFederateName(std::string newFederateName) 
{federateName=newFederateName;};
-       void setFEDid(std::string newFEDid) {FEDid=newFEDid;};
-       const std::string getFEDid() const {return FEDid;};
-       uint32_t getLineno() {return lineno;};
-       void setLineno(uint32_t newLineno) {lineno=newLineno;};
-       void setFEDLine(std::string newLine) {line=newLine;};
-       std::string getFEDLine() {return line;};
-protected:
-       /* specific field */
-       std::string federateName;// the Federate name
-       std::string FEDid;
-       uint32_t    lineno;
-       std::string line;
-
-private:
-};
-
-/*<END>---------- Get_Fed_File ------------<END>*/
-
 /*<BEGIN>---------- Last ------------<BEGIN>*/
 class CERTI_EXPORT NM_Last : public NetworkMessage {
 public:

Index: libCERTI/NetworkMessage.hh
===================================================================
RCS file: /sources/certi/certi/libCERTI/NetworkMessage.hh,v
retrieving revision 3.49
retrieving revision 3.50
diff -u -b -r3.49 -r3.50
--- libCERTI/NetworkMessage.hh  14 Sep 2009 21:21:32 -0000      3.49
+++ libCERTI/NetworkMessage.hh  18 Nov 2009 18:50:49 -0000      3.50
@@ -17,7 +17,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: NetworkMessage.hh,v 3.49 2009/09/14 21:21:32 erk Exp $
+// $Id: NetworkMessage.hh,v 3.50 2009/11/18 18:50:49 erk Exp $
 // ----------------------------------------------------------------------------
 
 #ifndef CERTI_NETWORK_MESSAGE_HH
@@ -138,7 +138,6 @@
                DDM_SUBSCRIBE_INTERACTION,
                DDM_UNSUBSCRIBE_INTERACTION,
                PROVIDE_ATTRIBUTE_VALUE_UPDATE,
-               GET_FED_FILE,
                SET_CLASS_RELEVANCE_ADVISORY_SWITCH,
                SET_INTERACTION_RELEVANCE_ADVISORY_SWITCH,
                SET_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH,
@@ -346,4 +345,4 @@
 
 #endif // CERTI_NETWORK_MESSAGE_HH
 
-// $Id: NetworkMessage.hh,v 3.49 2009/09/14 21:21:32 erk Exp $
+// $Id: NetworkMessage.hh,v 3.50 2009/11/18 18:50:49 erk Exp $

Index: libCERTI/RootObject.cc
===================================================================
RCS file: /sources/certi/certi/libCERTI/RootObject.cc,v
retrieving revision 3.42
retrieving revision 3.43
diff -u -b -r3.42 -r3.43
--- libCERTI/RootObject.cc      21 Oct 2009 18:56:28 -0000      3.42
+++ libCERTI/RootObject.cc      18 Nov 2009 18:50:49 -0000      3.43
@@ -19,7 +19,7 @@
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 // USA
 //
-// $Id: RootObject.cc,v 3.42 2009/10/21 18:56:28 erk Exp $
+// $Id: RootObject.cc,v 3.43 2009/11/18 18:50:49 erk Exp $
 // ----------------------------------------------------------------------------
 
 #include "Object.hh"
@@ -34,6 +34,7 @@
 #include "RoutingSpace.hh"
 #include "RootObject.hh"
 #include "PrettyDebug.hh"
+#include "NM_Classes.hh"
 #include "helper.hh"
 
 #include <string>
@@ -358,6 +359,228 @@
        Interactions->addClass(currentIC,parentIC);
 } /* end of addInteractionClass */
 
+void
+RootObject::getFOM(NM_Join_Federation_Execution& message)
+{
+        // The rounting spaces
+        uint32_t routingSpaceCount = spaces.size();
+        message.setNumRoutingSpaces(routingSpaceCount);
+        for (uint32_t i = 0; i < routingSpaceCount; ++i) {
+                const RoutingSpace& rs = spaces[i];
+                NM_FOM_Routing_Space& mrs = message.getRoutingSpace(i);
+
+                mrs.setHandle(rs.getHandle());
+                mrs.setName(rs.getName());
+
+                uint32_t dimensionCount = rs.getDimensions().size();
+                mrs.setNumDimensions(dimensionCount);
+                for (uint32_t j = 0; j < dimensionCount; ++j) {
+                        const Dimension& d = rs.getDimensions()[j];
+                        NM_FOM_Dimension& md = mrs.getDimension(j);
+
+                        md.setHandle(d.getHandle());
+                        md.setName(d.getName());
+                }
+        }
+
+        // The object classes
+        message.setNumObjectClasses(ObjectClasses->size());
+        uint32_t idx = 0;
+        for (ObjectClassSet::handled_const_iterator i = 
ObjectClasses->handled_begin();
+             i != ObjectClasses->handled_end(); ++i, ++idx) {
+                const ObjectClass* objectClass = i->second;
+                NM_FOM_Object_Class& moc = message.getObjectClass(idx);
+
+                moc.setHandle(objectClass->getHandle());
+                std::string name = objectClass->getName();
+                ObjectClassHandle superclassHandle = 
objectClass->getSuperclass();
+                moc.setSuperclassHandle(superclassHandle);
+
+                // Dump only those attributes from the list that are not 
alreay in the parent
+                ObjectClass::AttributeList_t attributeList = 
i->second->getAttributeList();
+                if (0 < superclassHandle) {
+                        ObjectClass* parent = getObjectClass(superclassHandle);
+
+                        // strip the common substring from the parents name.
+                        if (name.find(parent->getName() + ".") == 0)
+                                name = name.substr(parent->getName().size() + 
1);
+
+                        // remove the parents attributes from the transfered 
list
+                        ObjectClass::AttributeList_t parentAttributeList = 
parent->getAttributeList();
+                        ObjectClass::AttributeList_t::const_iterator j = 
parentAttributeList.begin();
+                        for (; j != parentAttributeList.end(); ++j) {
+                                ObjectClass::AttributeList_t::iterator k = 
attributeList.begin();
+                                for (; k != attributeList.end(); ++k) {
+                                        if ((*k)->getHandle() != 
(*j)->getHandle())
+                                                continue;
+                                        attributeList.erase(k);
+                                        break;
+                                }
+                        }
+                }
+
+                // Transfer the short name
+                moc.setName(name);
+
+                // Transfer the attributes that are not inheritted
+                moc.setNumAttributes(attributeList.size());
+                uint32_t jdx = 0;
+                ObjectClass::AttributeList_t::const_reverse_iterator j = 
attributeList.rbegin();
+                for (; j != attributeList.rend(); ++j, ++jdx) {
+                        const ObjectClassAttribute* attribute = *j;
+
+                        NM_FOM_Attribute& ma = moc.getAttribute(jdx);
+                        ma.setHandle(attribute->getHandle());
+                        ma.setName(attribute->getName());
+                        ma.setSpaceHandle(attribute->getSpace());
+                        ma.setOrder(attribute->order);
+                        ma.setTransport(attribute->transport);
+                }
+        }
+
+
+        // The interaction classes
+        message.setNumInteractionClasses(Interactions->size());
+        idx = 0;
+        for (InteractionSet::handled_const_iterator i = 
Interactions->handled_begin();
+             i != Interactions->handled_end(); ++i, ++idx) {
+                Interaction* interactionClass = i->second;
+                NM_FOM_Interaction_Class& mic = 
message.getInteractionClass(idx);
+
+                mic.setHandle(interactionClass->getHandle());
+                std::string name = interactionClass->getName();
+                InteractionClassHandle superclassHandle = 
interactionClass->getSuperclass();
+                mic.setSuperclassHandle(superclassHandle);
+                mic.setSpaceHandle(interactionClass->getSpace());
+                mic.setOrder(interactionClass->order);
+                mic.setTransport(interactionClass->transport);
+
+                // Dump only those attributes from the list that are not 
alreay in the parent
+                Interaction::ParameterList_t parameterList = 
i->second->getParameterList();
+                if (0 < superclassHandle) {
+                        Interaction* parent = 
getInteractionClass(superclassHandle);
+
+                        // strip the common substring from the parents name.
+                        if (name.find(parent->getName() + ".") == 0)
+                                name = name.substr(parent->getName().size() + 
1);
+
+                        // remove the parents attributes from the transfered 
list
+                        Interaction::ParameterList_t parentParameterList = 
parent->getParameterList();
+                        Interaction::ParameterList_t::const_iterator j = 
parentParameterList.begin();
+                        for (; j != parentParameterList.end(); ++j) {
+                                Interaction::ParameterList_t::iterator k = 
parameterList.begin();
+                                for (; k != parameterList.end(); ++k) {
+                                        if ((*k)->getHandle() != 
(*j)->getHandle())
+                                                continue;
+                                        parameterList.erase(k);
+                                        break;
+                                }
+                        }
+                }
+
+                // Transfer the simple name
+                mic.setName(name);
+
+                // Transfer the new parameters
+                mic.setNumParameters(parameterList.size());
+                Interaction::ParameterList_t::const_reverse_iterator j = 
parameterList.rbegin();
+                uint32_t jdx = 0;
+                for (; j != parameterList.rend(); ++j, ++jdx) {
+                        const Parameter* parameter = *j;
+                        NM_FOM_Parameter& mp = mic.getParameter(jdx);
+
+                        mp.setHandle(parameter->getHandle());
+                        mp.setName(parameter->getName());
+                }
+        }
+}
+
+void
+RootObject::setFOM(const NM_Join_Federation_Execution& message)
+{
+        // The number of routing space records to read
+        uint32_t routingSpaceCount = message.getNumRoutingSpaces();
+        for (uint32_t i = 0; i < routingSpaceCount; ++i) {
+                const NM_FOM_Routing_Space& mrs = message.getRoutingSpace(i);
+
+                RoutingSpace current;
+                current.setHandle(mrs.getHandle());
+                current.setName(mrs.getName());
+
+                uint32_t dimensionCount = mrs.getNumDimensions();
+                for (uint32_t j = 0; j < dimensionCount; ++j) {
+                        const NM_FOM_Dimension& md = mrs.getDimension(j);
+
+                        Dimension dimension(md.getHandle());
+                        dimension.setName(md.getName());
+                        current.addDimension(dimension);
+                }
+
+                addRoutingSpace(current);
+        }
+
+        // The number of object class records to read
+        uint32_t objectClassCount = message.getNumObjectClasses();
+        for (uint32_t i = 0; i < objectClassCount; ++i) {
+                const NM_FOM_Object_Class& moc = message.getObjectClass(i);
+
+                // add the object class to the root object
+                ObjectClass* current = new ObjectClass(moc.getName(), 
moc.getHandle());
+                ObjectClass* parent = 0;
+                ObjectClassHandle superclassHandle = moc.getSuperclassHandle();
+                if (0 < superclassHandle) {
+                        parent = getObjectClass(superclassHandle);
+                }
+                addObjectClass(current, parent);
+
+                uint32_t attributeCount = moc.getNumAttributes();
+                for (uint32_t j = 0; j < attributeCount; ++j) {
+                        const NM_FOM_Attribute& ma = moc.getAttribute(j);
+
+                        OrderType order = ma.getOrder();
+                        TransportType transport = ma.getTransport();
+                        ObjectClassAttribute *attribute = new 
ObjectClassAttribute(ma.getName(), transport, order);
+                        current->addAttribute(attribute);
+                        attribute->setSpace(ma.getSpaceHandle());
+                        assert(attribute->getHandle() == ma.getHandle());
+                }
+        }
+
+        // The number of interactions records to read
+        uint32_t interactionsCount = message.getNumInteractionClasses();
+        for (uint32_t i = 0; i < interactionsCount; ++i) {
+                const NM_FOM_Interaction_Class& mic = 
message.getInteractionClass(i);
+
+                Interaction* current = new Interaction(mic.getName(), 
mic.getHandle(), mic.getTransport(), mic.getOrder());
+                current->setSpace(mic.getSpaceHandle());
+                Interaction* parent = 0;
+                InteractionClassHandle superclassHandle = 
mic.getSuperclassHandle();
+                if (0 < superclassHandle) {
+                        parent = getInteractionClass(superclassHandle);
+                }
+
+                addInteractionClass(current, parent);
+
+                if (parent) {
+                        const Interaction::ParameterList_t& parameterList = 
parent->getParameterList();
+                        for 
(Interaction::Interaction::ParameterList_t::const_iterator j = 
parameterList.begin();
+                             j != parameterList.end(); ++j) {
+                                  current->addParameter(new Parameter(**j));
+                        }
+                }
+ 
+                uint32_t parameterCount = mic.getNumParameters();
+                for (uint32_t j = 0; j < parameterCount; ++j) {
+                        const NM_FOM_Parameter& mp = mic.getParameter(j);
+
+                        Parameter *parameter = new Parameter;
+                        parameter->setName(mp.getName());
+                        parameter->setHandle(mp.getHandle());
+                        current->addParameter(parameter);
+                }
+        }
+} /* end of setFOM */
+
 } // namespace certi
 
-// $Id: RootObject.cc,v 3.42 2009/10/21 18:56:28 erk Exp $
+// $Id: RootObject.cc,v 3.43 2009/11/18 18:50:49 erk Exp $




reply via email to

[Prev in Thread] Current Thread [Next in Thread]