summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2014-12-10 11:23:50 +0100
committerBenjamin Paassen <bpaassen@techfak.uni-bielefeld.de>2014-12-10 11:23:50 +0100
commitd4df46459e558f10cab9dc51ef0ee5bf5e769ad1 (patch)
tree670b8f009cb603c697690b4fc0a1e589e237f6d6 /src
parenta8f78252f05327d37aec3b853109b6d1359af452 (diff)
integrated ResourceLocator into the Registry.
Diffstat (limited to 'src')
-rw-r--r--src/core/Registry.cpp25
-rw-r--r--src/core/Registry.hpp15
2 files changed, 35 insertions, 5 deletions
diff --git a/src/core/Registry.cpp b/src/core/Registry.cpp
index 1961b35..6ff9594 100644
--- a/src/core/Registry.cpp
+++ b/src/core/Registry.cpp
@@ -29,12 +29,14 @@ using namespace parser;
void Registry::registerParser(parser::Parser *parser)
{
parsers.push_back(parser);
- for (const auto &mime : parser.mimetypes()) {
+ for (const auto &mime : parser->mimetypes()) {
+ //TODO: This does not allow for multiple parsers with the same mimetype.
+ // Is that how its supposed to be?
parserMimetypes.insert(std::make_pair(mime, parser));
}
}
-Parser* Registry::getParserForMimetype(const std::string &mimetype)
+Parser *Registry::getParserForMimetype(const std::string &mimetype) const
{
const auto it = parserMimetypes.find(mimetype);
if (it != parserMimetypes.end()) {
@@ -43,5 +45,24 @@ Parser* Registry::getParserForMimetype(const std::string &mimetype)
return nullptr;
}
+void Registry::registerResourceLocator(ResourceLocator *locator)
+{
+ locators.push_back(locator);
+}
+
+ResourceLocator::Location Registry::locateResource(
+ const std::string &path, const std::string &relativeTo,
+ ResourceLocator::Type type) const
+{
+ ResourceLocator::Location *last;
+ for (auto &locator : locators) {
+ ResourceLocator::Location loc = locator->locate(path, relativeTo, type);
+ if (loc.found) {
+ return loc;
+ }
+ last = &loc;
+ }
+ return *last;
+}
}
diff --git a/src/core/Registry.hpp b/src/core/Registry.hpp
index 235e427..01d57e8 100644
--- a/src/core/Registry.hpp
+++ b/src/core/Registry.hpp
@@ -22,6 +22,8 @@
#include <map>
#include <vector>
+#include "ResourceLocator.hpp"
+
namespace ousia {
// TODO: Add support for ScriptEngine type
@@ -35,15 +37,22 @@ class Parser;
class Registry {
private:
Logger &logger;
- std::vector<parser::Parser*> parsers;
- std::map<std::string, parser::Parser*> parserMimetypes;
+ std::vector<parser::Parser *> parsers;
+ std::map<std::string, parser::Parser *> parserMimetypes;
+ std::vector<ResourceLocator *> locators;
public:
Registry(Logger &logger) : logger(logger) {}
void registerParser(parser::Parser *parser);
- parser::Parser *getParserForMimetype(std::string mimetype);
+ parser::Parser *getParserForMimetype(const std::string& mimetype) const;
+
+ void registerResourceLocator(ResourceLocator *locator);
+
+ ResourceLocator::Location locateResource(const std::string &path,
+ const std::string &relativeTo,
+ ResourceLocator::Type type) const;
};
}