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 // ---------------------------------------------------------------------------------
19 #include <TCollection.h>
21 #include <TObjString.h>
22 #include <TXMLEngine.h>
26 ClassImp(TGliteXmlEventlist)
29 TGliteXmlEventlist::TGliteXmlEventlist(const char* localfilename) {
30 //Andi - please put a comment
31 fXmlFile = localfilename;
32 fEventList = new TList();
33 fEventList->SetOwner(kTRUE);
34 fEventListIter = new TIter(fEventList);
39 TGliteXmlEventlist::~TGliteXmlEventlist() {
40 //Andi - please put a comment
42 delete fEventListIter;
46 TGliteXmlEventlist::Reset() {
47 //Andi - please put a comment
48 fEventListIter->Reset();
52 TMap* TGliteXmlEventlist::Next() {
53 //Andi - please put a comment
54 fCurrent = (TMap*)fEventListIter->Next();
58 void TGliteXmlEventlist::ReadXML() {
59 //Andi - please put a comment
60 TXMLEngine* xml = new TXMLEngine();
61 xmlDocPointer xdoc = xml->ParseFile(fXmlFile);
62 xmlNodePointer xglite = xml->DocGetRootElement(xdoc);
63 xmlNodePointer xdtext = xml->GetChild(xglite);
64 xmlNodePointer xcollection = xml->GetNext(xdtext);
66 xmlNodePointer xtext = 0;
67 xmlNodePointer xevent = 0;
68 xmlNodePointer xtextnext = 0;
69 xmlNodePointer xeventnext = 0;
70 Bool_t first_event=kTRUE;
73 xtextnext = xml->GetChild(xcollection);
76 xtextnext = xml->GetNext(xevent);
80 xeventnext = xml->GetNext(xtextnext);
88 if (xml->GetAttr(xevent,"name")) {
89 TMap* files = new TMap();
92 // printf("Found xevent: %s\n",xml->GetAttr(xevent,"name"));
94 Bool_t first_file = kTRUE;
96 xmlNodePointer xfile = 0;
97 xmlNodePointer xfiletext = 0;
99 xmlNodePointer xfilenext = 0;
100 xmlNodePointer xfiletextnext = 0;
103 xfiletextnext = xml->GetChild(xevent);
106 xfiletextnext = xml->GetNext(xfile);
110 xfilenext = xml->GetNext(xfiletextnext);
111 xfiletext = xfilenext;
118 // here we have an event file
119 // printf("Found file: %s\n",xml->GetAttr(xfile,"name"));
121 // get the attributes;
122 // xml->GetAttr(xfile,"comment");
123 // xml->GetAttr(xfile,"date");
124 // xml->GetAttr(xfile,"group");
125 // xml->GetAttr(xfile,"guid");
126 // xml->GetAttr(xfile,"path");
127 // xml->GetAttr(xfile,"permissions");
128 // xml->GetAttr(xfile,"pfn");
129 // xml->GetAttr(xfile,"se");
130 // xml->GetAttr(xfile,"size");
131 // xml->GetAttr(xfile,"user");
133 Bool_t first_mirror = kTRUE;
135 xmlNodePointer xmirror = 0;
136 xmlNodePointer xmirrortext = 0;
138 xmlNodePointer xmirrornext = 0;
139 xmlNodePointer xmirrortextnext = 0;
143 xmirrortextnext = xml->GetChild(xfile);
144 first_mirror = kFALSE;
146 xmirrortextnext = xml->GetNext(xmirror);
149 if (xmirrortextnext) {
150 xmirrornext = xml->GetNext(xmirrortextnext);
151 xmirrortext = xmirrornext;
152 xmirror = xmirrornext;
158 // here we have a file mirror
159 xml->GetAttr(xmirror,"name");
160 xml->GetAttr(xmirror,"domain");
161 xml->GetAttr(xmirror,"latitude");
162 xml->GetAttr(xmirror,"longitude");
163 xml->GetAttr(xmirror,"location");
164 xml->GetAttr(xmirror,"master");
165 xml->GetAttr(xmirror,"site");
166 xml->GetAttr(xmirror,"rootd");
167 const char* master = 0;
168 if ( (master = xml->GetAttr(xmirror,"master"))) {
169 if (atoi(master) == 1) {
170 files->Add(new TObjString(xml->GetAttr(xfile,"name")) , new TObjString(xml->GetAttr(xmirror,"rootd")));
173 // printf("Found File Mirror: %s\n",xml->GetAttr(xmirror,"name"));
178 // printf("Adding files\n");
179 fEventList->Add(files);
186 const char* TGliteXmlEventlist::GetURL(const char* filename) const {
187 //Andi - please put a comment
189 TObjString* obj = (TObjString*)fCurrent->GetValue(filename);
191 if (strlen(obj->GetName()))
192 return (obj->GetName());
204 void TGliteXmlEventlist::Print(Option_t */*opt*/) const {
205 //Andi - please put a comment
206 printf("Dumping %d elements\n",fEventList->GetSize());
207 TIter next(fEventList);
210 while ( (filemap = (TMap*)next()) ) {
212 printf("Printing Element %d\n",count);