Dear OBST-Users,

enclosed you find three sets of Classes which may be usefull in your context.
 + Name Space Concept: 2 classes for name spaces and their elements.
 + Relationship Concept: 2 classes for relationships and the objects related by them.
 + Contents Concept: 2 classes for objects which encapsulate "foreign" objects 
   like files [a class named add_File_Store, which stores files and directories
   is also included].

These three concepts have three things in common:

1. They are designed to preserve referencial integrity, i.e. if an object is
   destroyed, all references are removed as well. This is the main difference 
   between, for example, add_Name_Space and sos_Directory.

2. They are designed to be combined by multiple inheritance, e.g. (simplified)
   class add_Document_Version (sos_String version_id, 
			    Document<add_Document_Version,add_Build_View> nsp,
			    add_Contents c = CO_NO_CONTENTS, 
			    sos_Int storage_mode = CO_NO_MODE,
			    add_Container_Object neighbour = CO_NO_CO ) 
     : add_Name_Space (version_id, nsp), add_Related_Object, 
       add_Container_Object (c, storage_mode, neighbour) 
   There are some people, who claim multiple inheritance to be dangerous. We
   use it to combine properties in derived classes and we found it to be a
   straightforward way to design a system in a top-down fashion.

3. All classes are heavily used in the ADDD environment, so there should be
   (almost) no bugs :)
   Please note that these classes are NOT yet prepared for outside use:
    o documentation in the .obst and .C files may not be allways correct,
    o the code should be cleaned from some useless stuff:
      - the class add_Source_of_Error need not be used as a superclass  
        and will be eleminated in the future.
      - old code remains as comment for historical reasons.

   In case you are interested in these classes, please let us know. 
   We will then prepare them for easy reuse.

Have fun with OBST

Hans-Ulrich Kobialka, Carsten Meyke
GMD / SET
D-53754 Sankt Augustin
Germany

Phone: +49(2241)14-{2446, 2349}
Fax:   +49(2241)14-2242
email: {kobialka, meyke}@gmd.de






PS:  class add_Relship should be refined as follows:

  class add_Use_Relship(add_Document_Version used, add_Related_Object user)
     : add_Relship(NO_ROLE_SET, used, USE_USED_ROLE, user, USE_USER_ROLE)
  {
  // Class-Id: USE                              CONCEPT: document concept
  //
  // ABSTRACT PURPOSE:
  // relates a document version to the objects which use it
  //
    public:
// some shortcuts:
      add_Document_Version get_used();
      // get used role
      add_Related_Object get_user();
      // get user role
      sos_Bool is_used(add_Document_Version);
      sos_Bool is_user(add_Related_Object);
  };

////////////////////////////////////////////////////////////////////////
//                                                                     //
// CLASS-NAME:  add_Use_Relship              Class_Id: USED            //
//                                                                     //
// IMPLEMENTATION ISSUES:                                              //
//                                                                     //
/////////////////////////////////////////////////////////////////////////

add_Document_Version add_Use_Relship::get_used()
{
    return add_Document_Version::make(self.get_obj1());
}

add_Related_Object add_Use_Relship::get_user()
{
    return self.get_obj2();
}

sos_Bool add_Use_Relship::is_used(add_Document_Version ver)
{
    return ver == self.get_used();
}

sos_Bool add_Use_Relship::is_user(add_Related_Object ver)
{
    return ver == self.get_user();
}



