GME  13
GMEConstraintEx.h
Go to the documentation of this file.
00001 //###############################################################################################################################################
00002 //
00003 //      Object Constraint Language Generic Manager
00004 //      GMEConstraintEx.h
00005 //
00006 //###############################################################################################################################################
00007 
00008 #ifndef GMEConstraintEx_h
00009 #define GMEConstraintEx_h
00010 
00011 #include "StdAfx.h"
00012 #include "OCLConstraint.h"
00013 #include "OCLCommon.h"
00014 #include "OCLType.h"
00015 #include "OCLRefCount.h"
00016 #include "mga.h"
00017 #include "meta.h"
00018 
00019 namespace OclGme
00020 {
00021         class ConstraintBase;
00022         class Constraint;
00023         class ConstraintFunction;
00024 
00025         typedef OclCommon::RCSmart<Constraint> SpConstraint;
00026         typedef OclCommon::RCSmart<ConstraintFunction> SpConstraintFunction;
00027 
00028 
00029         typedef std::vector<SpConstraint>                       ConstraintVector;
00030         typedef std::vector<SpConstraintFunction>       ConstraintFunctionVector;
00031 
00032 //##############################################################################################################################################
00033 //
00034 //      C L A S S : OclGme::ConstraintBase <<< + Ocl::Constraint
00035 //
00036 //==============================================================================================================================================
00037 //
00038 //      D E S C R I P T I O N :
00039 //
00040 //##############################################################################################################################################
00041 
00042         class ConstraintBase
00043                 : public Ocl::Constraint
00044         {
00045                 public :
00046                         typedef enum Type { CT_CRITICAL_META = 0, CT_NON_CRITICAL_META = 1, CT_CRITICAL_USER = 2, CT_NON_CRITICAL_USER = 3, CT_CRITICAL_LIBRARY = 4, CT_NON_CRITICAL_LIBRARY = 5, CT_ATTRIBUTE_META = 6, CT_ATTRIBUTE_USER = 7, CT_METHOD_META = 8, CT_METHOD_USER = 9 };
00047                         typedef enum Location { CL_META = 0, CL_PROJECT = 1, CL_LIBRARY };
00048 
00049                 private :
00050                         Type                                                    m_eType;
00051                         Location                                                m_eLocation;
00052                         StringVector                                    m_vecLibraryPath;
00053                 protected :
00054                         CComPtr<IMgaConstraint> m_spConstraint;
00055                         CComPtr<IMgaRegNode>            m_spRegNode;
00056                         CComPtr<IMgaFCO>                        m_spFCO;
00057 
00058                 public :
00059                                                                                 ConstraintBase();
00060                         virtual                                                 ~ConstraintBase();
00061 
00062                                         Type                            GetType() const;
00063                                         Location                        GetLocation() const;
00064                                         StringVector            GetLibraryPath() const;
00065                         virtual std::string                     GetFullName() const;
00066                                         bool    GetContextAndName( std::string& strContext, std::string& strName ) const;
00067                 protected :
00068                                         void                            SetType( Type eType, const StringVector& vecLibraryPath = StringVector() );
00069         };
00070 
00071 //##############################################################################################################################################
00072 //
00073 //      C L A S S : OclGme::Constraint <<< + OclGme::ConstraintBase
00074 //
00075 //==============================================================================================================================================
00076 //
00077 //      D E S C R I P T I O N :
00078 //
00079 //##############################################################################################################################################
00080 
00081         class Constraint
00082                 : public ConstraintBase, public OclCommon::ReferenceCountable< Constraint >
00083         {
00084                 public :
00085                         typedef enum EnableInfo { CE_NONE = 0, CE_ENABLED = 1, CE_ENABLED_INHERITED = 2, CE_ENABLED_READONLY = 3, CE_DISABLED = 4, CE_DISABLED_INHERITED = 5, CE_DISABLED_READONLY = 6 };
00086 
00087                 private :
00088                         unsigned long                                   m_ulEventMask;
00089                         long                                                    m_lPriority;
00090                         constraint_depth_enum           m_eDepth;
00091                         std::string                                     m_strMessage;
00092                         std::string                                             m_strExpression;
00093 
00094                 public :
00095                                                                                 Constraint( const std::string& strName, const std::string& strContextType, const std::string& strExpression, const std::string& strMessage, unsigned long ulEventMask, long lPriority, constraint_depth_enum eDepth, bool bFieldsMandatory = true );
00096                                                                                 Constraint( const std::string& strContextType, CComPtr<IMgaFCO> spFCO, bool bFieldsMandatory = true );
00097                                                                                 Constraint( const std::string& strContextType, CComPtr<IMgaConstraint> spConstraint );
00098                                                                                 Constraint( CComPtr<IMgaRegNode> spRegNode, const StringVector& vecLibPath );
00099                         virtual                                         ~Constraint();
00100 
00101                         unsigned long                           GetEventMask() const;
00102                         long                                            GetPriority() const;
00103                         constraint_depth_enum   GetDepth() const;
00104                         std::string                             GetMessage() const;
00105                         std::string                                     GetExpression() const;
00106 
00107                         EnableInfo                                      GetEnableInfo( CComPtr<IMgaObject> spObject ) const;
00108                         Ocl::Constraint::State          Write( CComPtr<IMgaRegNode> spRegNode );
00109         };
00110 
00111 //##############################################################################################################################################
00112 //
00113 //      C L A S S : OclGme::ConstraintFunction <<< + OclGme::ConstraintBase, OclCommon::ReferenceCountable< ConstraintFunction >
00114 //
00115 //==============================================================================================================================================
00116 //
00117 //      D E S C R I P T I O N :
00118 //
00119 //##############################################################################################################################################
00120 
00121         class ConstraintFunction
00122                 : public ConstraintBase, public OclCommon::ReferenceCountable< ConstraintFunction >
00123         {
00124 
00125                 private :
00126                         std::string                                     m_strParameterList;
00127                         std::string                                             m_strExpression; // func body
00128 
00129                 public :
00130                                                                         ConstraintFunction( const std::string& strName, const std::string& strContextType, const std::string& strParameterList, const std::string& strReturnType, bool bIsAttribute, const std::string& strExpression, bool bFieldsMandatory = true );
00131                                                                         ConstraintFunction( CComPtr<IMgaFCO> spFCO, bool bFieldsMandatory = true );
00132                                                                         ConstraintFunction( CComPtr<IMgaConstraint> spConstraint );
00133                                                                         ConstraintFunction( CComPtr<IMgaRegNode> spRegNode );
00134 
00135                         std::string                             GetParameterList() const;
00136                         std::string                     GetExpression() const;
00137 
00138                         Ocl::Constraint::State  Write( CComPtr<IMgaRegNode> spRegNode );
00139                 private :
00140                         void                                    ReadFromOldFormat();
00141                         void                                    ReadFromNewFormat();
00142         };
00143 
00144 }; // namespace OclGme
00145 
00146 #endif // GMEConstraintEx_h