00001 #ifndef SHEET_H
00002 #define SHEET_H
00003
00004 #include "Any.h"
00005 #include "FCO.h"
00006 #include "FolderRep.h"
00007 #include "ModelRep.h"
00008 #include "AtomRep.h"
00009 #include "ConnectionRep.h"
00010 #include "SetRep.h"
00011 #include "ReferenceRep.h"
00012 #include "FcoRep.h"
00013 #include "AttributeRep.h"
00014 #include "RootFolder.h"
00015
00016 #include "list"
00017 #include "vector"
00018 #include "strstream"
00019
00020 class Sheet;
00021
00022 class Sheet
00023 {
00024
00025 protected:
00026 static Sheet * m_theOnlyInstance;
00027 Sheet();
00028
00029 public:
00030
00031 static bool checkInstance() { return m_theOnlyInstance != 0; }
00032 virtual ~Sheet();
00033 virtual bool build() = 0;
00034 virtual bool finalize();
00035 void setProject( BON::Project& project );
00036 std::string getValidName() { return m_validProjName; }
00037
00038 FcoRep* createFcoRep( BON::FCO& ptr, BON::FCO& resp_ptr);
00039 AtomRep* createAtomRep( BON::FCO& ptr, BON::FCO& resp_ptr);
00040 ModelRep* createModelRep( BON::FCO& ptr, BON::FCO& resp_ptr);
00041 ConnectionRep* createConnectionRep( BON::FCO& ptr, BON::FCO& resp_ptr);
00042 SetRep* createSetRep( BON::FCO& ptr, BON::FCO& resp_ptr);
00043 ReferenceRep* createReferenceRep( BON::FCO& ptr, BON::FCO& resp_ptr);
00044 FolderRep* createFolderRep( BON::FCO& ptr, BON::FCO& resp_ptr);
00045
00046 AttributeRep* createBoolAttributeRep( BON::FCO& ptr);
00047 AttributeRep* createEnumAttributeRep( BON::FCO& ptr);
00048 AttributeRep* createFieldAttributeRep( BON::FCO& ptr);
00049
00050 FCO* findFCO( const BON::FCO& ptr);
00051 ReferenceRep* findRef( const BON::FCO& ptr);
00052 Any* findAny( const BON::FCO& ptr);
00053
00054 std::string getNamespace() { return m_projNamespace; }
00055
00056 BON::Folder m_BON_Project_Root_Folder2;
00057
00058 std::set<BON::Model> m_setOfParadigmSheets2;
00059
00060 protected:
00061 std::vector< FCO *> Sheet::sortBasedOnLevels();
00062 int m_numberOfCliques[FCO::NUMBER_OF_INHERITANCES];
00063
00064 typedef std::vector<FCO*>::iterator FCO_Iterator;
00065 typedef std::vector<Any*>::iterator Any_Iterator;
00066
00067 typedef std::vector<FcoRep*>::iterator FcoRep_Iterator;
00068 typedef std::vector<AtomRep*>::iterator AtomRep_Iterator;
00069
00070 typedef std::vector<ModelRep*>::iterator ModelRep_Iterator;
00071
00072 typedef std::vector<ConnectionRep*>::iterator ConnectionRep_Iterator;
00073 typedef std::vector<ReferenceRep*>::iterator ReferenceRep_Iterator;
00074 typedef std::vector<SetRep*>::iterator SetRep_Iterator;
00075 typedef std::vector<FolderRep*>::iterator FolderRep_Iterator;
00076 typedef std::vector<AttributeRep*>::iterator AttributeRep_Iterator;
00077
00078 void addAny( Any * ptr);
00079 void addFcoRep( FcoRep * ptr);
00080 void addAtomRep( AtomRep * ptr);
00081 void addModelRep( ModelRep * ptr);
00082 void addConnectionRep( ConnectionRep * ptr);
00083 void addReferenceRep( ReferenceRep * ptr);
00084 void addSetRep( SetRep * ptr);
00085 void addFolderRep( FolderRep * ptr);
00086 void addAttributeRep( AttributeRep* ptr);
00087
00088 std::vector<FcoRep*> m_fcoRepList;
00089 std::vector<AtomRep*> m_atomList;
00090 std::vector<ModelRep*> m_modelList;
00091 std::vector<ConnectionRep*> m_connList;
00092 std::vector<ReferenceRep*> m_refList;
00093 std::vector<SetRep*> m_setList;
00094
00095 std::vector<FolderRep*> m_folderList;
00096
00097 std::vector<AttributeRep*> m_attributeList;
00098
00099 std::string m_projName;
00100 std::string m_validProjName;
00101 std::string m_projNamespace;
00102 std::string m_validProjNamespace;
00103 RootFolder m_rootFolder;
00104
00105 private:
00106 void init();
00107 bool isInRootFolder( Any * elem);
00108 void initRoleNames();
00109 bool doInheritance( FCO::INHERITANCE_TYPE inh_type);
00110 bool multipleInheritance();
00111
00112
00113
00114 void order( FCO::INHERITANCE_TYPE type, std::vector<FCO*>& res);
00115 bool check( FCO::INHERITANCE_TYPE type, std::vector<FCO*>& res);
00116
00117 typedef std::vector< unsigned int > UI_LIST;
00118 typedef std::vector< unsigned int > CLIQUE_VECTOR;
00119 typedef std::vector< FCO *> NODE_VECTOR;
00120 void gatherNodes( std::vector< FCO *>& nodes);
00121 void assignCliqueId( CLIQUE_VECTOR & clique, const NODE_VECTOR & nodes);
00122 bool edge( unsigned int i, unsigned int j, const NODE_VECTOR & nodes, FCO::INHERITANCE_TYPE inh_type);
00123 void vectorCopy( UI_LIST & target, const UI_LIST & source, UI_LIST & duplicates);
00124 void getChildren( unsigned int base, const NODE_VECTOR & nodes, UI_LIST & children, FCO::INHERITANCE_TYPE inh_type);
00125 unsigned int howManyCliques( CLIQUE_VECTOR & clique_id);
00126 void replaceCliqueId( CLIQUE_VECTOR & clique_id, unsigned int id1, unsigned int id2);
00127 };
00128 #endif //SHEET_H