bool BCLComponentNameGreater::operator()(const BCLComponent& a, const BCLComponent& b) const { std::string aname; boost::optional<std::string> oaname = a.name(); if (oaname){ aname = *oaname; } std::string bname; boost::optional<std::string> obname = b.name(); if (obname){ bname = *obname; } return istringLess(bname, aname); }
bool LocalBCL::addComponent(BCLComponent& component) { QSqlQuery query(*m_qSqlDatabase); //Check for uid if (!component.uid().empty() && !component.versionId().empty()) { if (!query.exec(QString("DELETE FROM Components WHERE uid='%1' AND version_id='%2'").arg( escape(component.uid()), escape(component.versionId())))) return false; if (!query.exec(QString("INSERT INTO Components (uid, version_id, name, description, " "date_added, date_modified) VALUES('%1', '%2', '%3', '%4', %5, %6)").arg( escape(component.uid()), escape(component.versionId()), escape(component.name()), escape(component.description()), "datetime('now','localtime')", "datetime('now','localtime')"))) return false; //Insert files if (!query.exec(QString("DELETE FROM Files WHERE uid='%1' AND version_id='%2'").arg( escape(component.uid()), escape(component.versionId())))) return false; if (!component.files().empty()) { for (int i=0; i < (int) component.files().size(); i++) { if (!query.exec(QString("INSERT INTO Files (uid, version_id, filename, filetype) " "VALUES('%1', '%2', '%3', '%4')").arg(escape(component.uid()), escape(component.versionId()), escape(component.files()[i]), escape(component.filetypes()[i])))) return false; } } //Insert attributes if (!query.exec(QString("DELETE FROM Attributes WHERE uid='%1' AND version_id='%2'").arg( escape(component.uid()), escape(component.versionId())))) return false; if (!component.attributes().empty()) { Q_FOREACH(const Attribute& attribute, component.attributes()) { std::string dataValue, dataType; if (attribute.valueType().value() == AttributeValueType::Boolean) { dataValue = boost::lexical_cast<std::string>(attribute.valueAsBoolean()); dataType = "boolean"; } else if (attribute.valueType().value() == AttributeValueType::Integer) { dataValue = boost::lexical_cast<std::string>(attribute.valueAsInteger()); dataType = "int"; } else if (attribute.valueType().value() == AttributeValueType::Double) { dataValue = formatString(attribute.valueAsDouble()); dataType = "float"; } else { dataValue = attribute.valueAsString(); dataType = "string"; } if (!query.exec(QString("INSERT INTO Attributes (uid, version_id, name, value, units, type) " "VALUES('%1', '%2', '%3', '%4', '%5', '%6')").arg(escape(component.uid()), escape(component.versionId()), escape(attribute.name()), escape(dataValue), escape(attribute.units() ? attribute.units().get() : ""), escape(dataType)))) return false; } } return true; }