+string_list Package::variants() const
+{
+ string_list result;
+ result.push_back(id());
+
+ BOOST_FOREACH(SGPropertyNode* var, m_props->getChildren("variant")) {
+ result.push_back(var->getStringValue("id"));
+ }
+
+ return result;
+}
+
+std::string Package::nameForVariant(const std::string& vid) const
+{
+ if (vid == id()) {
+ return name();
+ }
+
+ BOOST_FOREACH(SGPropertyNode* var, m_props->getChildren("variant")) {
+ if (vid == var->getStringValue("id")) {
+ return var->getStringValue("name");
+ }
+ }
+
+
+ throw sg_exception("Unknow variant +" + vid + " in package " + id());
+}
+
+std::string Package::nameForVariant(const unsigned int vIndex) const
+{
+ if (vIndex == 0)
+ return name();
+
+ // offset by minus one to allow for index 0 being the primary
+ SGPropertyNode_ptr var = m_props->getChild("variant", vIndex - 1);
+ if (var)
+ return var->getStringValue("name");
+
+ throw sg_exception("Unknow variant in package " + id());
+}
+
+