12 #ifndef ROOT_TRootSniffer
13 #define ROOT_TRootSniffer
24 class TRootSnifferStore;
27 class TRootSnifferScanRec {
29 friend class TRootSniffer;
37 kCheckChilds = 0x0008,
42 TRootSnifferScanRec *fParent{
nullptr};
44 const char *fSearchPath{
nullptr};
48 Int_t fRestriction{0};
50 TRootSnifferStore *fStore{
nullptr};
51 Bool_t fHasMore{kFALSE};
52 Bool_t fNodeStarted{kFALSE};
57 TRootSnifferScanRec();
58 virtual ~TRootSnifferScanRec();
63 Bool_t CanSetFields()
const {
return (fMask & kScan) && (fStore !=
nullptr); }
66 Bool_t ScanOnlyFields()
const {
return (fMask & kOnlyFields) && (fMask & kScan); }
69 void CreateNode(
const char *_node_name);
71 void BeforeNextChild();
74 void SetField(
const char *name,
const char *value, Bool_t with_quotes = kTRUE);
77 void SetRootClass(TClass *cl);
80 Bool_t CanExpandItem();
83 Bool_t IsReadyForResult()
const;
86 Bool_t SetResult(
void *obj, TClass *cl, TDataMember *member =
nullptr);
89 Bool_t SetFoundResult(
void *obj, TClass *cl, TDataMember *member =
nullptr);
98 void MakeItemName(
const char *objname, TString &itemname);
101 void BuildFullName(TString &buf, TRootSnifferScanRec *prnt =
nullptr);
104 Bool_t IsReadOnly(Bool_t dflt = kTRUE);
106 Bool_t GoInside(TRootSnifferScanRec &super, TObject *obj,
const char *obj_name =
nullptr,
107 TRootSniffer *sniffer =
nullptr);
109 ClassDef(TRootSnifferScanRec, 0)
114 class TRootSniffer :
public TNamed {
120 TString fObjectsPath;
121 Bool_t fReadOnly{kTRUE};
122 Bool_t fScanGlobalDir{kTRUE};
123 std::unique_ptr<TFolder> fTopFolder;
124 THttpCallArg *fCurrentArg{
nullptr};
125 Int_t fCurrentRestrict{0};
126 TString fCurrentAllowedMethods;
130 void ScanObjectMembers(TRootSnifferScanRec &rec, TClass *cl,
char *ptr);
132 virtual void ScanObjectProperties(TRootSnifferScanRec &rec, TObject *obj);
134 virtual void ScanKeyProperties(TRootSnifferScanRec &rec, TKey *key, TObject *&obj, TClass *&obj_class);
136 virtual void ScanObjectChilds(TRootSnifferScanRec &rec, TObject *obj);
139 ScanCollection(TRootSnifferScanRec &rec, TCollection *lst,
const char *foldername =
nullptr, TCollection *keys_lst =
nullptr);
141 virtual void ScanRoot(TRootSnifferScanRec &rec);
143 TString DecodeUrlOptionValue(
const char *value, Bool_t remove_quotes = kTRUE);
145 TObject *GetItem(
const char *fullname, TFolder *&parent, Bool_t force = kFALSE, Bool_t within_objects = kTRUE);
147 TFolder *GetSubFolder(
const char *foldername, Bool_t force = kFALSE);
149 const char *GetItemField(TFolder *parent, TObject *item,
const char *name);
151 Bool_t IsItemField(TObject *obj)
const;
153 Bool_t AccessField(TFolder *parent, TObject *item,
const char *name,
const char *value, TNamed **only_get =
nullptr);
155 Int_t WithCurrentUserName(
const char *option);
157 virtual Bool_t CanDrawClass(TClass *) {
return kFALSE; }
159 virtual Bool_t HasStreamerInfo()
const {
return kFALSE; }
161 virtual Bool_t ProduceJson(
const std::string &path,
const std::string &options, std::string &res);
163 virtual Bool_t ProduceXml(
const std::string &path,
const std::string &options, std::string &res);
165 virtual Bool_t ProduceBinary(
const std::string &path,
const std::string &options, std::string &res);
167 virtual Bool_t ProduceImage(Int_t kind,
const std::string &path,
const std::string &options, std::string &res);
169 virtual Bool_t ProduceExe(
const std::string &path,
const std::string &options, Int_t reskind, std::string &res);
171 virtual Bool_t ExecuteCmd(
const std::string &path,
const std::string &options, std::string &res);
174 ProduceItem(
const std::string &path,
const std::string &options, std::string &res, Bool_t asjson = kTRUE);
177 ProduceMulti(
const std::string &path,
const std::string &options, std::string &res, Bool_t asjson = kTRUE);
180 TRootSniffer(
const char *name,
const char *objpath =
"Objects");
181 virtual ~TRootSniffer();
185 void SetReadOnly(Bool_t on = kTRUE) { fReadOnly = on; }
188 Bool_t IsReadOnly()
const {
return fReadOnly; }
190 void Restrict(
const char *path,
const char *options);
192 Bool_t HasRestriction(
const char *item_name);
194 Int_t CheckRestriction(
const char *item_name);
196 void CreateOwnTopFolder();
198 TFolder *GetTopFolder(Bool_t force = kFALSE);
201 void SetScanGlobalDir(Bool_t on = kTRUE) { fScanGlobalDir = on; }
203 void SetAutoLoad(
const char *scripts =
"");
205 const char *GetAutoLoad()
const;
208 Bool_t IsScanGlobalDir()
const {
return fScanGlobalDir; }
210 Bool_t RegisterObject(
const char *subfolder, TObject *obj);
212 Bool_t UnregisterObject(TObject *obj);
214 Bool_t RegisterCommand(
const char *cmdname,
const char *method,
const char *icon);
216 Bool_t CreateItem(
const char *fullname,
const char *title);
218 Bool_t SetItemField(
const char *fullname,
const char *name,
const char *value);
220 const char *GetItemField(
const char *fullname,
const char *name);
222 void SetCurrentCallArg(THttpCallArg *arg);
225 void ScanHierarchy(
const char *topname,
const char *path, TRootSnifferStore *store, Bool_t only_fields = kFALSE);
227 TObject *FindTObjectInHierarchy(
const char *path);
230 FindInHierarchy(
const char *path, TClass **cl =
nullptr, TDataMember **member =
nullptr, Int_t *chld =
nullptr);
232 Bool_t CanDrawItem(
const char *path);
234 Bool_t CanExploreItem(
const char *path);
236 virtual Bool_t IsStreamerInfoItem(
const char *) {
return kFALSE; }
238 virtual ULong_t GetStreamerInfoHash() {
return 0; }
240 virtual ULong_t GetItemHash(
const char *itemname);
242 Bool_t Produce(
const std::string &path,
const std::string &file,
const std::string &options, std::string &res);
244 ClassDef(TRootSniffer, 0)