#include #include #include #include #include #include using namespace std; struct FileSystem:public ImportModule { FileSystem(ClusterContext context):ImportModule(context) {} ~FileSystem(){} MetricProxy *size; IntProxy *type; StringProxy *label; bool breaked; int progress; bool readDir(node n,string directory) { if (!pluginProgress->progress(progress,100)) { breaked=true; return false;} progress++; progress=progress%100; if (breaked) return false; DIR *dir=opendir(directory.c_str()); if (dir==0) return false; dirent *entry; struct stat infoEntry; int i=0; while ((entry = readdir(dir))!=0) { if (!strcmp("..",entry->d_name) || !strcmp(".",entry->d_name)) continue; string entryName=entry->d_name; string pathEntry=directory+entryName; lstat(pathEntry.c_str(),&infoEntry); if (infoEntry.st_dev==true) continue; node newNode=superGraph->addNode(); superGraph->addEdge(n,newNode); label->setNodeValue(newNode,entryName); if (infoEntry.st_size<1) size->setNodeValue(newNode,1); else size->setNodeValue(newNode,infoEntry.st_size); if ((infoEntry.st_mode & S_IFMT) == S_IFDIR) { type->setNodeValue(newNode,1); if (!readDir(newNode,pathEntry+"/")) superGraph->delNode(newNode); else { double newSize=0; Iterator *itN=superGraph->getOutNodes(newNode); for (;itN->hasNext();) { node itn=itN->next(); newSize+=size->getNodeValue(itn); } delete itN; size->setNodeValue(newNode,newSize); } } } closedir(dir); return true; } bool import(const string &name) { bool ok; // int nbNodes = QInputDialog::getInteger( QString("Please enter the number of nodes of the graph "),QString("Number of nodes"), 0, 0, 1000000, 10, &ok ); breaked=false; size=getProxy(superGraph,"viewMetric"); type=getProxy(superGraph,"viewShape"); label=getProxy(superGraph,"viewLabel"); type->setAllNodeValue(0); node newNode=superGraph->addNode(); QString dirName=QFileDialog::getExistingDirectory (); if (dirName.isNull()) return false; readDir(newNode,string(dirName.ascii())+"/"); double newSize=0; if (!breaked) { Iterator *itN=superGraph->getOutNodes(newNode); for (;itN->hasNext();) { node itn=itN->next(); newSize+=size->getNodeValue(itn); } delete itN; size->setNodeValue(newNode,newSize); } return !breaked; } }; IMPORTPLUGIN(FileSystem,"FileSystem","Auber","16/12/2002","0","0","1")