gif gif up gif contents
Nächste Seite: E.2 EmpDept Vorige Seite: E Klassen der Beispielapplikation

E.1 EmpDeptAdmin

class EmpDeptAdmin : public CBviewAdmin {
 public:
  EmpDeptAdmin(char* host, int port, 
               char* tool="EmpDeptAdmin",char* user=NULL) 
  : CBviewAdmin(host,port,tool,user) {
    if (connected()) {
      CBanswer* ans=notificationRequest("view(EmpDept)");
      if (ans)
        handleUpdateMessage(ans->getResult());
    }
  }
  
  ~EmpDeptAdmin() {
  }
  
  
  void handleInsert(CBterm* t) {
    if (!strcmp(t->getFunctor(),"EmpDept"))
      handleInsert_EmpDept(t);
    if (!strcmp(t->getFunctor(),"EmpDept_dept"))
      handleInsert_EmpDept_dept(t);
    if (!strcmp(t->getFunctor(),"SV_dept"))
      handleInsert_SV_dept(t);
    if (!strcmp(t->getFunctor(),"SV_dept_head"))
      handleInsert_SV_dept_head(t);
    if (!strcmp(t->getFunctor(),"EmpDept_salary"))
      handleInsert_EmpDept_salary(t);
  }
  
  
  void handleDelete(CBterm* t) {
    if (!strcmp(t->getFunctor(),"EmpDept"))
      handleDelete_EmpDept(t);
    if (!strcmp(t->getFunctor(),"EmpDept_dept"))
      handleDelete_EmpDept_dept(t);
    if (!strcmp(t->getFunctor(),"SV_dept"))
      handleDelete_SV_dept(t);
    if (!strcmp(t->getFunctor(),"SV_dept_head"))
      handleDelete_SV_dept_head(t);
    if (!strcmp(t->getFunctor(),"EmpDept_salary"))
      handleDelete_EmpDept_salary(t);
  }

  
  // Fall 1: Ein Haupt-Objekt einfuegen
  void handleInsert_EmpDept(CBterm* t) {
    CBref<EmpDept>* r=new CBref<EmpDept>(t->getArg(1));
    if(!EmpDeptSet.insert(r)) 
      delete r;
  }
  
  // Fall 2: Ein Attribut einfuegen, dass auf einen SubView verweist
  void handleInsert_EmpDept_dept(CBterm* t) {
    CBref<EmpDept>* r=new CBref<EmpDept>(t->getArg(1));
    CBref<EmpDept>* e=EmpDeptSet.find(*r);
    if (!e)  {
      EmpDeptSet.insert(r);
      e=r;
    }
    else 
      delete r;
    
    CBref<SV_dept>* d=new CBref<SV_dept>(t->getArg(3));
    CBref<SV_dept>* d2=SV_deptSet.find(*d);
    if (d2) {
      delete d;
      d=new CBref<SV_dept>(*d2);
      CBattribute<CBref<SV_dept > >* a=
        new CBattribute<CBref<SV_dept > >(t->getArg(2)->getFunctor(),d);
      if (!(*e)->dept.insert(a))
        delete a;
    }
    else {
      CBattribute<CBref<SV_dept > >* a=
        new CBattribute<CBref<SV_dept > >(t->getArg(2)->getFunctor(),d);
      SV_deptSet.insert(d);
      if(!(*e)->dept.insert(a))
        delete a;
    }
  }
  

  // Wieder Fall 1: HauptObjekt einfuegen
  void handleInsert_SV_dept(CBterm* t) {
    CBref<SV_dept>* r=new CBref<SV_dept>(t->getArg(1));
    if(!SV_deptSet.insert(r)) 
      delete r;
  }
  

  // Fall 3: Ein \"atomares" Attribut einfuegen
  void handleInsert_SV_dept_head(CBterm* t) {
    CBref<SV_dept>* r=new CBref<SV_dept>(t->getArg(1));
    CBref<SV_dept>* e=SV_deptSet.find(*r);
    if (!e)  {
      SV_deptSet.insert(r);
      e=r;
    }
    else {
      delete r;
      CBobjectName* o=new CBobjectName(t->getArg(3));
      CBattribute<CBobjectName >* a=
          new CBattribute<CBobjectName >(t->getArg(2)->getFunctor(),o);
      if(!(*e)->head.insert(a))
        delete a;
    }
  }

  // Wieder Fall 3: Ein \"atomares" Attribut einfuegen
  void handleInsert_EmpDept_salary(CBterm* t) {
    CBref<EmpDept>* r=new CBref<EmpDept>(t->getArg(1));
    CBref<EmpDept>* e=EmpDeptSet.find(*r);
    if (!e)  {
      EmpDeptSet.insert(r);
      e=r;
    }
    else {
      delete r;
      CBobjectName* o=new CBobjectName(t->getArg(3));
      CBattribute<CBobjectName >* a=
         new CBattribute<CBobjectName >(t->getArg(2)->getFunctor(),o);
      if(!(*e)->salary.insert(a))
        delete a;
    }
  }
  

  // Loeschungen
  // Fall 1: Ein Haupt-Objekt loeschen
  void handleDelete_EmpDept(CBterm* t) {
    CBref<EmpDept>* r=new CBref<EmpDept>(t->getArg(1));
    EmpDeptSet.remove(*r);
    delete r;
  }
  
  // Fall 2: Ein Attribut loeschen, dass auf einen SubView verweist
  // Faellt mit Loeschen eines atomaren Attributs zusammen (Insert-Fall 3)
  void handleDelete_SV_dept(CBterm* t) {
    CBref<EmpDept>* r=new CBref<EmpDept>(t->getArg(1));
    CBref<EmpDept>* e=EmpDeptSet.find(*r);
    if (!e)  {
      delete r;
      return;
    }
    else {
      delete r;
      CBref<SV_dept>* d=new CBref<SV_dept>(t->getArg(3));
      CBattribute<CBref<SV_dept > >* a=
          new CBattribute<CBref<SV_dept > >(t->getArg(2)->getFunctor(),d);
      (*e)->dept.remove(*a);
      delete a;
    }
  }
  

  // Wieder Fall 1: HauptObjekt loeschen
  void handleDelete_SV_dept(CBterm* t) {
    CBref<SV_dept>* r=new CBref<SV_dept>(t->getArg(1));
    SV_deptSet.remove(*r);
    delete r;
  }
  

  // Fall 3: Ein \"atomares" Attribut loeschen
  void handleDelete_SV_dept_head(CBterm* t) {
    CBref<SV_dept>* r=new CBref<SV_dept>(t->getArg(1));
    CBref<SV_dept>* e=SV_deptSet.find(*r);
    if (!e)  {
      delete r;
      return;
    }
    else {
      delete r;
      CBobjectName* o=new CBobjectName(t->getArg(3));
      CBattribute<CBobjectName >* a=
             new CBattribute<CBobjectName >(t->getArg(2)->getFunctor(),o);
      (*e)->head.remove(*a);
      delete a;
    }
  }

  // Wieder Fall 3: Ein \"atomares" Attribut loeschen
  void handleDelete_EmpDept_salary(CBterm* t) {
    CBref<EmpDept>* r=new CBref<EmpDept>(t->getArg(1));
    CBref<EmpDept>* e=EmpDeptSet.find(*r);
    if (!e)  {
      delete r;
      return;
    }
    else {
      delete r;
      CBobjectName* o=new CBobjectName(t->getArg(3));
      CBattribute<CBobjectName >* a=
          new CBattribute<CBobjectName >(t->getArg(2)->getFunctor(),o);
      (*e)->salary.remove(*a);
      delete a;
    }
  }

  CBset< CBref<EmpDept> > EmpDeptSet;
  CBset< CBref<SV_dept> > SV_deptSet;
    
};



Christoph Quix
31. Juli 1996