// @(#)root/net:$Id$
// Author: A. Peters, G. Ganis   7/2/2007

/*************************************************************************
 * Copyright (C) 1995-2002, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TFileStager
#define ROOT_TFileStager

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TFileStager                                                          //
//                                                                      //
// Abstract base class defining an interface to a stager.               //
//                                                                      //
// To open a connection to a stager use the static method               //
// Open("<stager>"), where <stager> contains a keyword allowing to load //
// the relevant plug-in, e.g.                                           //
//           TFileStager::Open("root://lxb6064.cern.ch")                //
// will load TXNetFileStager and initialize it for the redirector at    //
// lxb6046.cern.ch .                                                    //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif

class TCollection;
class TFileCollection;

class TFileStager : public TNamed {

public:
   TFileStager(const char *stager) : TNamed(stager, stager) { }
   virtual ~TFileStager() { }

   virtual TList          *GetStaged(TCollection *pathlist);
   virtual Bool_t          IsStaged(const char *);
   virtual Int_t           Locate(const char *u, TString &f);
   virtual Int_t           LocateCollection(TFileCollection *fc, Bool_t addDummyUrl = kFALSE);
   virtual Bool_t          Matches(const char *s) { return ((s && (fName == s)) ? kTRUE : kFALSE); }
   virtual Bool_t          Stage(const char *, Option_t * = 0) { return kTRUE; }
   virtual Bool_t          Stage(TCollection *pathlist, Option_t *opt = 0);

   virtual Bool_t          IsValid() const { return kTRUE; }

   // Extract the path name from supported object types
   static TString          GetPathName(TObject *o);

   //--- Load desired plugin
   static TFileStager *Open(const char *stager);

   ClassDef(TFileStager,0)  // ABC defining interface to a stager
};

#endif
 TFileStager.h:1
 TFileStager.h:2
 TFileStager.h:3
 TFileStager.h:4
 TFileStager.h:5
 TFileStager.h:6
 TFileStager.h:7
 TFileStager.h:8
 TFileStager.h:9
 TFileStager.h:10
 TFileStager.h:11
 TFileStager.h:12
 TFileStager.h:13
 TFileStager.h:14
 TFileStager.h:15
 TFileStager.h:16
 TFileStager.h:17
 TFileStager.h:18
 TFileStager.h:19
 TFileStager.h:20
 TFileStager.h:21
 TFileStager.h:22
 TFileStager.h:23
 TFileStager.h:24
 TFileStager.h:25
 TFileStager.h:26
 TFileStager.h:27
 TFileStager.h:28
 TFileStager.h:29
 TFileStager.h:30
 TFileStager.h:31
 TFileStager.h:32
 TFileStager.h:33
 TFileStager.h:34
 TFileStager.h:35
 TFileStager.h:36
 TFileStager.h:37
 TFileStager.h:38
 TFileStager.h:39
 TFileStager.h:40
 TFileStager.h:41
 TFileStager.h:42
 TFileStager.h:43
 TFileStager.h:44
 TFileStager.h:45
 TFileStager.h:46
 TFileStager.h:47
 TFileStager.h:48
 TFileStager.h:49
 TFileStager.h:50
 TFileStager.h:51
 TFileStager.h:52
 TFileStager.h:53
 TFileStager.h:54
 TFileStager.h:55
 TFileStager.h:56
 TFileStager.h:57
 TFileStager.h:58
 TFileStager.h:59
 TFileStager.h:60
 TFileStager.h:61
 TFileStager.h:62
 TFileStager.h:63
 TFileStager.h:64
 TFileStager.h:65