26 #include <XrdCl/XrdClFileSystem.hh>
28 ClassImp( TNetXNGFileStager);
35 TNetXNGFileStager::TNetXNGFileStager(
const char *url) :
38 fSystem =
new TNetXNGSystem(url);
44 TNetXNGFileStager::~TNetXNGFileStager()
54 Bool_t TNetXNGFileStager::IsStaged(
const char *path)
57 if (fSystem->GetPathInfo(path, st) != 0) {
59 Info(
"IsStaged",
"path %s cannot be stat'ed", path);
63 if (R_ISOFF(st.fMode)) {
65 Info(
"IsStaged",
"path '%s' is offline", path);
79 Int_t TNetXNGFileStager::Locate(
const char *path, TString &url)
81 return fSystem->Locate(path, url);
93 Int_t TNetXNGFileStager::LocateCollection(TFileCollection *fc,
97 Error(
"LocateCollection",
"No input collection given");
103 TIter it(fc->GetList());
104 TString startUrl, endUrl;
106 while ((info = dynamic_cast<TFileInfo *>(it.Next())) != NULL) {
107 startUrl = info->GetCurrentUrl()->GetUrl();
110 if (fSystem->Locate(startUrl.Data(), endUrl)) {
111 info->ResetBit(TFileInfo::kStaged);
114 info->AddUrl(
"noop://none", kTRUE);
117 Info(
"LocateCollection",
"Not found: %s", startUrl.Data());
122 info->SetBit(TFileInfo::kStaged);
124 if (startUrl != endUrl) {
125 info->AddUrl(endUrl.Data(), kTRUE);
126 }
else if (addDummyUrl) {
128 info->AddUrl(
"noop://redir", kTRUE);
132 Info(
"LocateCollection",
"Found: %s --> %s", startUrl.Data(),
145 Bool_t TNetXNGFileStager::Matches(
const char *s)
147 return ((s && (fName == s)) ? kTRUE : kFALSE);
157 Bool_t TNetXNGFileStager::Stage(
const char *path, Option_t *opt)
159 Int_t priority = ParseStagePriority(opt);
160 return fSystem->Stage(path, priority);
170 Bool_t TNetXNGFileStager::Stage(TCollection *paths, Option_t *opt)
172 Int_t priority = ParseStagePriority(opt);
173 return fSystem->Stage(paths, priority);
179 UChar_t TNetXNGFileStager::ParseStagePriority(Option_t *opt)
181 UChar_t priority = 0;
185 while (TString(opt).Tokenize(token, from,
"[ ,|]")) {
186 if (token.Contains(
"priority=")) {
187 token.ReplaceAll(
"priority=",
"");
188 if (token.IsDigit()) {
189 priority = token.Atoi();