src/FilesystemCommand.h
branchv_0
changeset 29 6f15f18d2abf
parent 28 9172bd97ae99
child 31 c64e1588f428
equal deleted inserted replaced
28:9172bd97ae99 29:6f15f18d2abf
    35 
    35 
    36 #include "Configuration.h"
    36 #include "Configuration.h"
    37 #include "AttributeFinder.h"
    37 #include "AttributeFinder.h"
    38 #include "FileAttributeFinder.h"
    38 #include "FileAttributeFinder.h"
    39 #include "XattrAttributeFinder.h"
    39 #include "XattrAttributeFinder.h"
    40 #include "HashAttributeFinder.h"
    40 #include "ExecAttributeFinder.h"
    41 #include "ScriptAttributeFinder.h"
       
    42 
    41 
    43 namespace relpipe {
    42 namespace relpipe {
    44 namespace in {
    43 namespace in {
    45 namespace filesystem {
    44 namespace filesystem {
    46 
    45 
    50 class FilesystemCommand {
    49 class FilesystemCommand {
    51 private:
    50 private:
    52 	std::wstring_convert<codecvt_utf8<wchar_t>> convertor; // TODO: support also other encodings.
    51 	std::wstring_convert<codecvt_utf8<wchar_t>> convertor; // TODO: support also other encodings.
    53 
    52 
    54 	FileAttributeFinder fileAttributeFinder;
    53 	FileAttributeFinder fileAttributeFinder;
    55 	HashAttributeFinder hashAttributeFinder;
    54 	ExecAttributeFinder execAttributeFinder;
    56 	ScriptAttributeFinder scriptAttributeFinder;
       
    57 	XattrAttributeFinder xattrAttributeFinder;
    55 	XattrAttributeFinder xattrAttributeFinder;
    58 
    56 
    59 	std::map<string_t, AttributeFinder*> attributeFinders{
    57 	std::map<string_t, AttributeFinder*> attributeFinders{
    60 		{RequestedField::GROUP_FILE, &fileAttributeFinder},
    58 		{RequestedField::GROUP_FILE, &fileAttributeFinder},
    61 		{RequestedField::GROUP_HASH, &hashAttributeFinder},
    59 		{RequestedField::GROUP_EXEC, &execAttributeFinder},
    62 		{RequestedField::GROUP_SCRIPT, &scriptAttributeFinder},
       
    63 		{RequestedField::GROUP_XATTR, &xattrAttributeFinder}};
    60 		{RequestedField::GROUP_XATTR, &xattrAttributeFinder}};
    64 
    61 
    65 	void reset(std::stringstream& stream) {
    62 	void reset(std::stringstream& stream) {
    66 		stream.str("");
    63 		stream.str("");
    67 		stream.clear();
    64 		stream.clear();
    81 		std::shared_ptr<RelationalWriter> writer(Factory::create(output));
    78 		std::shared_ptr<RelationalWriter> writer(Factory::create(output));
    82 
    79 
    83 		std::vector<AttributeMetadata> attributesMetadata;
    80 		std::vector<AttributeMetadata> attributesMetadata;
    84 		for (RequestedField field : configuration.fields) {
    81 		for (RequestedField field : configuration.fields) {
    85 			AttributeFinder* finder = attributeFinders[field.group];
    82 			AttributeFinder* finder = attributeFinders[field.group];
    86 			if (finder) for (AttributeMetadata m : finder->toMetadata(field)) attributesMetadata.push_back(m);
    83 			if (finder) for (AttributeMetadata m : finder->toMetadata(writer.get(), field)) attributesMetadata.push_back(m);
    87 			else throw RelpipeWriterException(L"Unsupported field group: " + field.group);
    84 			else throw RelpipeWriterException(L"Unsupported field group: " + field.group);
    88 		}
    85 		}
    89 
    86 
    90 		string_t relationName = configuration.relation.empty() ? L"filesystem" : configuration.relation;
    87 		string_t relationName = configuration.relation.empty() ? L"filesystem" : configuration.relation;
    91 		writer->startRelation(relationName, attributesMetadata, true);
    88 		writer->startRelation(relationName, attributesMetadata, true);