[DEV] better provider API
This commit is contained in:
parent
9b318f4cac
commit
fa0828fc30
@ -192,9 +192,9 @@ namespace etest {
|
||||
} \
|
||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||
} catch ( etk::Exception e ) { \
|
||||
testCatchThrow(e, __LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||
} catch ( ... ) {\
|
||||
testCatchThrow(__LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
@ -218,9 +218,9 @@ namespace etest {
|
||||
} \
|
||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||
} catch ( etk::Exception e ) { \
|
||||
testCatchThrow(e, __LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||
} catch ( ... ) {\
|
||||
testCatchThrow(__LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
@ -247,9 +247,9 @@ namespace etest {
|
||||
return; \
|
||||
} \
|
||||
} catch ( etk::Exception e ) { \
|
||||
testCatchThrow(e, __LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||
} catch ( ... ) {\
|
||||
testCatchThrow(__LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
@ -277,9 +277,9 @@ namespace etest {
|
||||
} \
|
||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||
} catch ( etk::Exception e ) { \
|
||||
testCatchThrow(e, __LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||
} catch ( ... ) {\
|
||||
testCatchThrow(__LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
@ -318,9 +318,9 @@ namespace etest {
|
||||
} \
|
||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||
} catch ( etk::Exception e ) { \
|
||||
testCatchThrow(e, __LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||
} catch ( ... ) {\
|
||||
testCatchThrow(__LINE__); \
|
||||
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
|
@ -46,7 +46,7 @@ bool etk::io::File::open(etk::io::OpenMode _mode) {
|
||||
break;
|
||||
}
|
||||
if(m_pointer == null) {
|
||||
TK_WARNING("Can not open the file " << m_path.getNative() << " mode: " << _mode << " errno" << errno << " (" << strerror(errno) << ")");
|
||||
TK_WARNING("Can not open the file '" << m_path.getNative() << "' mode: " << _mode << " errno" << errno << " (" << strerror(errno) << ")");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -136,9 +136,10 @@ namespace etk {
|
||||
/**
|
||||
* @brief Write all the vector in a file
|
||||
* @param[in] _value String data to write in the File
|
||||
* @return true the file is fully correcty write
|
||||
*/
|
||||
void fileWriteAll(const etk::String& _value) {
|
||||
write(static_cast<const void*>(&(_value[0])), sizeof(char), _value.size()/sizeof(char));
|
||||
bool fileWriteAll(const etk::String& _value) {
|
||||
return int64_t(_value.size()) == write(static_cast<const void*>(&(_value[0])), sizeof(char), _value.size()/sizeof(char));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ namespace etk {
|
||||
virtual ememory::SharedPtr<etk::io::Interface> create(const etk::Uri& _uri) = 0;
|
||||
virtual bool exist(const etk::Uri& _uri) = 0;
|
||||
virtual etk::Vector<etk::Uri> list(const etk::Uri& _uri) = 0;
|
||||
virtual bool canMove() { return false; }
|
||||
virtual bool move(const etk::Uri& _uriSource, const etk::Uri& _uriDestination) { return false; }
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -53,3 +53,11 @@ etk::Vector<etk::Uri> etk::uri::provider::ProviderFile::list(const etk::Uri& _ur
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
bool etk::uri::provider::ProviderFile::canMove() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool etk::uri::provider::ProviderFile::move(const etk::Uri& _uriSource, const etk::Uri& _uriDestination) {
|
||||
return etk::path::move(_uriSource.getPath(), _uriDestination.getPath());
|
||||
}
|
||||
|
@ -21,6 +21,8 @@ namespace etk {
|
||||
ememory::SharedPtr<etk::io::Interface> create(const etk::Uri& _uri) override;
|
||||
bool exist(const etk::Uri& _uri) override;
|
||||
etk::Vector<etk::Uri> list(const etk::Uri& _uri) override;
|
||||
virtual bool canMove() override;
|
||||
virtual bool move(const etk::Uri& _uriSource, const etk::Uri& _uriDestination) override;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -7,10 +7,18 @@
|
||||
#include <etk/uri/provider/ProviderFile.hpp>
|
||||
#include <etk/Map.hpp>
|
||||
#include <etk/io/File.hpp>
|
||||
#include <etk/debug.hpp>
|
||||
|
||||
static etk::Map<etk::String, ememory::SharedPtr<etk::uri::provider::Interface>>& getProviders() {
|
||||
static etk::Map<etk::String, ememory::SharedPtr<etk::uri::provider::Interface>> g_data;
|
||||
return g_data;
|
||||
namespace etk {
|
||||
namespace uri {
|
||||
namespace provider {
|
||||
etk::Map<etk::String, ememory::SharedPtr<etk::uri::provider::Interface>>& getProviders();
|
||||
etk::Map<etk::String, ememory::SharedPtr<etk::uri::provider::Interface>>& getProviders() {
|
||||
static etk::Map<etk::String, ememory::SharedPtr<etk::uri::provider::Interface>> g_data;
|
||||
return g_data;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void etk::uri::provider::add(const etk::String& _scheme, ememory::SharedPtr<etk::uri::provider::Interface> _interface) {
|
||||
@ -18,16 +26,16 @@ void etk::uri::provider::add(const etk::String& _scheme, ememory::SharedPtr<etk:
|
||||
if (scheme.empty() == true) {
|
||||
scheme = "RAW";
|
||||
}
|
||||
getProviders().set(scheme, _interface);
|
||||
etk::uri::provider::getProviders().set(scheme, _interface);
|
||||
}
|
||||
|
||||
void etk::uri::provider::clear() {
|
||||
getProviders().clear();
|
||||
etk::uri::provider::getProviders().clear();
|
||||
etk::uri::provider::add("", ememory::makeShared<etk::uri::provider::ProviderFile>());
|
||||
}
|
||||
|
||||
void etk::uri::provider::remove(const etk::String& _scheme) {
|
||||
getProviders().erase(_scheme);
|
||||
etk::uri::provider::getProviders().erase(_scheme);
|
||||
}
|
||||
|
||||
bool etk::uri::provider::exist(const etk::String& _scheme) {
|
||||
@ -35,28 +43,18 @@ bool etk::uri::provider::exist(const etk::String& _scheme) {
|
||||
if (scheme.empty() == true) {
|
||||
scheme = "RAW";
|
||||
}
|
||||
return getProviders().exist(scheme);
|
||||
return etk::uri::provider::getProviders().exist(scheme);
|
||||
}
|
||||
|
||||
ememory::SharedPtr<etk::io::Interface> etk::uri::provider::get(const etk::Uri& _uri) {
|
||||
etk::String scheme = _uri.getScheme();
|
||||
if (scheme.empty() == true) {
|
||||
scheme = "RAW";
|
||||
}
|
||||
if (getProviders().exist(scheme) == false) {
|
||||
return null;
|
||||
}
|
||||
return getProviders()[scheme]->create(_uri);
|
||||
}
|
||||
ememory::SharedPtr<etk::uri::provider::Interface> etk::uri::provider::getProvider(const etk::String& _scheme) {
|
||||
etk::String scheme = _scheme;
|
||||
if (scheme.empty() == true) {
|
||||
scheme = "RAW";
|
||||
}
|
||||
if (getProviders().exist(scheme) == false) {
|
||||
if (etk::uri::provider::getProviders().exist(scheme) == false) {
|
||||
return null;
|
||||
}
|
||||
return getProviders()[scheme];
|
||||
return etk::uri::provider::getProviders()[scheme];
|
||||
}
|
||||
|
||||
void etk::uri::provider::init() {
|
||||
@ -64,5 +62,6 @@ void etk::uri::provider::init() {
|
||||
}
|
||||
|
||||
void etk::uri::provider::unInit() {
|
||||
getProviders().clear();
|
||||
etk::uri::provider::getProviders().clear();
|
||||
}
|
||||
|
||||
|
@ -40,12 +40,6 @@ namespace etk {
|
||||
* @brief Clear all providers
|
||||
*/
|
||||
void clear();
|
||||
/**
|
||||
* @brief Get an IO interface with a specific URI
|
||||
* @param[in] _uri Data interface requested
|
||||
* @return The interface requested.
|
||||
*/
|
||||
ememory::SharedPtr<etk::io::Interface> get(const etk::Uri& _uri);
|
||||
/**
|
||||
* @brief Get an URI provider
|
||||
* @param[in] _scheme type of provider
|
||||
|
@ -55,6 +55,7 @@ def configure(target, my_module):
|
||||
'etk/archive/Archive.cpp',
|
||||
'etk/archive/Zip.cpp',
|
||||
'etk/uri/Uri.cpp',
|
||||
'etk/uri/uri.cpp',
|
||||
'etk/uri/Query.cpp',
|
||||
'etk/uri/provider/provider.cpp',
|
||||
'etk/uri/provider/ProviderFile.cpp',
|
||||
@ -92,6 +93,7 @@ def configure(target, my_module):
|
||||
'etk/TreeNode.hpp',
|
||||
'etk/FlatTree.hpp',
|
||||
'etk/uri/Uri.hpp',
|
||||
'etk/uri/uri.hpp',
|
||||
'etk/uri/Query.hpp',
|
||||
'etk/uri/provider/provider.hpp',
|
||||
'etk/uri/provider/Interface.hpp',
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
#include <etest/etest.hpp>
|
||||
#include <test-debug/debug.hpp>
|
||||
#include <etk/uri/Uri.hpp>
|
||||
#include <etk/uri/uri.hpp>
|
||||
#include <etk/uri/provider/provider.hpp>
|
||||
#include <etk/uri/provider/ProviderFile.hpp>
|
||||
#include <etk/uri/provider/ProviderFileZip.hpp>
|
||||
@ -72,9 +72,9 @@ TEST(TestUriProvider, checkPlouf) {
|
||||
EXPECT_EQ(etk::uri::provider::exist("PLOUF_1"), true);
|
||||
EXPECT_EQ(etk::uri::provider::exist("PLOUF_2"), true);
|
||||
EXPECT_EQ(s_plouf, 0);
|
||||
etk::uri::provider::get("PLOUF_1:///qsdfqsdfqsdfqsdf.txt");
|
||||
etk::uri::get("PLOUF_1:///qsdfqsdfqsdfqsdf.txt");
|
||||
EXPECT_EQ(s_plouf, 5555);
|
||||
etk::uri::provider::get("PLOUF_2:///qsdfqsdfqsdfqsdf.txt");
|
||||
etk::uri::get("PLOUF_2:///qsdfqsdfqsdfqsdf.txt");
|
||||
EXPECT_EQ(s_plouf, 9999);
|
||||
etk::uri::provider::remove("PLOUF_1");
|
||||
EXPECT_EQ(etk::uri::provider::exist(""), true);
|
||||
@ -176,7 +176,7 @@ TEST(TestUriProvider, directReadFile) {
|
||||
etk::uri::provider::add("DATA", ememory::makeShared<etk::uri::provider::ProviderFile>(etk::path::getDataPath()));
|
||||
EXPECT_EQ(etk::uri::provider::exist("DATA"), true);
|
||||
etk::Uri element("DATA:///data/dir_B/file_B_1.txt");
|
||||
ememory::SharedPtr<etk::io::Interface> ioElement = etk::uri::provider::get(element);
|
||||
ememory::SharedPtr<etk::io::Interface> ioElement = etk::uri::get(element);
|
||||
EXPECT_EQ(ioElement->open(etk::io::OpenMode::Read), true);
|
||||
etk::String data = ioElement->readAllString();
|
||||
EXPECT_EQ(ioElement->close(), true);
|
||||
@ -257,7 +257,7 @@ TEST(TestUriProvider, zipReadFile) {
|
||||
etk::uri::provider::add("DATA", ememory::makeShared<etk::uri::provider::ProviderFileZip>(etk::path::getDataPath() / "data_sample.zip", "data"));
|
||||
EXPECT_EQ(etk::uri::provider::exist("DATA"), true);
|
||||
etk::Uri element("DATA:///dir_B/file_B_1.txt");
|
||||
ememory::SharedPtr<etk::io::Interface> ioElement = etk::uri::provider::get(element);
|
||||
ememory::SharedPtr<etk::io::Interface> ioElement = etk::uri::get(element);
|
||||
EXPECT_EQ(ioElement->open(etk::io::OpenMode::Read), true);
|
||||
etk::String data = ioElement->readAllString();
|
||||
EXPECT_EQ(ioElement->close(), true);
|
||||
|
Loading…
x
Reference in New Issue
Block a user