1 #include "TGliteXmlEventlist.h"
3 ///////////////////////////////////////////////////////////////////////////////////////
4 // class to read gLite XML collections
5 // Autor: Dr. A.-J. Peters - CERN 2004/ALICE Mail-to: Andreas.Joachim.Peters@cern.ch
6 ///////////////////////////////////////////////////////////////////////////////////////
9 // ---------------------------------------------------------------------------------
10 // TGliteXmlEventlist* evlist = new TGliteXmlEventlist("/tmp/fileset.rxml");
12 // // loop over all events
13 // while (evlist->Next()) {
14 // printf("URL for file AliESDs.root is: \n", evlist->GetURL("AliESDs.root"));
17 // ---------------------------------------------------------------------------------
20 #include <TCollection.h>
22 #include <TObjString.h>
23 #include <TXMLEngine.h>
27 ClassImp(TGliteXmlEventlist)
30 TGliteXmlEventlist::TGliteXmlEventlist(const char* localfilename):
32 fXmlFile(localfilename),
33 fEventList(new TList()),
34 fEventListIter(new TIter(fEventList)),
37 //Andi - please put a comment
38 fEventList->SetOwner(kTRUE);
42 TGliteXmlEventlist::~TGliteXmlEventlist() {
43 //Andi - please put a comment
45 delete fEventListIter;
49 TGliteXmlEventlist::Reset() {
50 //Andi - please put a comment
51 fEventListIter->Reset();
55 TMap* TGliteXmlEventlist::Next() {
56 //Andi - please put a comment
57 fCurrent = (TMap*)fEventListIter->Next();
61 void TGliteXmlEventlist::ReadXML() {
62 //Andi - please put a comment
63 TXMLEngine* xml = new TXMLEngine();
64 #if ROOT_VERSION_CODE < 328704
65 xmlDocPointer xdoc = xml->ParseFile(fXmlFile);
66 xmlNodePointer xglite = xml->DocGetRootElement(xdoc);
67 xmlNodePointer xdtext = xml->GetChild(xglite);
68 xmlNodePointer xcollection = xml->GetNext(xdtext);
70 xmlNodePointer xtext = 0;
71 xmlNodePointer xevent = 0;
72 xmlNodePointer xtextnext = 0;
73 xmlNodePointer xeventnext = 0;
75 XMLDocPointer_t xdoc = xml->ParseFile(fXmlFile);
76 XMLNodePointer_t xglite = xml->DocGetRootElement(xdoc);
77 XMLNodePointer_t xdtext = xml->GetChild(xglite);
78 XMLNodePointer_t xcollection = xml->GetNext(xdtext);
80 XMLNodePointer_t xtext = 0;
81 XMLNodePointer_t xevent = 0;
82 XMLNodePointer_t xtextnext = 0;
83 XMLNodePointer_t xeventnext = 0;
85 Bool_t first_event=kTRUE;
88 xtextnext = xml->GetChild(xcollection);
91 xtextnext = xml->GetNext(xevent);
95 xeventnext = xml->GetNext(xtextnext);
103 if (xml->GetAttr(xevent,"name")) {
104 TMap* files = new TMap();
107 // printf("Found xevent: %s\n",xml->GetAttr(xevent,"name"));
109 Bool_t first_file = kTRUE;
111 #if ROOT_VERSION_CODE < 328704
112 xmlNodePointer xfile = 0;
113 xmlNodePointer xfiletext = 0;
115 xmlNodePointer xfilenext = 0;
116 xmlNodePointer xfiletextnext = 0;
118 XMLNodePointer_t xfile = 0;
119 XMLNodePointer_t xfiletext = 0;
121 XMLNodePointer_t xfilenext = 0;
122 XMLNodePointer_t xfiletextnext = 0;
126 xfiletextnext = xml->GetChild(xevent);
129 xfiletextnext = xml->GetNext(xfile);
133 xfilenext = xml->GetNext(xfiletextnext);
134 xfiletext = xfilenext;
141 // here we have an event file
142 // printf("Found file: %s\n",xml->GetAttr(xfile,"name"));
144 // get the attributes;
145 // xml->GetAttr(xfile,"comment");
146 // xml->GetAttr(xfile,"date");
147 // xml->GetAttr(xfile,"group");
148 // xml->GetAttr(xfile,"guid");
149 // xml->GetAttr(xfile,"path");
150 // xml->GetAttr(xfile,"permissions");
151 // xml->GetAttr(xfile,"pfn");
152 // xml->GetAttr(xfile,"se");
153 // xml->GetAttr(xfile,"size");
154 // xml->GetAttr(xfile,"user");
156 Bool_t first_mirror = kTRUE;
158 #if ROOT_VERSION_CODE < 328704
159 xmlNodePointer xmirror = 0;
160 xmlNodePointer xmirrortext = 0;
162 xmlNodePointer xmirrornext = 0;
163 xmlNodePointer xmirrortextnext = 0;
165 XMLNodePointer_t xmirror = 0;
166 XMLNodePointer_t xmirrortext = 0;
168 XMLNodePointer_t xmirrornext = 0;
169 XMLNodePointer_t xmirrortextnext = 0;
174 xmirrortextnext = xml->GetChild(xfile);
175 first_mirror = kFALSE;
177 xmirrortextnext = xml->GetNext(xmirror);
180 if (xmirrortextnext) {
181 xmirrornext = xml->GetNext(xmirrortextnext);
182 xmirrortext = xmirrornext;
183 xmirror = xmirrornext;
189 // here we have a file mirror
190 xml->GetAttr(xmirror,"name");
191 xml->GetAttr(xmirror,"domain");
192 xml->GetAttr(xmirror,"latitude");
193 xml->GetAttr(xmirror,"longitude");
194 xml->GetAttr(xmirror,"location");
195 xml->GetAttr(xmirror,"master");
196 xml->GetAttr(xmirror,"site");
197 xml->GetAttr(xmirror,"rootd");
198 const char* master = 0;
199 if ( (master = xml->GetAttr(xmirror,"master"))) {
200 if (atoi(master) == 1) {
201 files->Add(new TObjString(xml->GetAttr(xfile,"name")) , new TObjString(xml->GetAttr(xmirror,"rootd")));
204 // printf("Found File Mirror: %s\n",xml->GetAttr(xmirror,"name"));
209 // printf("Adding files\n");
210 fEventList->Add(files);
217 const char* TGliteXmlEventlist::GetURL(const char* filename) const {
218 //Andi - please put a comment
220 TObjString* obj = (TObjString*)fCurrent->GetValue(filename);
222 if (strlen(obj->GetName()))
223 return (obj->GetName());
235 void TGliteXmlEventlist::Print(Option_t */*opt*/) const {
236 //Andi - please put a comment
237 printf("Dumping %d elements\n",fEventList->GetSize());
238 TIter next(fEventList);
241 while ( (filemap = (TMap*)next()) ) {
243 printf("Printing Element %d\n",count);