-
+// Copyright (C) 2013 James Turner - zakalawe@mac.com
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Library General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Library General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+//
#include <simgear/package/Package.hxx>
+#include <cassert>
#include <boost/foreach.hpp>
#include <simgear/debug/logstream.hxx>
+#include <simgear/structure/exception.hxx>
+
#include <simgear/package/Catalog.hxx>
#include <simgear/package/Install.hxx>
#include <simgear/package/Root.hxx>
{
return m_props->getIntValue("revision");
}
+
+std::string Package::name() const
+{
+ return m_props->getStringValue("name");
+}
+
+std::string Package::description() const
+{
+ return getLocalisedProp("decription");
+}
+
+SGPropertyNode* Package::properties() const
+{
+ return m_props.ptr();
+}
+
+string_list Package::thumbnailUrls() const
+{
+ string_list r;
+ BOOST_FOREACH(SGPropertyNode* dl, m_props->getChildren("thumbnail")) {
+ r.push_back(dl->getStringValue());
+ }
+ return r;
+}
string_list Package::downloadUrls() const
{
return aRoot->getStringValue(aName);
}
+PackageList Package::dependencies() const
+{
+ PackageList result;
+
+ BOOST_FOREACH(SGPropertyNode* dep, m_props->getChildren("depends")) {
+ std::string depName = dep->getStringValue("package");
+ unsigned int rev = dep->getIntValue("revision", 0);
+
+ // prefer local hangar package if possible, in case someone does something
+ // silly with naming. Of course flightgear's aircraft search doesn't know
+ // about hanagrs, so names still need to be unique.
+ Package* depPkg = m_catalog->getPackageById(depName);
+ if (!depPkg) {
+ Root* rt = m_catalog->root();
+ depPkg = rt->getPackageById(depName);
+ if (!depPkg) {
+ throw sg_exception("Couldn't satisfy dependency of " + id() + " : " + depName);
+ }
+ }
+
+ if (depPkg->revision() < rev) {
+ throw sg_range_exception("Couldn't find suitable revision of " + depName);
+ }
+
+ // forbid recursive dependency graphs, we don't need that level
+ // of complexity for aircraft resources
+ assert(depPkg->dependencies() == PackageList());
+
+ result.push_back(depPkg);
+ }
+
+ return result;
+}
+
} // of namespace pkg
} // of namespace simgear