GDBMS 1.0
GDBMS_for_documentation/transaction_mode_commands_nodes.cpp
Go to the documentation of this file.
00001 #include "maininclude.h"
00002 #include "listi.h"
00003 #include "settings.h"
00004 #include "hash_table.h"
00005 #include "tr_twin_ht.h"
00006 #include "file_semaphore.h"
00007 #include "some_functions.h"
00008 #include "initial_mode_commands.h"
00009 #include "session_mode_commands.h"
00010 #include "transaction_mode_commands.h"
00011 #include "transaction_mode_commands_types.h"
00012 #include "transaction_mode_commands_nodes.h"
00013 #include "transaction_mode_commands_edges.h"
00014 #include "transaction_mode_commands_find.h"
00015 using namespace std;
00016 int transaction_mode_commands_nodes::AddNode(int transaction_USCOREid, std::string node_USCOREname, std::string node_USCOREtype, ns1__AddNodeResponse& _param_18)
00017 {
00018     char *grphidstr=0;
00019   char *tridstr=0;
00020   tridstr=inttostr(transaction_USCOREid);
00021   grphidstr=settings::getGraphfromTransaction(tridstr);
00022   if(grphidstr&&tridstr){
00023     string trfolder;
00024   
00025     trfolder+="admin/";
00026     trfolder+=grphidstr;
00027     trfolder+="/";
00028     trfolder+=tridstr;
00029     string cmd;
00030     
00031   
00032     string edgfolder;
00033     edgfolder+=trfolder;
00034     edgfolder+="/edges";
00035   
00036     string nodefolder;
00037     nodefolder=trfolder;
00038     nodefolder+="/nodes";
00039   
00040   
00041     string grfolder;
00042     grfolder+="admin/";
00043     grfolder+=grphidstr;
00044     
00045     
00046     string realedges_folder;
00047     realedges_folder+=grfolder;
00048     realedges_folder+="/edges";
00049   
00050     string realnodes_folder;
00051     realnodes_folder+=grfolder;
00052     realnodes_folder+="/nodes";
00053     
00054     //hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id");
00055     hash_table real_nodes("nodes", realnodes_folder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id");
00056   
00057     //tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges);
00058     tr_twin_ht nodtwin("nodes", nodefolder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id", transaction_USCOREid, nodefolder.c_str(), &real_nodes);
00059     
00060     string types_folder;
00061     types_folder+=grfolder;
00062     types_folder+="/gr_types";
00063     hash_table grt("gr_types", types_folder.c_str(), "id;name;parsestr;composite;array;asize;aid;internal", "id;name", "id");
00064     //tuk se pravi ne6to
00065     int permitted=0;
00066     settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x400, 0x40, 0x4);
00067     if(permitted){
00068       string vals;
00069       int curid=nodtwin.getMAXID();
00070       vals+=inttostr(curid);
00071       vals+=";";
00072       vals+=node_USCOREname;
00073       vals+=";";
00074       char *grtypeid=0;
00075       grtypeid=grt.FindRecord("name", node_USCOREtype.c_str(), "id");
00076       if(grtypeid){
00077         vals+=grtypeid;
00078         nodtwin.AddRecord("id;name;type_id", vals.c_str());
00079         _param_18.retvalue=0;
00080         delete grtypeid;
00081       }else{
00082         _param_18.retvalue=3;
00083       }
00084       
00085       
00086       
00087       
00088     }else{
00089       _param_18.retvalue=1;
00090     }
00091     return 0;
00092   }
00093   return 0;
00094 }
00095 int transaction_mode_commands_nodes::AddValueToNode(int transaction_USCOREid, string node_USCOREname, string path, string value, ns1__AddValueToNodeResponse& _param_19)
00096 {
00097   char *grphidstr=0;
00098   char *tridstr=0;
00099   tridstr=inttostr(transaction_USCOREid);
00100   grphidstr=settings::getGraphfromTransaction(tridstr);
00101   if(grphidstr&&tridstr){
00102     string trfolder;
00103   
00104     trfolder+="admin/";
00105     trfolder+=grphidstr;
00106     trfolder+="/";
00107     trfolder+=tridstr;
00108     string cmd;
00109     
00110   
00111     string edgfolder;
00112     edgfolder+=trfolder;
00113     edgfolder+="/edges";
00114   
00115     string nodefolder;
00116     nodefolder=trfolder;
00117     nodefolder+="/nodes";
00118   
00119   
00120     string grfolder;
00121     grfolder+="admin/";
00122     grfolder+=grphidstr;
00123     
00124     
00125     string realedges_folder;
00126     realedges_folder+=grfolder;
00127     realedges_folder+="/edges";
00128   
00129     string realnodes_folder;
00130     realnodes_folder+=grfolder;
00131     realnodes_folder+="/nodes";
00132     
00133     //hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id");
00134     hash_table real_nodes("nodes", realnodes_folder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id");
00135   
00136     //tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges);
00137     tr_twin_ht nodtwin("nodes", nodefolder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id", transaction_USCOREid, nodefolder.c_str(), &real_nodes);
00138     
00139     //tuk se pravi ne6to
00140     int permitted=0;
00141     settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x400, 0x40, 0x4);
00142     if(permitted){
00143       
00144       char *foundnodedata=0;
00145       
00146       foundnodedata=nodtwin.FindRecord("name", node_USCOREname.c_str(), "data");
00147       if(foundnodedata){
00148         
00149         XMLNode x;
00150         x=XMLNode::parseString(foundnodedata);
00151         
00152         if(settings::is_type_path_valid(path.c_str(), grphidstr)){
00153           //tuka trqbva da se dobavi infoto
00154           
00155           string parsestr;
00156           bool success=0;
00157           settings::getparsestr(grphidstr, path.c_str(), parsestr);
00158           if(!parsestr.compare("%d")){
00159             if(settings::is_int(value.c_str())){
00160               success=1;
00161               
00162             }
00163             
00164           }else if(!parsestr.compare("%f")){
00165             if(settings::is_numeric(value.c_str()))
00166               success=1;
00167             
00168             
00169             
00170           }else{
00171             
00172             success=1;
00173           }
00174           if(success){
00176             x.getChildNodeByPath(path.c_str(), 1, ".");
00177             x.updateText(value.c_str());
00178             char *updated_data=0;
00179             XMLNode x2;
00180             x2=XMLNode::createXMLTopNode("xml");
00181             x2.addChild(x);
00182             updated_data=x2.getText();
00183             
00184             if(updated_data){
00185               nodtwin.UpdateRecord("name", node_USCOREname.c_str(), "data", value.c_str());
00186               _param_19.retvalue=0;
00187             }else{
00188               _param_19.retvalue=3;
00189             }
00190             
00191           }else{
00192             
00193             _param_19.retvalue=1;
00194           }
00195           
00196           
00197           
00198         }else{
00199           _param_19.retvalue=3;
00200         }
00201         
00202         
00203         
00204       }else{
00205         _param_19.retvalue=3;
00206       }
00207       
00208       
00209     }else{
00210       _param_19.retvalue=3;
00211     }
00212    
00213     
00214     delete grphidstr;
00215     delete tridstr;
00216   }else{
00217     _param_19.retvalue=3;
00218   }
00219   return 0;
00220 }
00221 int transaction_mode_commands_nodes::DeleteNode(int transaction_USCOREid, string node_USCOREname, ns1__DeleteNodeResponse& _param_20)
00222 {
00223   char *grphidstr=0;
00224   char *tridstr=0;
00225   tridstr=inttostr(transaction_USCOREid);
00226   grphidstr=settings::getGraphfromTransaction(tridstr);
00227   if(grphidstr&&tridstr){
00228     string trfolder;
00229   
00230     trfolder+="admin/";
00231     trfolder+=grphidstr;
00232     trfolder+="/";
00233     trfolder+=tridstr;
00234     string cmd;
00235     
00236   
00237     string edgfolder;
00238     edgfolder+=trfolder;
00239     edgfolder+="/edges";
00240   
00241     string nodefolder;
00242     nodefolder=trfolder;
00243     nodefolder+="/nodes";
00244   
00245   
00246     string grfolder;
00247     grfolder+="admin/";
00248     grfolder+=grphidstr;
00249     
00250     
00251     string realedges_folder;
00252     realedges_folder+=grfolder;
00253     realedges_folder+="/edges";
00254   
00255     string realnodes_folder;
00256     realnodes_folder+=grfolder;
00257     realnodes_folder+="/nodes";
00258     
00259     //hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id");
00260     hash_table real_nodes("nodes", realnodes_folder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id");
00261   
00262     //tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges);
00263     tr_twin_ht nodtwin("nodes", nodefolder.c_str(), "id;name;data;iedges;oedges;type_id;tr_id", "id;name;iedges;oedges;type_id;tr_id", "id", transaction_USCOREid, nodefolder.c_str(), &real_nodes);
00264     
00265     //tuk se pravi ne6to
00266     int permitted=0;
00267     settings::determineTransactionActionPermittion(permitted, transaction_USCOREid, 0x100, 0x10, 0x1);
00268     if(permitted){
00269       
00270       //iztrivane na vryzkite na edges kym tozi node
00271       hash_table real_edges("edges", realedges_folder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id");
00272       tr_twin_ht edgtwin("edges", edgfolder.c_str(), "id;name;data;inodes;onodes;type_id;tr_id", "id;name;inodes;onodes;type_id;tr_id", "id", transaction_USCOREid, edgfolder.c_str(), &real_edges);
00273       char *iedges=nodtwin.FindRecord("name", node_USCOREname.c_str(), "iedges");
00274       char *nodeid=nodtwin.FindRecord("name", node_USCOREname.c_str(), "id");
00275       if(iedges&&nodeid){
00276         char **iedges_splitted;
00277         char *num=0;
00278         settings::split(iedges, &num, &iedges_splitted, ',');
00279         int i;
00280         for(i=0; i<num; i++){
00281           char *onodes=edgtwin.FindRecord("id", iedges_splitted[i], "onodes");
00282           if(onodes){
00283            listi l(onodes, ',');
00284            l.removeelement(nodeid);
00285            edgtwin.UpdateRecord("id", iedges_splitted[i], "onodes", l.returnstring());
00286             
00287             
00288             
00289           }
00290            
00291            
00292          
00293           
00294           
00295         }
00296         
00297         
00298         delete iedges;
00299         delete nodeid;
00300         if(iedges_splitted){
00301          int j;
00302          for(j=0; j<num; j++)
00303            if(iedges_splitted[j])
00304              delete iedges_splitted[j];
00305          delete iedges_splitted;
00306         }
00307       }
00308       char *oedges=nodtwin.FindRecord("name", node_USCOREname.c_str(), "oedges");
00309       if(oedges){
00310         listi loedges(oedges, ',');
00311         int k;
00312         for(k=0; k<loedges.getnum(); k++){
00313           char *buf=loedges.getith(k);
00314           char *inodes=edgtwin.FindRecord("id", buf, "inodes");
00315           if(inodes){
00316             listi linodes(inodes, ',');
00317             linodes.removeelement(nodeid);
00318             edgtwin.UpdateRecord("id", buf, "inodes", linodes.returnstring());
00319             
00320           }
00321           
00322           
00323         }
00324         delete oedges;
00325         
00326         
00327       }
00328       //iztrivane na samiya node
00329       nodtwin.DeleteRecord("name", node_USCOREname.c_str());
00330       
00331       
00332       _param_20.retvalue=0;
00333     }else{
00334       _param_20.retvalue=1;
00335     }
00336     return 0;
00337   }
00338 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines