00001 #ifndef FIELDFACTORY_H_PROTECTOR 00002 #define FIELDFACTORY_H_PROTECTOR 00003 00004 #include "field.h" 00005 #include "compositefield.h" 00006 #include "xmlparser.h" 00007 #include <string> 00008 #include <vector> 00009 00010 namespace afl 00011 { 00016 class FieldFactory 00017 { 00018 public: 00022 FieldFactory( ) { } 00023 00027 virtual ~FieldFactory( ) { } 00028 00035 Field* load( const std::string& fullPath ) const; 00036 00044 Field* load( const std::string& path, const std::string& name ) const; 00045 00046 00053 Field* loadFieldURI( const std::string& uri, XMLParser* parser = NULL ) const; 00054 00063 void save( const std::string& path, const Field* field, 00064 const std::string& baseURI = "" ) const; 00065 00071 Field* getNewField( const std::string& name, size_t dim ) const; 00072 00080 Field* getNewField( const std::string& name, std::vector<const Field*> fields, std::vector<std::string> functions, size_t columns = 1 ); 00081 00082 private: 00083 00084 Field* parseField( const std::string& dir, XMLNode* field ) const; 00085 CompositeField* parseComposite( const std::string& dir, XMLNode* composite ) const; 00086 }; 00087 00088 } 00089 #endif 00090