Status validateStorageOptions(const BSONObj& storageEngineOptions, stdx::function<Status (const StorageEngine::Factory* const, const BSONObj&)> validateFunc) { BSONObjIterator storageIt(storageEngineOptions); while (storageIt.more()) { BSONElement storageElement = storageIt.next(); StringData storageEngineName = storageElement.fieldNameStringData(); if (storageElement.type() != mongo::Object) { return Status(ErrorCodes::BadValue, str::stream() << "'storageEngine." << storageElement.fieldNameStringData() << "' has to be an embedded document."); } boost::scoped_ptr<StorageFactoriesIterator> sfi(getGlobalServiceContext()-> makeStorageFactoriesIterator()); invariant(sfi); bool found = false; while (sfi->more()) { const StorageEngine::Factory* const& factory = sfi->next(); if (storageEngineName != factory->getCanonicalName()) { continue; } Status status = validateFunc(factory, storageElement.Obj()); if ( !status.isOK() ) { return status; } found = true; } if (!found) { return Status(ErrorCodes::InvalidOptions, str::stream() << storageEngineName << " is not a registered storage engine for this server"); } } return Status::OK(); }
BSONArray storageEngineList() { if (!hasGlobalServiceContext()) return BSONArray(); std::unique_ptr<StorageFactoriesIterator> sfi( getGlobalServiceContext()->makeStorageFactoriesIterator()); if (!sfi) return BSONArray(); BSONArrayBuilder engineArrayBuilder; while (sfi->more()) { engineArrayBuilder.append(sfi->next()->getCanonicalName()); } return engineArrayBuilder.arr(); }
void TagColorEditor::askGradientChoice() { QString homePath = QDir::homePath(); QFileInfo sfi(homePath, ".drishtigradients.xml"); QString stopsflnm = sfi.absoluteFilePath(); if (!sfi.exists()) copyGradientFile(stopsflnm); QDomDocument document; QFile f(stopsflnm); if (f.open(QIODevice::ReadOnly)) { document.setContent(&f); f.close(); } QStringList glist; QDomElement main = document.documentElement(); QDomNodeList dlist = main.childNodes(); for(int i=0; i<dlist.count(); i++) { if (dlist.at(i).nodeName() == "gradient") { QDomNodeList cnode = dlist.at(i).childNodes(); for(int j=0; j<cnode.count(); j++) { QDomElement dnode = cnode.at(j).toElement(); if (dnode.nodeName() == "name") glist << dnode.text(); } } } bool ok; QString gstr = QInputDialog::getItem(0, "Color Gradient", "Color Gradient", glist, 0, false, &ok); if (!ok) return; int cno = -1; for(int i=0; i<dlist.count(); i++) { if (dlist.at(i).nodeName() == "gradient") { QDomNodeList cnode = dlist.at(i).childNodes(); for(int j=0; j<cnode.count(); j++) { QDomElement dnode = cnode.at(j).toElement(); if (dnode.tagName() == "name" && dnode.text() == gstr) { cno = i; break; } } } } if (cno < 0) return; QGradientStops stops; QDomNodeList cnode = dlist.at(cno).childNodes(); for(int j=0; j<cnode.count(); j++) { QDomElement de = cnode.at(j).toElement(); if (de.tagName() == "gradientstops") { QString str = de.text(); QStringList strlist = str.split(" ", QString::SkipEmptyParts); for(int j=0; j<strlist.count()/5; j++) { float pos, r,g,b,a; pos = strlist[5*j].toFloat(); r = strlist[5*j+1].toInt(); g = strlist[5*j+2].toInt(); b = strlist[5*j+3].toInt(); a = strlist[5*j+4].toInt(); stops << QGradientStop(pos, QColor(r,g,b,a)); } } } int mapSize = QInputDialog::getInt(0, "Number of Colors", "Number of Colors", 50, 2, 255, 1, &ok); if (!ok) mapSize = 50; QGradientStops gstops; gstops = StaticFunctions::resampleGradientStops(stops, mapSize); uchar *colors = Global::tagColors(); for(int i=0; i<gstops.size(); i++) { float pos = gstops[i].first; QColor color = gstops[i].second; int r = color.red(); int g = color.green(); int b = color.blue(); colors[4*i+0] = r; colors[4*i+1] = g; colors[4*i+2] = b; } setColors(); }