src/PlainFilesystemCommand.h
branchv_0
changeset 58 4679f67a8324
parent 57 c40a241d6e0c
child 59 7471529c0d11
--- a/src/PlainFilesystemCommand.h	Tue Jan 21 00:19:56 2020 +0100
+++ b/src/PlainFilesystemCommand.h	Fri Jan 24 16:53:31 2020 +0100
@@ -28,9 +28,6 @@
 using namespace relpipe::writer;
 
 class PlainFilesystemCommand : public FilesystemCommand {
-private:
-	std::map<string_t, std::shared_ptr<AttributeFinder>> attributeFinders = createAttributeFinders();
-
 public:
 
 	void process(int inputFD, int outputFD, Configuration& configuration) {
@@ -40,18 +37,11 @@
 		std::ostream output(&outputBuffer);
 
 		std::shared_ptr<RelationalWriter> writer(Factory::create(output));
-
-		string_t relationName = configuration.relation.empty() ? L"filesystem" : configuration.relation;
+		std::map<string_t, std::shared_ptr < AttributeFinder>> attributeFinders = createAttributeFinders();
 
-		std::vector<AttributeMetadata> attributesMetadata;
-		for (RequestedField field : configuration.fields) {
-			std::shared_ptr<AttributeFinder> finder = attributeFinders[field.group];
-			if (finder) for (AttributeMetadata m : finder->toMetadata(writer.get(), relationName, field)) attributesMetadata.push_back(m);
-			else throw RelpipeWriterException(L"Unsupported field group: " + field.group);
-		}
-
-		writer->startRelation(relationName, attributesMetadata, true);
-
+		string_t relationName = fetchRelationName(&configuration);
+		writeHeader(writer.get(), attributeFinders, relationName, &configuration.fields);
+		
 
 		for (std::stringstream originalName; readNext(input, originalName); reset(originalName)) {
 			fs::path file(originalName.str().empty() ? "." : originalName.str()); // interpret empty string as current directory (e.g. result of: find -printf '%P\0')