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;
};