00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#ifndef MODEL_GENERALIZABLEELEMENT_HPP
00026
#define MODEL_GENERALIZABLEELEMENT_HPP
00027
00028
00029
#include <Model/Namespace.hpp>
00030
#include <Model/VisibilityKind.hpp>
00031
00032
namespace Model
00033 {
00046 class GeneralizableElement :
virtual public Namespace
00047 {
00048
public:
00049 typedef OMF::BasicClass<GeneralizableElement, OMF::Concrete> Proxy;
00050
00051
GeneralizableElement();
00052
virtual ~GeneralizableElement();
00053
00054
const OMF::Boolean &
isRoot() const;
00055
void setIsRoot(const OMF::Boolean &isRoot);
00056
void clearIsRoot();
00057
00058 const OMF::Boolean &isLeaf() const;
00059
void setIsLeaf(const OMF::Boolean &isLeaf);
00060
void clearIsLeaf();
00061
00062 const OMF::Boolean &isAbstract() const;
00063
void setIsAbstract(const OMF::Boolean &isAbstract);
00064
void clearIsAbstract();
00065
00066 const
VisibilityKind &visibility() const;
00067
void setVisibility(const
VisibilityKind &vis);
00068
void clearVisibility();
00069
00070 const OMF::List &supertypes() const;
00071
void addSupertypes(
GeneralizableElement *super);
00072
void removeSupertypes(
GeneralizableElement *super);
00073
void clearSupertypes();
00074
00082 OMF::List allSupertypes();
00083
00093 virtual
ModelElement *lookupElementExtended(const OMF::String &name);
00094
00107 virtual OMF::List findElementsByType(
Class *ofType,
00108 const OMF::Boolean &includeSubtypes);
00109
00110 private:
00111 typedef std::set<
GeneralizableElement *> SuperSet;
00112
00120
void allSupertypes(OMF::List &supers, SuperSet &marked);
00121
00122 private:
00123 OMF::Boolean _isRoot;
00124 OMF::Boolean _isLeaf;
00125 OMF::Boolean _isAbstract;
00126
VisibilityKind _visibility;
00127 OMF::List _supertypes;
00128 };
00129 }
00130
00131 #endif