summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2013-08-22 21:07:51 (GMT)
committerRemko Tronçon <git@el-tramo.be>2013-08-23 08:02:12 (GMT)
commit00284e5f4445a7bbab482196901c5927ea7d5488 (patch)
treef2ca6e0c51632a8aa5a7a884f3b312bacc3a2fb0 /Swiften/Parser/PayloadParsers/FormParser.h
parent54da0a4c0cceae947afbde586a97d1cc60c50ed8 (diff)
downloadswift-00284e5f4445a7bbab482196901c5927ea7d5488.zip
swift-00284e5f4445a7bbab482196901c5927ea7d5488.tar.bz2
FormField element refactoring.
This should make FormField easier to use. Change-Id: Ia5eeedcdb673e2fe5e38fd23d5ab00970178bc44
Diffstat (limited to 'Swiften/Parser/PayloadParsers/FormParser.h')
-rw-r--r--Swiften/Parser/PayloadParsers/FormParser.h86
1 files changed, 4 insertions, 82 deletions
diff --git a/Swiften/Parser/PayloadParsers/FormParser.h b/Swiften/Parser/PayloadParsers/FormParser.h
index ec480a5..0b23a81 100644
--- a/Swiften/Parser/PayloadParsers/FormParser.h
+++ b/Swiften/Parser/PayloadParsers/FormParser.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2010 Remko Tronçon
+ * Copyright (c) 2010-2013 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
@@ -18,86 +18,6 @@ namespace Swift {
virtual void handleEndElement(const std::string& element, const std::string&);
virtual void handleCharacterData(const std::string& data);
- private:
- class FieldParseHelper {
- public:
- virtual ~FieldParseHelper() {}
- virtual void addValue(const std::string&) = 0;
- virtual boost::shared_ptr<FormField> getField() const {
- return field;
- }
- protected:
- boost::shared_ptr<FormField> field;
- };
- class BoolFieldParseHelper : public FieldParseHelper {
- virtual void addValue(const std::string& s) {
- boost::dynamic_pointer_cast< GenericFormField<bool> >(getField())->setValue(s == "1" || s == "true");
- getField()->addRawValue(s);
- }
- };
- class StringFieldParseHelper : public FieldParseHelper {
- virtual void addValue(const std::string& s) {
- boost::shared_ptr<GenericFormField<std::string> > field = boost::dynamic_pointer_cast< GenericFormField<std::string> >(getField());
- if (field->getValue().empty()) {
- field->setValue(s);
- }
- else {
- field->setValue(field->getValue() + "\n" + s);
- }
- getField()->addRawValue(s);
- }
- };
- class JIDFieldParseHelper : public FieldParseHelper {
- virtual void addValue(const std::string& s) {
- getField()->addRawValue(s);
- boost::dynamic_pointer_cast< GenericFormField<JID> >(getField())->setValue(JID(s));
- }
- };
- class StringListFieldParseHelper : public FieldParseHelper {
- virtual void addValue(const std::string& s) {
- // FIXME: Inefficient, but too much hassle to do efficiently
- boost::shared_ptr<GenericFormField< std::vector<std::string> > > field = boost::dynamic_pointer_cast< GenericFormField<std::vector<std::string > > >(getField());
- std::vector<std::string> l = field->getValue();
- l.push_back(s);
- field->setValue(l);
- getField()->addRawValue(s);
- }
- };
- class JIDListFieldParseHelper : public FieldParseHelper {
- virtual void addValue(const std::string& s) {
- // FIXME: Inefficient, but too much hassle to do efficiently
- boost::shared_ptr< GenericFormField< std::vector<JID> > > field = boost::dynamic_pointer_cast< GenericFormField<std::vector<JID > > >(getField());
- std::vector<JID> l = field->getValue();
- l.push_back(JID(s));
- field->setValue(l);
- getField()->addRawValue(s);
- }
- };
-
-#define SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(name, baseParser) \
- class name##FormFieldParseHelper : public baseParser##FieldParseHelper { \
- public: \
- typedef boost::shared_ptr<name##FormFieldParseHelper> ref; \
- static ref create() { \
- return ref(new name##FormFieldParseHelper()); \
- } \
- private: \
- name##FormFieldParseHelper() : baseParser##FieldParseHelper() { \
- field = name##FormField::create(); \
- } \
- }
-
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(Boolean, Bool);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(Fixed, String);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(Hidden, String);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(ListSingle, String);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(TextMulti, String);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(TextPrivate, String);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(TextSingle, String);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(JIDSingle, JID);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(JIDMulti, JIDList);
- SWIFTEN_DECLARE_FORM_FIELD_PARSE_HELPER(ListMulti, StringList);
-
enum Level {
TopLevel = 0,
PayloadLevel = 1,
@@ -106,9 +26,11 @@ namespace Swift {
int level_;
std::string currentText_;
std::string currentOptionLabel_;
- boost::shared_ptr<FieldParseHelper> currentFieldParseHelper_;
+ std::string currentOptionValue_;
bool parsingItem_;
bool parsingReported_;
+ bool parsingOption_;
+ FormField::ref currentField_;
std::vector<FormField::ref> currentFields_;
};
}