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