TSAM.cxx

Go to the documentation of this file.
00001 // @(#)root/clarens:$Id: TSAM.cxx 20882 2007-11-19 11:31:26Z rdm $
00002 // Author: Maarten Ballintijn   21/10/2004
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 //////////////////////////////////////////////////////////////////////////
00013 //                                                                      //
00014 // TSAM                                                                 //
00015 //                                                                      //
00016 //                                                                      //
00017 //////////////////////////////////////////////////////////////////////////
00018 
00019 #include "TSAM.h"
00020 
00021 #include "memory"
00022 #include <stdlib.h>
00023 #include "xmlrpc.h"
00024 #include "xmlrpc_client.h"
00025 
00026 
00027 #include "TString.h"
00028 #include "TObjString.h"
00029 #include "TList.h"
00030 #include "TXmlRpc.h"
00031 #include "TGM.h"
00032 
00033 
00034 ClassImp(TSAM)
00035 
00036 
00037 //______________________________________________________________________________
00038 TSAM::TSAM(TXmlRpc *rpc)
00039    : TClProxy("SAM", rpc)
00040 {
00041 }
00042 
00043 
00044 //______________________________________________________________________________
00045 Bool_t TSAM::GetVersion(TString &version)
00046 {
00047    xmlrpc_env *env = fRpc->GetEnv();
00048 
00049    xmlrpc_value *retval = fRpc->Call("version", 0);
00050    if (RpcFailed("GetVersion", "call")) return kFALSE;
00051 
00052    if (gDebug>0) fRpc->PrintValue(retval);
00053 
00054    char *rc;
00055    xmlrpc_value *val;
00056    xmlrpc_parse_value(env, retval, "(sV)", &rc, &val);
00057    if (RpcFailed("GetVersion", "decode")) return kFALSE;
00058 
00059    if (strcmp(rc, "SUCCESS") != 0) {
00060       char *errmsg;
00061       xmlrpc_parse_value(env, val, "s", &errmsg);
00062       if (RpcFailed("GetVersion", "decode errmsg")) return kFALSE;
00063 
00064       Error("GetVersion", "%s", errmsg);
00065       return kFALSE;
00066    }
00067 
00068    char *v;
00069    xmlrpc_parse_value(env, val, "s", &v);
00070    if (RpcFailed("GetVersion", "decode version")) return kFALSE;
00071 
00072    version = v;
00073 
00074    xmlrpc_DECREF (retval);
00075    return kTRUE;
00076 }
00077 
00078 
00079 //______________________________________________________________________________
00080 Bool_t TSAM::GetDatasets(TList *&datasets)
00081 {
00082    xmlrpc_env *env = fRpc->GetEnv();
00083 
00084    xmlrpc_value *retval = fRpc->Call("list_datasets", 0);
00085    if (RpcFailed("GetDatasets", "call")) return kFALSE;
00086 
00087    char *rc;
00088    xmlrpc_value *val;
00089    xmlrpc_parse_value(env, retval, "(sV)", &rc, &val);
00090    if (RpcFailed("GetDatasets", "decode reply")) return kFALSE;
00091 
00092    if (strcmp(rc, "SUCCESS") != 0) {
00093       char *errmsg;
00094       xmlrpc_parse_value(env, val, "s", &errmsg);
00095       if (RpcFailed("GetDatasets", "decode errmsg")) return kFALSE;
00096 
00097       Error("GetDatasets", "%s", errmsg);
00098       return kFALSE;
00099    }
00100 
00101    int n = xmlrpc_array_size (env, val);
00102    if (RpcFailed("GetDatasets", "array size")) return kFALSE;
00103 
00104    std::auto_ptr<TList> temp(new TList);
00105    temp->SetOwner();
00106    for(int i=0; i < n; i++) {
00107       xmlrpc_value *entry = xmlrpc_array_get_item(env, val, i);
00108       if (RpcFailed("GetDatasets", "get entry")) return kFALSE;
00109 
00110       char *ds;
00111       xmlrpc_parse_value(env, entry, "s", &ds);
00112       if (RpcFailed("GetDatasets", "decode entry")) return kFALSE;
00113 
00114       temp->Add(new TObjString(ds));
00115    }
00116 
00117    xmlrpc_DECREF (retval);
00118 
00119       datasets = temp.release();
00120    return kTRUE;
00121 }
00122 
00123 
00124 //______________________________________________________________________________
00125 Bool_t TSAM::GetDSetLocations(const Char_t *dataset, TList *&lmUrls)
00126 {
00127    xmlrpc_env *env = fRpc->GetEnv();
00128 
00129    xmlrpc_value *arg = xmlrpc_build_value(env, "(s)", dataset);
00130    if (RpcFailed("GetDSetLocations", "encode argument")) return kFALSE;
00131 
00132    xmlrpc_value *retval = fRpc->Call("dataset_locations", arg);
00133    if (RpcFailed("GetDSetLocations", "call")) return kFALSE;
00134 
00135    char *rc;
00136    xmlrpc_value *val;
00137    xmlrpc_parse_value(env, retval, "(sV)", &rc, &val);
00138    if (RpcFailed("GetDSetLocations", "decode reply")) return kFALSE;
00139 
00140    if (strcmp(rc, "SUCCESS") != 0) {
00141       char *errmsg;
00142       xmlrpc_parse_value(env, val, "s", &errmsg);
00143       if (RpcFailed("GetDSetLocations", "decode errmsg")) return kFALSE;
00144 
00145       Error("GetDSetLocations", "%s", errmsg);
00146       return kFALSE;
00147    }
00148 
00149    int n = xmlrpc_array_size (env, val);
00150    if (RpcFailed("GetDSetLocations", "array size")) return kFALSE;
00151 
00152    std::auto_ptr<TList> temp(new TList);
00153    temp->SetOwner();
00154    for(int i=0; i < n; i++) {
00155       xmlrpc_value *entry = xmlrpc_array_get_item(env, val, i);
00156       if (RpcFailed("GetDSetLocations", "get entry")) return kFALSE;
00157 
00158       char *ds;
00159       xmlrpc_parse_value(env, entry, "s", &ds);
00160       if (RpcFailed("GetDSetLocations", "decode entry")) return kFALSE;
00161 
00162       temp->Add(new TObjString(ds));
00163    }
00164 
00165    xmlrpc_DECREF (arg);
00166    xmlrpc_DECREF (retval);
00167 
00168    lmUrls = temp.release();
00169    return kTRUE;
00170 }
00171 
00172 
00173 //______________________________________________________________________________
00174 Bool_t TSAM::GetDSetFiles(const Char_t *dataset, const Char_t *lmUrl, TList *&files)
00175 {
00176    xmlrpc_env *env = fRpc->GetEnv();
00177 
00178    xmlrpc_value *arg = xmlrpc_build_value(env, "(ss)", dataset, lmUrl);
00179    if (RpcFailed("GetDSetFiles", "encode argument")) return kFALSE;
00180 
00181    xmlrpc_value *retval = fRpc->Call("dataset_files", arg);
00182    if (RpcFailed("GetDSetFiles", "call")) return kFALSE;
00183 
00184    char *rc;
00185    xmlrpc_value *val;
00186    xmlrpc_parse_value(env, retval, "(sV)", &rc, &val);
00187    if (RpcFailed("GetDSetFiles", "decode reply")) return kFALSE;
00188 
00189    if (strcmp(rc, "SUCCESS") != 0) {
00190       char *errmsg;
00191       xmlrpc_parse_value(env, val, "s", &errmsg);
00192       if (RpcFailed("GetDSetetFiles", "decode errmsg")) return kFALSE;
00193 
00194       Error("GetDSetFiles", "%s", errmsg);
00195       return kFALSE;
00196    }
00197 
00198    int n = xmlrpc_array_size (env, val);
00199    if (RpcFailed("GetDSetFiles", "array size")) return kFALSE;
00200 
00201    std::auto_ptr<TList> temp(new TList);
00202    temp->SetOwner();
00203    for(int i=0; i < n; i++) {
00204       xmlrpc_value *entry = xmlrpc_array_get_item(env, val, i);
00205       if (RpcFailed("GetDSetFiles", "get entry")) return kFALSE;
00206 
00207       char *dummy, *file, *cls, *name, *dir;
00208       Int_t size, first, n;
00209       xmlrpc_parse_value(env, entry, "((ss)(si)(ss)(ss)(si)(si)(ss))",
00210          &dummy, &file, &dummy, &size, &dummy, &cls, &dummy, &name,
00211          &dummy, &first, &dummy, &n, &dummy, &dir);
00212       if (RpcFailed("GetDSetFiles", "decode entry")) return kFALSE;
00213 
00214       temp->Add(new TGM::TFileParams(file, cls, name, dir, first, n));
00215    }
00216 
00217    xmlrpc_DECREF (arg);
00218    xmlrpc_DECREF (retval);
00219 
00220    files = temp.release();
00221    return kTRUE;
00222 }
00223 
00224 
00225 //______________________________________________________________________________
00226 Bool_t TSAM::GetDSetSize(const Char_t *dataset, Long64_t &size)
00227 {
00228    xmlrpc_env *env = fRpc->GetEnv();
00229 
00230    xmlrpc_value *arg = xmlrpc_build_value(env, "(s)", dataset);
00231    if (RpcFailed("GetDSetSize", "encode argument")) return kFALSE;
00232 
00233    xmlrpc_value *retval = fRpc->Call("dataset_size", arg);
00234    if (RpcFailed("GetDSetSize", "call")) return kFALSE;
00235 
00236    char *rc;
00237    xmlrpc_value *val;
00238    xmlrpc_parse_value(env, retval, "(sV)", &rc, &val);
00239    if (RpcFailed("GetDSetSize", "decode reply")) return kFALSE;
00240 
00241    if (strcmp(rc, "SUCCESS") != 0) {
00242       char *errmsg;
00243       xmlrpc_parse_value(env, val, "s", &errmsg);
00244       if (RpcFailed("GetDSetSize", "decode errmsg")) return kFALSE;
00245 
00246       Error("GetDSetSize", "%s", errmsg);
00247       return kFALSE;
00248    }
00249 
00250    double d;
00251    xmlrpc_parse_value(env, val, "d", &d);
00252    if (RpcFailed("GetDSetSize", "decode version")) return kFALSE;
00253 
00254    xmlrpc_DECREF (arg);
00255    xmlrpc_DECREF (retval);
00256 
00257    size = static_cast<Long64_t>(d);
00258 
00259    return kTRUE;
00260 }

Generated on Tue Jul 5 14:50:49 2011 for ROOT_528-00b_version by  doxygen 1.5.1