diff options
-rw-r--r-- | framework/domain/messageparser_new.cpp | 178 |
1 files changed, 89 insertions, 89 deletions
diff --git a/framework/domain/messageparser_new.cpp b/framework/domain/messageparser_new.cpp index 57f8172f..b930f33d 100644 --- a/framework/domain/messageparser_new.cpp +++ b/framework/domain/messageparser_new.cpp | |||
@@ -26,11 +26,46 @@ Q_DECLARE_METATYPE(Content *) | |||
26 | Q_DECLARE_METATYPE(Signature *) | 26 | Q_DECLARE_METATYPE(Signature *) |
27 | Q_DECLARE_METATYPE(Encryption *) | 27 | Q_DECLARE_METATYPE(Encryption *) |
28 | 28 | ||
29 | class Entry; | ||
30 | |||
31 | class NewModelPrivate | ||
32 | { | ||
33 | public: | ||
34 | NewModelPrivate(NewModel *q_ptr, const std::shared_ptr<Parser> &parser); | ||
35 | ~NewModelPrivate(); | ||
36 | |||
37 | void createTree(); | ||
38 | |||
39 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Signature> &sig); | ||
40 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Encryption> &enc); | ||
41 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Part> &part); | ||
42 | QSharedPointer<QVariant> getVar(Part *part); | ||
43 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Content> &content); | ||
44 | QSharedPointer<QVariant> getVar(Content *content); | ||
45 | |||
46 | int getPos(Signature *sig); | ||
47 | int getPos(Encryption *enc); | ||
48 | int getPos(Part *part); | ||
49 | int getPos(Content *content); | ||
50 | |||
51 | NewModel *q; | ||
52 | QVector<Part::Ptr> mParts; | ||
53 | std::unique_ptr<Entry> mRoot; | ||
54 | |||
55 | std::shared_ptr<Parser> mParser; | ||
56 | private: | ||
57 | QMap<std::shared_ptr<Signature>, QSharedPointer<QVariant>> mSignatureMap; | ||
58 | QMap<std::shared_ptr<Encryption>, QSharedPointer<QVariant>> mEncryptionMap; | ||
59 | QMap<Part *, QSharedPointer<QVariant>> mPartMap; | ||
60 | QMap<Content *, QSharedPointer<QVariant>> mCMap; | ||
61 | }; | ||
62 | |||
29 | class Entry | 63 | class Entry |
30 | { | 64 | { |
31 | public: | 65 | public: |
32 | Entry() | 66 | Entry(NewModelPrivate *model) |
33 | : mParent(nullptr) | 67 | : mParent(nullptr) |
68 | , mNewModelPrivate(model) | ||
34 | { | 69 | { |
35 | } | 70 | } |
36 | 71 | ||
@@ -48,6 +83,52 @@ public: | |||
48 | entry->mParent = this; | 83 | entry->mParent = this; |
49 | } | 84 | } |
50 | 85 | ||
86 | Entry *addSignatures(QVector<Signature::Ptr> signatures) | ||
87 | { | ||
88 | auto ret = this; | ||
89 | foreach(const auto &sig, signatures) { | ||
90 | auto entry = new Entry(mNewModelPrivate); | ||
91 | entry->mData = mNewModelPrivate->getVar(sig); | ||
92 | ret->addChild(entry); | ||
93 | ret = entry; | ||
94 | } | ||
95 | return ret; | ||
96 | } | ||
97 | |||
98 | Entry *addEncryptions(QVector<Encryption::Ptr> encryptions) | ||
99 | { | ||
100 | auto ret = this; | ||
101 | foreach(const auto &enc, encryptions) { | ||
102 | auto entry = new Entry(mNewModelPrivate); | ||
103 | entry->mData = mNewModelPrivate->getVar(enc); | ||
104 | ret->addChild(entry); | ||
105 | ret = entry; | ||
106 | } | ||
107 | return ret; | ||
108 | } | ||
109 | |||
110 | Entry *addPart(Part *part) | ||
111 | { | ||
112 | auto entry = new Entry(mNewModelPrivate); | ||
113 | entry->mData = mNewModelPrivate->getVar(part); | ||
114 | addChild(entry); | ||
115 | foreach(const auto &content, part->content()) { | ||
116 | auto _entry = entry; | ||
117 | _entry = _entry->addEncryptions(content->encryptions().mid(part->encryptions().size())); | ||
118 | _entry = _entry->addSignatures(content->signatures().mid(part->signatures().size())); | ||
119 | auto c = new Entry(mNewModelPrivate); | ||
120 | c->mData = mNewModelPrivate->getVar(content); | ||
121 | _entry->addChild(c); | ||
122 | } | ||
123 | foreach(const auto &sp, part->subParts()) { | ||
124 | auto _entry = entry; | ||
125 | _entry = _entry->addEncryptions(sp->encryptions().mid(part->encryptions().size())); | ||
126 | _entry = _entry->addSignatures(sp->signatures().mid(part->signatures().size())); | ||
127 | _entry->addPart(sp.get()); | ||
128 | } | ||
129 | return entry; | ||
130 | } | ||
131 | |||
51 | int pos() | 132 | int pos() |
52 | { | 133 | { |
53 | if(!mParent) { | 134 | if(!mParent) { |
@@ -67,46 +148,13 @@ public: | |||
67 | 148 | ||
68 | Entry *mParent; | 149 | Entry *mParent; |
69 | QVector<Entry *> mChildren; | 150 | QVector<Entry *> mChildren; |
151 | NewModelPrivate *mNewModelPrivate; | ||
70 | }; | 152 | }; |
71 | 153 | ||
72 | class NewModelPrivate | ||
73 | { | ||
74 | public: | ||
75 | NewModelPrivate(NewModel *q_ptr, const std::shared_ptr<Parser> &parser); | ||
76 | ~NewModelPrivate(); | ||
77 | |||
78 | void createTree(); | ||
79 | Entry *addSignatures(Entry *parent, QVector<Signature::Ptr> signatures); | ||
80 | Entry *addEncryptions(Entry *parent, QVector<Encryption::Ptr> encryptions); | ||
81 | Entry *addPart(Entry *parent, Part *part); | ||
82 | |||
83 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Signature> &sig); | ||
84 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Encryption> &enc); | ||
85 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Part> &part); | ||
86 | QSharedPointer<QVariant> getVar(Part *part); | ||
87 | QSharedPointer<QVariant> getVar(const std::shared_ptr<Content> &content); | ||
88 | QSharedPointer<QVariant> getVar(Content *content); | ||
89 | |||
90 | int getPos(Signature *sig); | ||
91 | int getPos(Encryption *enc); | ||
92 | int getPos(Part *part); | ||
93 | int getPos(Content *content); | ||
94 | |||
95 | NewModel *q; | ||
96 | QVector<Part::Ptr> mParts; | ||
97 | std::unique_ptr<Entry> mRoot; | ||
98 | |||
99 | std::shared_ptr<Parser> mParser; | ||
100 | private: | ||
101 | QMap<std::shared_ptr<Signature>, QSharedPointer<QVariant>> mSignatureMap; | ||
102 | QMap<std::shared_ptr<Encryption>, QSharedPointer<QVariant>> mEncryptionMap; | ||
103 | QMap<Part *, QSharedPointer<QVariant>> mPartMap; | ||
104 | QMap<Content *, QSharedPointer<QVariant>> mCMap; | ||
105 | }; | ||
106 | 154 | ||
107 | NewModelPrivate::NewModelPrivate(NewModel *q_ptr, const std::shared_ptr<Parser> &parser) | 155 | NewModelPrivate::NewModelPrivate(NewModel *q_ptr, const std::shared_ptr<Parser> &parser) |
108 | : q(q_ptr) | 156 | : q(q_ptr) |
109 | , mRoot(std::unique_ptr<Entry>(new Entry)) | 157 | , mRoot(std::unique_ptr<Entry>(new Entry(this))) |
110 | , mParser(parser) | 158 | , mParser(parser) |
111 | { | 159 | { |
112 | mParts = mParser->collectContentParts(); | 160 | mParts = mParser->collectContentParts(); |
@@ -117,54 +165,6 @@ NewModelPrivate::~NewModelPrivate() | |||
117 | { | 165 | { |
118 | } | 166 | } |
119 | 167 | ||
120 | Entry *NewModelPrivate::addSignatures(Entry *parent, QVector<Signature::Ptr> signatures) | ||
121 | { | ||
122 | auto ret = parent; | ||
123 | foreach(const auto &sig, signatures) { | ||
124 | auto entry = new Entry(); | ||
125 | entry->mData = getVar(sig); | ||
126 | ret = entry; | ||
127 | parent->addChild(entry); | ||
128 | } | ||
129 | return ret; | ||
130 | } | ||
131 | |||
132 | Entry * NewModelPrivate::addEncryptions(Entry *parent, QVector<Encryption::Ptr> encryptions) | ||
133 | { | ||
134 | auto ret = parent; | ||
135 | foreach(const auto &enc, encryptions) { | ||
136 | auto entry = new Entry(); | ||
137 | entry->mData = getVar(enc); | ||
138 | parent->addChild(entry); | ||
139 | ret = entry; | ||
140 | } | ||
141 | return ret; | ||
142 | } | ||
143 | |||
144 | Entry * NewModelPrivate::addPart(Entry *parent, Part *part) | ||
145 | { | ||
146 | auto entry = new Entry(); | ||
147 | entry->mData = getVar(part); | ||
148 | parent->addChild(entry); | ||
149 | |||
150 | foreach(const auto &content, part->content()) { | ||
151 | auto _entry = entry; | ||
152 | _entry = addEncryptions(_entry, content->encryptions().mid(part->encryptions().size())); | ||
153 | _entry = addSignatures(_entry, content->signatures().mid(part->signatures().size())); | ||
154 | auto c = new Entry(); | ||
155 | c->mData = getVar(content); | ||
156 | _entry->addChild(c); | ||
157 | } | ||
158 | |||
159 | foreach(const auto &sp, part->subParts()) { | ||
160 | auto _entry = entry; | ||
161 | _entry = addEncryptions(_entry, sp->encryptions().mid(part->encryptions().size())); | ||
162 | _entry = addSignatures(_entry, sp->signatures().mid(part->signatures().size())); | ||
163 | addPart(_entry, sp.get()); | ||
164 | } | ||
165 | return entry; | ||
166 | } | ||
167 | |||
168 | void NewModelPrivate::createTree() | 168 | void NewModelPrivate::createTree() |
169 | { | 169 | { |
170 | auto root = mRoot.get(); | 170 | auto root = mRoot.get(); |
@@ -176,16 +176,16 @@ void NewModelPrivate::createTree() | |||
176 | auto _parent = parent; | 176 | auto _parent = parent; |
177 | if (pPart != part->parent()) { | 177 | if (pPart != part->parent()) { |
178 | auto _parent = root; | 178 | auto _parent = root; |
179 | _parent = addEncryptions(_parent, part->parent()->encryptions()); | 179 | _parent = _parent->addEncryptions(part->parent()->encryptions()); |
180 | _parent = addSignatures(_parent, part->parent()->signatures()); | 180 | _parent = _parent->addSignatures(part->parent()->signatures()); |
181 | signatures = part->parent()->signatures(); | 181 | signatures = part->parent()->signatures(); |
182 | encryptions = part->parent()->encryptions(); | 182 | encryptions = part->parent()->encryptions(); |
183 | parent = _parent; | 183 | parent = _parent; |
184 | pPart = part->parent(); | 184 | pPart = part->parent(); |
185 | } | 185 | } |
186 | _parent = addEncryptions(_parent, part->encryptions().mid(encryptions.size())); | 186 | _parent = _parent->addEncryptions(part->encryptions().mid(encryptions.size())); |
187 | _parent = addSignatures(_parent, part->signatures().mid(signatures.size())); | 187 | _parent = _parent->addSignatures(part->signatures().mid(signatures.size())); |
188 | addPart(_parent, part.get()); | 188 | _parent->addPart(part.get()); |
189 | } | 189 | } |
190 | } | 190 | } |
191 | 191 | ||