33using namespace std::string_literals;
41namespace Experimental {
110 auto comp = std::make_shared<Browsable::RGroup>(
"top",
"Root browser");
114 std::unique_ptr<Browsable::RHolder> rootfold = std::make_unique<Browsable::TObjectHolder>(
gROOT->GetRootFolder(),
kFALSE);
117 comp->Add(std::make_shared<Browsable::RWrapper>(
"root", elem_root));
119 std::unique_ptr<Browsable::RHolder> rootfiles = std::make_unique<Browsable::TObjectHolder>(
gROOT->GetListOfFiles(),
kFALSE);
122 auto files = std::make_shared<Browsable::RWrapper>(
"ROOT Files", elem_files);
123 files->SetExpandByDefault(
true);
126 if (elem_files->GetNumChilds() > 0)
164 arr.insert(arr.end(), arr2.begin(), arr2.end());
174 path.insert(path.end(), request.
path.begin(), request.
path.end());
179 if (!elem)
return false;
187 }
else if (request.
reload) {
197 if (!iter)
return false;
217 if (request.
sort.empty()) {
220 if (item->IsFolder())
223 if (!item->IsFolder())
230 if (request.
sort !=
"unsorted")
242 const std::regex expr(request.
regex);
248 if (!request.
hidden && item->IsHidden())
251 if (!request.
regex.empty() && !item->IsFolder() && !std::regex_match(item->GetName(), expr))
255 reply.
nodes.emplace_back(item);
317 for (
auto &entry :
fCache)
318 if (entry.first == path)
325 for (
auto &entry :
fCache) {
326 if (entry.first.size() >= path.size())
331 if ((comp > pos) && (comp == (
int) entry.first.size())) {
337 while (pos < (
int) path.size()) {
338 std::string subname = path[pos];
341 auto iter = elem->GetChildsIter();
345 if (!iter->Find(subname, indx)) {
348 iter = elem->GetChildsIter();
349 if (!iter || !iter->Find(subname))
353 elem = iter->GetElement();
359 subpath.resize(pos+1);
360 fCache.emplace_back(subpath, elem);
386 while (pos <
fCache.size()) {
387 if (obj ? !
fCache[pos].second->IsObject(obj) :
fCache[pos].second->CheckValid()) {
393 auto path =
fCache[pos].first;
408 if (path.size() == 0)
413 while (pos <
fCache.size()) {
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
R__EXTERN TVirtualMutex * gROOTMutex
#define R__LOCKGUARD(mutex)
static int ExtractItemIndex(std::string &name)
Extract index from name Index coded by client with ###<indx>$$$ suffix Such coding used by browser to...
static int ComparePaths(const RElementPath_t &path1, const RElementPath_t &path2)
Compare two paths, Returns number of elements matches in both paths.
static RElementPath_t ParsePath(const std::string &str)
Parse string path to produce RElementPath_t One should avoid to use string pathes as much as possible...
Representation of single item in the browser.
static std::shared_ptr< RElement > Browse(std::unique_ptr< RHolder > &obj)
Create browsable element for the object Created element may take ownership over the object.
static RElementPath_t ProvideTopEntries(std::shared_ptr< RGroup > &comp, const std::string &workdir="")
Provide top entries for file system On windows it is list of existing drivers, on Linux it is "Files ...
void RecursiveRemove(TObject *obj) override
Recursively remove this object from a list.
RBrowserDataCleanup(RBrowserData &_data)
Way to browse (hopefully) everything in ROOT.
void SetTopElement(std::shared_ptr< Browsable::RElement > elem)
set top element for browsing
std::string fLastSortMethod
! last sort method
bool RemoveFromCache(void *obj)
Remove object from cache If nullptr specified - removes no-longer-valid elements Returns true if any ...
std::shared_ptr< Browsable::RElement > GetSubElement(const Browsable::RElementPath_t &path)
Returns sub-element starting from top, using cached data.
Browsable::RElementPath_t DecomposePath(const std::string &path, bool relative_to_work_element)
Decompose path to elements Returns array of names for each element in the path, first element either ...
virtual ~RBrowserData()
Destructor.
bool ProcessBrowserRequest(const RBrowserRequest &request, RBrowserReply &reply)
Process browser request.
std::vector< std::pair< Browsable::RElementPath_t, std::shared_ptr< Browsable::RElement > > > fCache
! already requested elements
std::shared_ptr< Browsable::RElement > GetElementFromTop(const Browsable::RElementPath_t &path)
Returns element with path, specified as Browsable::RElementPath_t.
void ClearCache()
Clear internal objects cache.
std::vector< const Browsable::RItem * > fLastSortedItems
! sorted child items, used in requests
bool fLastAllChilds
! if all chlds were extracted
std::string ProcessRequest(const RBrowserRequest &request)
Process browser request, returns string with JSON of RBrowserReply data.
Browsable::RElementPath_t fWorkingPath
! path showed in Breadcrumb
bool fLastSortReverse
! last request reverse order
Browsable::RElementPath_t fLastPath
! path to last used element
std::shared_ptr< Browsable::RElement > fTopElement
! top element
void SetWorkingPath(const Browsable::RElementPath_t &path)
set working directory relative to top element
std::shared_ptr< Browsable::RElement > fLastElement
! last element used in request
std::unique_ptr< RBrowserDataCleanup > fCleanupHandle
! cleanup handle for RecursiveRemove
std::shared_ptr< Browsable::RElement > GetElement(const std::string &str)
Returns element with path, specified as string.
std::vector< std::unique_ptr< Browsable::RItem > > fLastItems
! created browser items - used in requests
void ResetLastRequestData(bool with_element)
Reset all data correspondent to last request.
void CreateDefaultElements()
Create default elements shown in the RBrowser.
RBrowserData()
Default constructor.
Reply on browser request.
std::vector< const Browsable::RItem * > nodes
list of pointers, no ownership!
std::vector< std::string > path
reply path
int nchilds
total number of childs in the node
int first
first node in returned list
Request send from client to get content of path element.
bool reverse
reverse item order
bool hidden
show hidden files
std::vector< std::string > path
requested path
bool reload
force items reload
int first
first child to request
int number
number of childs to request, 0 - all childs
std::string sort
kind of sorting
std::string regex
applied regex
int lastcycle
show only last cycle, -1 - off, 0 - not change, +1 on,
A log configuration for a channel, e.g.
static TString ToJSON(const T *obj, Int_t compact=0, const char *member_name=nullptr)
@ kSkipTypeInfo
do not store typenames in JSON
@ kNoSpaces
no new lines plus remove all spaces around "," and ":" symbols
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=nullptr)
Set the value of a resource or create a new resource.
Mother of all ROOT objects.
const char * Data() const
std::vector< std::string > RElementPath_t
RLogChannel & BrowserLog()
Log channel for Browser diagnostics.
This file contains a specialised ROOT message handler to test for diagnostic in unit tests.