[DEV] better provider API
This commit is contained in:
parent
9b318f4cac
commit
fa0828fc30
@ -192,9 +192,9 @@ namespace etest {
|
|||||||
} \
|
} \
|
||||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||||
} catch ( etk::Exception e ) { \
|
} catch ( etk::Exception e ) { \
|
||||||
testCatchThrow(e, __LINE__); \
|
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||||
} catch ( ... ) {\
|
} catch ( ... ) {\
|
||||||
testCatchThrow(__LINE__); \
|
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||||
} \
|
} \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
@ -218,9 +218,9 @@ namespace etest {
|
|||||||
} \
|
} \
|
||||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||||
} catch ( etk::Exception e ) { \
|
} catch ( etk::Exception e ) { \
|
||||||
testCatchThrow(e, __LINE__); \
|
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||||
} catch ( ... ) {\
|
} catch ( ... ) {\
|
||||||
testCatchThrow(__LINE__); \
|
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||||
} \
|
} \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
@ -247,9 +247,9 @@ namespace etest {
|
|||||||
return; \
|
return; \
|
||||||
} \
|
} \
|
||||||
} catch ( etk::Exception e ) { \
|
} catch ( etk::Exception e ) { \
|
||||||
testCatchThrow(e, __LINE__); \
|
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||||
} catch ( ... ) {\
|
} catch ( ... ) {\
|
||||||
testCatchThrow(__LINE__); \
|
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||||
} \
|
} \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
@ -277,9 +277,9 @@ namespace etest {
|
|||||||
} \
|
} \
|
||||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||||
} catch ( etk::Exception e ) { \
|
} catch ( etk::Exception e ) { \
|
||||||
testCatchThrow(e, __LINE__); \
|
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||||
} catch ( ... ) {\
|
} catch ( ... ) {\
|
||||||
testCatchThrow(__LINE__); \
|
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||||
} \
|
} \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
@ -318,9 +318,9 @@ namespace etest {
|
|||||||
} \
|
} \
|
||||||
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
ETEST_DEBUG(" [ SUB-DONE ]"); \
|
||||||
} catch ( etk::Exception e ) { \
|
} catch ( etk::Exception e ) { \
|
||||||
testCatchThrow(e, __LINE__); \
|
etest::g_currentTest->testCatchThrow(e, __LINE__); \
|
||||||
} catch ( ... ) {\
|
} catch ( ... ) {\
|
||||||
testCatchThrow(__LINE__); \
|
etest::g_currentTest->testCatchThrow(__LINE__); \
|
||||||
} \
|
} \
|
||||||
} while (false)
|
} while (false)
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ bool etk::io::File::open(etk::io::OpenMode _mode) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(m_pointer == null) {
|
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 false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -136,9 +136,10 @@ namespace etk {
|
|||||||
/**
|
/**
|
||||||
* @brief Write all the vector in a file
|
* @brief Write all the vector in a file
|
||||||
* @param[in] _value String data to write in the 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) {
|
bool fileWriteAll(const etk::String& _value) {
|
||||||
write(static_cast<const void*>(&(_value[0])), sizeof(char), _value.size()/sizeof(char));
|
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 ememory::SharedPtr<etk::io::Interface> create(const etk::Uri& _uri) = 0;
|
||||||
virtual bool exist(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 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;
|
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;
|
ememory::SharedPtr<etk::io::Interface> create(const etk::Uri& _uri) override;
|
||||||
bool exist(const etk::Uri& _uri) override;
|
bool exist(const etk::Uri& _uri) override;
|
||||||
etk::Vector<etk::Uri> list(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/uri/provider/ProviderFile.hpp>
|
||||||
#include <etk/Map.hpp>
|
#include <etk/Map.hpp>
|
||||||
#include <etk/io/File.hpp>
|
#include <etk/io/File.hpp>
|
||||||
|
#include <etk/debug.hpp>
|
||||||
|
|
||||||
static etk::Map<etk::String, ememory::SharedPtr<etk::uri::provider::Interface>>& getProviders() {
|
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;
|
static etk::Map<etk::String, ememory::SharedPtr<etk::uri::provider::Interface>> g_data;
|
||||||
return g_data;
|
return g_data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void etk::uri::provider::add(const etk::String& _scheme, ememory::SharedPtr<etk::uri::provider::Interface> _interface) {
|
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) {
|
if (scheme.empty() == true) {
|
||||||
scheme = "RAW";
|
scheme = "RAW";
|
||||||
}
|
}
|
||||||
getProviders().set(scheme, _interface);
|
etk::uri::provider::getProviders().set(scheme, _interface);
|
||||||
}
|
}
|
||||||
|
|
||||||
void etk::uri::provider::clear() {
|
void etk::uri::provider::clear() {
|
||||||
getProviders().clear();
|
etk::uri::provider::getProviders().clear();
|
||||||
etk::uri::provider::add("", ememory::makeShared<etk::uri::provider::ProviderFile>());
|
etk::uri::provider::add("", ememory::makeShared<etk::uri::provider::ProviderFile>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void etk::uri::provider::remove(const etk::String& _scheme) {
|
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) {
|
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) {
|
if (scheme.empty() == true) {
|
||||||
scheme = "RAW";
|
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) {
|
ememory::SharedPtr<etk::uri::provider::Interface> etk::uri::provider::getProvider(const etk::String& _scheme) {
|
||||||
etk::String scheme = _scheme;
|
etk::String scheme = _scheme;
|
||||||
if (scheme.empty() == true) {
|
if (scheme.empty() == true) {
|
||||||
scheme = "RAW";
|
scheme = "RAW";
|
||||||
}
|
}
|
||||||
if (getProviders().exist(scheme) == false) {
|
if (etk::uri::provider::getProviders().exist(scheme) == false) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return getProviders()[scheme];
|
return etk::uri::provider::getProviders()[scheme];
|
||||||
}
|
}
|
||||||
|
|
||||||
void etk::uri::provider::init() {
|
void etk::uri::provider::init() {
|
||||||
@ -64,5 +62,6 @@ void etk::uri::provider::init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void etk::uri::provider::unInit() {
|
void etk::uri::provider::unInit() {
|
||||||
getProviders().clear();
|
etk::uri::provider::getProviders().clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,12 +40,6 @@ namespace etk {
|
|||||||
* @brief Clear all providers
|
* @brief Clear all providers
|
||||||
*/
|
*/
|
||||||
void clear();
|
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
|
* @brief Get an URI provider
|
||||||
* @param[in] _scheme type of provider
|
* @param[in] _scheme type of provider
|
||||||
|
@ -55,6 +55,7 @@ def configure(target, my_module):
|
|||||||
'etk/archive/Archive.cpp',
|
'etk/archive/Archive.cpp',
|
||||||
'etk/archive/Zip.cpp',
|
'etk/archive/Zip.cpp',
|
||||||
'etk/uri/Uri.cpp',
|
'etk/uri/Uri.cpp',
|
||||||
|
'etk/uri/uri.cpp',
|
||||||
'etk/uri/Query.cpp',
|
'etk/uri/Query.cpp',
|
||||||
'etk/uri/provider/provider.cpp',
|
'etk/uri/provider/provider.cpp',
|
||||||
'etk/uri/provider/ProviderFile.cpp',
|
'etk/uri/provider/ProviderFile.cpp',
|
||||||
@ -92,6 +93,7 @@ def configure(target, my_module):
|
|||||||
'etk/TreeNode.hpp',
|
'etk/TreeNode.hpp',
|
||||||
'etk/FlatTree.hpp',
|
'etk/FlatTree.hpp',
|
||||||
'etk/uri/Uri.hpp',
|
'etk/uri/Uri.hpp',
|
||||||
|
'etk/uri/uri.hpp',
|
||||||
'etk/uri/Query.hpp',
|
'etk/uri/Query.hpp',
|
||||||
'etk/uri/provider/provider.hpp',
|
'etk/uri/provider/provider.hpp',
|
||||||
'etk/uri/provider/Interface.hpp',
|
'etk/uri/provider/Interface.hpp',
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include <etest/etest.hpp>
|
#include <etest/etest.hpp>
|
||||||
#include <test-debug/debug.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/provider.hpp>
|
||||||
#include <etk/uri/provider/ProviderFile.hpp>
|
#include <etk/uri/provider/ProviderFile.hpp>
|
||||||
#include <etk/uri/provider/ProviderFileZip.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_1"), true);
|
||||||
EXPECT_EQ(etk::uri::provider::exist("PLOUF_2"), true);
|
EXPECT_EQ(etk::uri::provider::exist("PLOUF_2"), true);
|
||||||
EXPECT_EQ(s_plouf, 0);
|
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);
|
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);
|
EXPECT_EQ(s_plouf, 9999);
|
||||||
etk::uri::provider::remove("PLOUF_1");
|
etk::uri::provider::remove("PLOUF_1");
|
||||||
EXPECT_EQ(etk::uri::provider::exist(""), true);
|
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()));
|
etk::uri::provider::add("DATA", ememory::makeShared<etk::uri::provider::ProviderFile>(etk::path::getDataPath()));
|
||||||
EXPECT_EQ(etk::uri::provider::exist("DATA"), true);
|
EXPECT_EQ(etk::uri::provider::exist("DATA"), true);
|
||||||
etk::Uri element("DATA:///data/dir_B/file_B_1.txt");
|
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);
|
EXPECT_EQ(ioElement->open(etk::io::OpenMode::Read), true);
|
||||||
etk::String data = ioElement->readAllString();
|
etk::String data = ioElement->readAllString();
|
||||||
EXPECT_EQ(ioElement->close(), true);
|
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"));
|
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);
|
EXPECT_EQ(etk::uri::provider::exist("DATA"), true);
|
||||||
etk::Uri element("DATA:///dir_B/file_B_1.txt");
|
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);
|
EXPECT_EQ(ioElement->open(etk::io::OpenMode::Read), true);
|
||||||
etk::String data = ioElement->readAllString();
|
etk::String data = ioElement->readAllString();
|
||||||
EXPECT_EQ(ioElement->close(), true);
|
EXPECT_EQ(ioElement->close(), true);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user