/****************************************************************************** 
** Copyright (c) 2007 MAK Technologies, Inc. 
** All rights reserved. 
******************************************************************************/ 
 
//! \file DtFeatureLayerRecord.h 
//! \brief Contains makVrv::DtFeatureLayerRecord class. 
//! \ingroup makArchives
 
#ifndef DtFeatureLayerRecord_H_ 
#define DtFeatureLayerRecord_H_ 
 
#include <makArchives/makArchives.h> 
#include <makArchives/DtAddPropsRuleRecord.h> 
#include <makArchives/DtPropRecord.h> 

namespace makArchives 
{ 

    //! \brief A DtFeatureLayerRecord contains the information to add features from a single source file and ruleset.
   //! \ingroup makArchives
   class DT_DLL_MAKARCHIVES DtFeatureLayerRecord 
   { 

   public:

      //! \brief CTOR
      DtFeatureLayerRecord();

      //! \brief Copy CTOR
      DtFeatureLayerRecord(const DtFeatureLayerRecord& orig);

      bool operator==(const DtFeatureLayerRecord& orig) const;
      bool operator!=(const DtFeatureLayerRecord& orig) const;

      //! \brief Assignment OP
      DtFeatureLayerRecord& operator=(const DtFeatureLayerRecord& orig);

      //! \brief DTOR
      ~DtFeatureLayerRecord();

      //! \brief Return the source filename.
      const std::string& filename() const;

      //! Set the source filename.
      void setFilename(const std::string& name);

      //! Get the DtAddPropsRuleRecordVector.
      const DtAddPropsRuleRecordVector& addPropsRuleRecordVector() const;

      //! Set the DtAddPropsRuleRecordVector.
      void setAddPropsRuleRecordVector(const DtAddPropsRuleRecordVector& ruleVec);

      //! Get the DtPropRecords.
      const DtPropRecords& propRecords() const;

      //! Set the DtPropRecords.
      void setPropRecords(const DtPropRecords& records);


   protected:

      friend class boost::serialization::access;

      //! When the class Archive corresponds to an output archive, the
      //! & operator is defined similar to <<.  Likewise, when the class Archive
      //! is a type of input archive the & operator is defined similar to >>.
      template<class Archive>
         void serialize(Archive & ar, const unsigned int version)
      {
         ar & BOOST_SERIALIZATION_NVP(myFilename);
         ar & BOOST_SERIALIZATION_NVP(myAddPropsRuleRecordVector);
         ar & BOOST_SERIALIZATION_NVP(myPropRecords);

      }

   protected:

      std::string myFilename;
      DtAddPropsRuleRecordVector myAddPropsRuleRecordVector;
      DtPropRecords myPropRecords;
   }; 
} 
 
#endif 

