00001 #ifndef CONNJOINT_H
00002 #define CONNJOINT_H
00003
00004 #include "Any.h"
00005 #include "RoleRep.h"
00006 #include "PointerItem.h"
00007 #include "FCO.h"
00008
00009 class Sheet;
00010 class ConnectionRep;
00011
00012 #include "list"
00013
00014 class ConnJoint
00015 {
00016 public:
00017 typedef std::vector< FCO *> SDList;
00018 typedef std::vector< FCO *>::iterator SDList_Iterator;
00019 typedef std::vector< FCO *>::const_iterator SDList_ConstIterator;
00020
00021 typedef std::vector< PointerItem> PointerItemSeries;
00022 typedef std::vector< PointerItem>::iterator PointerItemSeries_Iterator;
00023 typedef std::vector< PointerItem>::const_iterator PointerItemSeries_ConstIterator;
00024
00025 typedef const ModelRep* Key;
00026 typedef std::map< Key, PointerItemSeries> TargetMap;
00027 typedef TargetMap::iterator TargetMap_Iterator;
00028
00029 public:
00030 static std::string m_srcLabel;
00031 static std::string m_dstLabel;
00032
00033 ConnJoint(
00034 ConnectionRep *, const SDList& op1, const SDList& op2, bool bidirect,
00035 std::string card1 = "", std::string card2 = ""
00036 );
00037 ConnJoint( const ConnJoint& peer);
00038 const ConnJoint& operator=( const ConnJoint& peer);
00039 ~ConnJoint();
00040
00041 void setConnectionPtr( ConnectionRep * conn_ptr);
00042
00043 const SDList& getOp1() const;
00044 const SDList& getOp2() const;
00045 bool isBidirect() const;
00046
00047 void intInherit( ModelRep * mod_ptr);
00048
00049
00050 void addTargetItem( int i, const ModelRep * model, const PointerItem& item);
00051 void addTargetItem( int i, const ModelRep * model, const RoleRep & new_role);
00052 void addTargetItem( int i, const ModelRep * model, const RoleRep::RoleRepSeries & new_role_series);
00053
00054 std::string dumpElements( FCO::ModelRepPtrList & model_list);
00055
00056 bool checkElements( std::string connection_name);
00057 void createConstraints( Sheet*, const std::string& conn_name);
00058
00059 bool descendantsOf( const ConnJoint& peer) const;
00060
00061 protected:
00062
00063
00064
00065 ConnectionRep * m_connPtr;
00066
00067
00068 SDList m_oper1;
00069 SDList m_oper2;
00070
00071
00072 TargetMap m_oper1TargetMap;
00073 TargetMap m_oper2TargetMap;
00074
00075
00076 bool m_bidirect;
00077
00078
00079 std::string m_oper1Card;
00080 std::string m_oper2Card;
00081
00082 };
00083
00084 #endif //CONNJOINT_H