|
a/OSSEval/methodology/models.py |
|
b/OSSEval/methodology/models.py |
1 |
from django.db import models
|
1 |
from django.db import models
|
2 |
from entity.models import Entity
|
2 |
from entity.models import Entity
|
3 |
from OSSEval.utils import xmlMinidom
|
3 |
from OSSEval.utils import xmlMinidom
|
4 |
|
4 |
from xml.dom.minidom import Node
|
|
|
5 |
|
5 |
class Methodology(models.Model):
|
6 |
class Methodology(models.Model):
|
6 |
name = models.CharField(max_length=200)
|
7 |
name = models.CharField(max_length=200)
|
7 |
description = models.CharField(max_length=2000,null=True,blank=True)
|
8 |
description = models.CharField(max_length=2000,null=True,blank=True)
|
8 |
documentation = models.TextField(null=True,blank=True)
|
9 |
documentation = models.TextField(null=True,blank=True)
|
9 |
active = models.BooleanField(default=True)
|
10 |
active = models.BooleanField(default=True)
|
|
... |
|
... |
13 |
def __unicode__(self):
|
14 |
def __unicode__(self):
|
14 |
return self.name
|
15 |
return self.name
|
15 |
|
16 |
|
16 |
def from_xml(self, xmldoc, insert = True):
|
17 |
def from_xml(self, xmldoc, insert = True):
|
17 |
if not insert:
|
18 |
if not insert:
|
18 |
self.id = xmldoc.getElementsByTagName('Id')[0].firstChild.data
|
19 |
self.id = xmlMinidom.getNaturalAttribute(xmldoc, 'Id')
|
19 |
self.name = xmlMinidom.getString(xmldoc, 'Name')
|
20 |
self.name = xmlMinidom.getStringAttribute(xmldoc, 'Name')
|
20 |
print str(self.id) + " " + self.name
|
|
|
21 |
self.description = xmlMinidom.getString(xmldoc, 'Description')
|
21 |
self.description = xmlMinidom.getString(xmldoc, 'Description')
|
22 |
self.documentation = xmlMinidom.getString(xmldoc, 'Documentation')
|
22 |
self.documentation = xmlMinidom.getString(xmldoc, 'Documentation')
|
23 |
self.active = xmlMinidom.getString(xmldoc, 'Active')
|
23 |
self.active = xmlMinidom.getStringAttribute(xmldoc, 'Active')
|
24 |
e = Entity()
|
24 |
e = Entity()
|
25 |
xml_entity = xmldoc.getElementsByTagName('Entity')[0]
|
25 |
xml_entity = xmldoc.getElementsByTagName('Entity')[0]
|
26 |
e.from_xml(xml_entity, insert)
|
26 |
e.from_xml(xml_entity, insert)
|
27 |
self.entity = e
|
27 |
self.entity = e
|
28 |
# I save so I get the ID (if insert == True)
|
28 |
# I save so I get the ID (if insert == True)
|
29 |
self.save()
|
29 |
self.save()
|
30 |
|
30 |
|
31 |
def to_xml(self):
|
31 |
def to_xml(self):
|
32 |
str_xml = "<Id>" + str(self.id) + "</Id>"
|
|
|
33 |
str_xml += "<Name>" + self.name + "</Name>"
|
|
|
34 |
str_xml += "<Description>" + self.description + "</Description>"
|
32 |
str_xml = "<Description><![CDATA[" + self.description + "]]></Description>"
|
35 |
str_xml += "<Documentation>" + self.documentation + "</Documentation>"
|
33 |
str_xml += "<Documentation><![CDATA[" + self.documentation + "]]></Documentation>"
|
36 |
str_xml += "<Active>" + str(self.active) + "</Active>"
|
|
|
37 |
str_xml += self.entity.to_xml()
|
34 |
str_xml += self.entity.to_xml()
|
38 |
return "<Methodology>" + str_xml + "</Methodology>"
|
35 |
return '<Methodology Id="' + str(self.id) + '" Name="' + self.name + '" Active="' + str(self.active) + '">' + str_xml + "</Methodology>"
|
39 |
|
|
|
40 |
|
36 |
|
41 |
class MethodologyVersion(models.Model):
|
37 |
class MethodologyVersion(models.Model):
|
42 |
number = models.IntegerField()
|
38 |
number = models.IntegerField()
|
43 |
created = models.DateField()
|
39 |
created = models.DateField()
|
44 |
current = models.BooleanField(default=False)
|
40 |
current = models.BooleanField(default=False)
|
|
... |
|
... |
47 |
def __unicode__(self):
|
43 |
def __unicode__(self):
|
48 |
return self.methodology.name + " - " + str(self.number) + (" (Active version)" if self.current else "")
|
44 |
return self.methodology.name + " - " + str(self.number) + (" (Active version)" if self.current else "")
|
49 |
|
45 |
|
50 |
def from_xml(self, xmldoc, insert = True):
|
46 |
def from_xml(self, xmldoc, insert = True):
|
51 |
if not insert:
|
47 |
if not insert:
|
52 |
self.id = xmldoc.getElementsByTagName('Id')[0].firstChild.data
|
48 |
self.id = xmlMinidom.getNaturalAttribute(xmldoc, 'Id')
|
53 |
self.number = xmldoc.getElementsByTagName('Number')[0].firstChild.data
|
49 |
self.number = xmldoc.attributes["Number"].firstChild.data
|
54 |
self.created = xmlMinidom.getString(xmldoc, 'Created')
|
50 |
self.created = xmlMinidom.getStringAttribute(xmldoc, 'Created')
|
55 |
self.current = xmlMinidom.getString(xmldoc, 'Current')
|
51 |
self.current = xmlMinidom.getStringAttribute(xmldoc, 'Current')
|
56 |
m = Methodology()
|
52 |
m = Methodology()
|
57 |
xml_methodology = xmldoc.getElementsByTagName('Methodology')[0]
|
53 |
xml_methodology = xmldoc.getElementsByTagName('Methodology')[0]
|
58 |
m.from_xml(xml_methodology, insert)
|
54 |
m.from_xml(xml_methodology, insert)
|
59 |
self.methodology = m
|
55 |
self.methodology = m
|
60 |
# I save so I get the ID (if insert == True)
|
56 |
# I save so I get the ID (if insert == True)
|
61 |
self.save()
|
57 |
self.save()
|
62 |
# Pages
|
58 |
# Pages
|
63 |
for xml_child in xmldoc.childNodes:
|
59 |
for xml_child in xmldoc.childNodes:
|
64 |
if xml_child.tagName == 'Pages':
|
60 |
# Some nodes are text nodes (e.g. u'\n ') I need to look just at ELEMENT_NODE
|
|
|
61 |
if xml_child.nodeType == Node.ELEMENT_NODE and xml_child.tagName == 'Pages':
|
65 |
xml_pages = xml_child
|
62 |
xml_pages = xml_child
|
66 |
break
|
63 |
break
|
67 |
for xml_page in xml_pages.childNodes:
|
64 |
for xml_page in xml_pages.childNodes:
|
68 |
if xml_page.tagName == 'Page':
|
65 |
if xml_page.nodeType == Node.ELEMENT_NODE and xml_page.tagName == 'Page':
|
69 |
p = Page()
|
66 |
p = Page()
|
70 |
p.from_xml(xml_page, self, None, insert)
|
67 |
p.from_xml(xml_page, self, None, insert)
|
71 |
#WeightScenarios
|
68 |
#WeightScenarios
|
72 |
xml_weight_scenarios = xmldoc.getElementsByTagName('WeightScenarios')
|
69 |
xml_weight_scenarios = xmldoc.getElementsByTagName('WeightScenarios')
|
73 |
for xml_weight_scenario in xml_weight_scenarios:
|
70 |
for xml_weight_scenario in xml_weight_scenarios:
|
74 |
ws = WeightScenario()
|
71 |
ws = WeightScenario()
|
75 |
ws.from_xml(xml_weight_scenario, self, insert)
|
72 |
ws.from_xml(xml_weight_scenario, self, insert)
|
76 |
|
73 |
|
77 |
def to_xml(self):
|
74 |
def to_xml(self):
|
78 |
str_xml = "<Id>" + str(self.id) + "</Id>"
|
|
|
79 |
str_xml += "<Number>" + str(self.number) + "</Number>"
|
|
|
80 |
str_xml += "<Created>" + str(self.created) + "</Created>"
|
|
|
81 |
str_xml += "<Current>" + str(self.current) + "</Current>"
|
|
|
82 |
str_xml += self.methodology.to_xml()
|
75 |
str_xml = self.methodology.to_xml()
|
83 |
str_xml += "<Pages>"
|
76 |
str_xml += "<Pages>"
|
84 |
for page in self.page_set.all():
|
77 |
for page in self.page_set.all():
|
85 |
str_xml += page.to_xml()
|
78 |
str_xml += page.to_xml()
|
86 |
str_xml += "</Pages>"
|
79 |
str_xml += "</Pages>"
|
87 |
str_xml += "<WeightScenarios>"
|
80 |
str_xml += "<WeightScenarios>"
|
88 |
for weight_scenario in self.weightscenario_set.all():
|
81 |
for weight_scenario in self.weightscenario_set.all():
|
89 |
str_xml += weight_scenario.to_xml()
|
82 |
str_xml += weight_scenario.to_xml()
|
90 |
str_xml += "</WeightScenarios>"
|
83 |
str_xml += "</WeightScenarios>"
|
91 |
|
84 |
|
92 |
return "<MethodologyVersion>" + str_xml + "</MethodologyVersion>"
|
85 |
return '<MethodologyVersion Id="' + str(self.id) + '" Number="' + str(self.number) + '" Created="' + str(self.created) + '" Current="' + str(self.current) + '">' + str_xml + "</MethodologyVersion>"
|
93 |
|
86 |
|
94 |
class Page(models.Model):
|
87 |
class Page(models.Model):
|
95 |
name = models.CharField(max_length=200)
|
88 |
name = models.CharField(max_length=200)
|
96 |
order = models.IntegerField(null=False,blank=False)
|
89 |
order = models.IntegerField(null=False,blank=False)
|
97 |
parent = models.ForeignKey('self',null=True,blank=True)
|
90 |
parent = models.ForeignKey('self',null=True,blank=True)
|
|
... |
|
... |
100 |
def __unicode__(self):
|
93 |
def __unicode__(self):
|
101 |
return self.name
|
94 |
return self.name
|
102 |
|
95 |
|
103 |
def from_xml(self, xmldoc, methodology_version, parent_page, insert = True):
|
96 |
def from_xml(self, xmldoc, methodology_version, parent_page, insert = True):
|
104 |
if not insert:
|
97 |
if not insert:
|
105 |
self.id = xmldoc.getElementsByTagName('Id')[0].firstChild.data
|
98 |
self.id = xmlMinidom.getNaturalAttribute(xmldoc, 'Id')
|
106 |
self.name = xmlMinidom.getString(xmldoc, 'Name')
|
99 |
self.name = xmlMinidom.getStringAttribute(xmldoc, 'Name')
|
107 |
self.order = xmldoc.getElementsByTagName('Order')[0].firstChild.data
|
100 |
self.order = xmldoc.attributes["Order"].firstChild.data
|
108 |
if methodology_version is not None:
|
101 |
if methodology_version is not None:
|
109 |
self.methodology_version = methodology_version
|
102 |
self.methodology_version = methodology_version
|
110 |
if parent_page is not None:
|
103 |
if parent_page is not None:
|
|
|
104 |
# print self.name + " is a child of " + parent_page.name
|
111 |
self.parent = parent_page
|
105 |
self.parent = parent_page
|
|
|
106 |
self.save()
|
112 |
# Pages
|
107 |
# Pages
|
113 |
for xml_child in xmldoc.childNodes:
|
108 |
for xml_child in xmldoc.childNodes:
|
114 |
if xml_child.tagName == 'Pages':
|
109 |
# Some nodes are text nodes (e.g. u'\n ') I need to look just at ELEMENT_NODE
|
|
|
110 |
if xml_child.nodeType == Node.ELEMENT_NODE and xml_child.tagName == 'Pages':
|
115 |
xml_pages = xml_child
|
111 |
xml_pages = xml_child
|
116 |
break
|
112 |
break
|
117 |
for xml_page in xml_pages.childNodes:
|
113 |
for xml_page in xml_pages.childNodes:
|
118 |
if xml_page.tagName == 'Page':
|
114 |
if xml_page.nodeType == Node.ELEMENT_NODE and xml_page.tagName == 'Page':
|
119 |
p = Page()
|
115 |
p = Page()
|
120 |
p.from_xml(xml_page, None, self, insert)
|
116 |
p.from_xml(xml_page, None, self, insert)
|
121 |
# Questions
|
117 |
# Questions
|
122 |
xml_questions = xmldoc.getElementsByTagName('Questions')
|
118 |
for xml_child in xmldoc.childNodes:
|
|
|
119 |
# Some nodes are text nodes (e.g. u'\n ') I need to look just at ELEMENT_NODE
|
|
|
120 |
if xml_child.nodeType == Node.ELEMENT_NODE and xml_child.tagName == 'Questions':
|
|
|
121 |
xml_questions = xml_child
|
|
|
122 |
break
|
123 |
for xml_question in xml_questions:
|
123 |
for xml_question in xml_questions.childNodes:
|
|
|
124 |
if xml_question.nodeType == Node.ELEMENT_NODE and xml_question.tagName == 'Question':
|
124 |
q = Question()
|
125 |
q = Question()
|
125 |
q.from_xml(xml_question, self, insert)
|
126 |
q.from_xml(xml_question, self, insert)
|
126 |
|
127 |
|
127 |
def to_xml(self):
|
128 |
def to_xml(self):
|
128 |
str_xml = "<Id>" + str(self.id) + "</Id>"
|
|
|
129 |
str_xml += "<Name>" + self.name + "</Name>"
|
|
|
130 |
str_xml += "<Order>" + str(self.order) + "</Order>"
|
|
|
131 |
str_xml += "<Pages>"
|
129 |
str_xml = "<Pages>"
|
132 |
for page in self.page_set.all():
|
130 |
for page in self.page_set.all():
|
133 |
str_xml += page.to_xml()
|
131 |
str_xml += page.to_xml()
|
134 |
str_xml += "</Pages>"
|
132 |
str_xml += "</Pages>"
|
135 |
str_xml += "<Questions>"
|
133 |
str_xml += "<Questions>"
|
136 |
for question in self.question_set.all():
|
134 |
for question in self.question_set.all():
|
137 |
str_xml += question.to_xml()
|
135 |
str_xml += question.to_xml()
|
138 |
str_xml += "</Questions>"
|
136 |
str_xml += "</Questions>"
|
139 |
return "<Page>" + str_xml + "</Page>"
|
137 |
return '<Page Id="' + str(self.id) + '" Name="' + self.name + '" Order="' + str(self.order) + '">' + str_xml + "</Page>"
|
140 |
|
138 |
|
|
|
139 |
class Meta:
|
|
|
140 |
ordering = ['order']
|
|
|
141 |
|
141 |
class QuestionType(models.Model):
|
142 |
class QuestionType(models.Model):
|
142 |
name = models.CharField(max_length=200)
|
143 |
name = models.CharField(max_length=200)
|
143 |
|
144 |
|
144 |
def from_xml(self, xmldoc, insert = True):
|
145 |
def from_xml(self, xmldoc, insert = True):
|
145 |
pass
|
146 |
if not insert:
|
|
|
147 |
self.id = xmlMinidom.getNaturalAttribute(xmldoc, 'Id')
|
|
|
148 |
self.name = xmlMinidom.getStringAttribute(xmldoc, 'Name')
|
146 |
|
149 |
|
147 |
def to_xml(self):
|
150 |
def to_xml(self):
|
148 |
return "<QuestionType><Id>" + str(self.id) + "</Id><Name>" + self.name + "</Name></QuestionType>"
|
151 |
return '<QuestionType Id="' + str(self.id) + '" Name="' + self.name + '"/>'
|
149 |
|
152 |
|
150 |
class Question(models.Model):
|
153 |
class Question(models.Model):
|
151 |
page = models.ForeignKey(Page)
|
154 |
page = models.ForeignKey(Page)
|
152 |
text = models.CharField(max_length=200)
|
155 |
text = models.CharField(max_length=200)
|
|
|
156 |
order = models.IntegerField()
|
153 |
eval_description = models.TextField(null=True,blank=True)
|
157 |
eval_description = models.TextField(null=True,blank=True)
|
154 |
eval_value = models.TextField(null=True,blank=True)
|
158 |
eval_value = models.TextField(null=True,blank=True)
|
155 |
question_type = models.ForeignKey(QuestionType)
|
159 |
question_type = models.ForeignKey(QuestionType)
|
156 |
|
160 |
|
157 |
def __unicode__(self):
|
161 |
def __unicode__(self):
|
158 |
return self.page.name + " - " + self.text
|
162 |
return self.page.name + " - " + self.text
|
159 |
|
163 |
|
160 |
def from_xml(self, xmldoc, page, insert = True):
|
164 |
def from_xml(self, xmldoc, page, insert = True):
|
|
|
165 |
if not insert:
|
|
|
166 |
self.id = xmlMinidom.getNaturalAttribute(xmldoc, 'Id')
|
|
|
167 |
self.text = xmlMinidom.getStringAttribute(xmldoc, 'Text')
|
|
|
168 |
self.order = xmlMinidom.getNaturalAttribute(xmldoc, 'Order')
|
|
|
169 |
#Do so that QuestionType default is 1
|
|
|
170 |
qt = QuestionType.objects.get(pk=1)
|
|
|
171 |
self.page = page
|
|
|
172 |
self.question_type = qt
|
|
|
173 |
self.save()
|
|
|
174 |
# Queries
|
|
|
175 |
xml_queries = xmldoc.getElementsByTagName('Query')
|
|
|
176 |
for xml_query in xml_queries:
|
|
|
177 |
q = Query()
|
|
|
178 |
q.from_xml(xml_query, self, insert)
|
|
|
179 |
# Choices
|
|
|
180 |
xml_choices = xmldoc.getElementsByTagName('Choice')
|
|
|
181 |
for xml_choice in xml_choices:
|
|
|
182 |
c = Choice()
|
|
|
183 |
c.from_xml(xml_choice, self, insert)
|
|
|
184 |
self.eval_description = xmlMinidom.getString(xmldoc, 'EvalDescription')
|
|
|
185 |
self.eval_value = xmlMinidom.getString(xmldoc, 'EvalValue')
|
161 |
pass
|
186 |
|
162 |
|
|
|
163 |
def to_xml(self):
|
187 |
def to_xml(self):
|
164 |
str_xml = "<Id>" + str(self.id) + "</Id>"
|
|
|
165 |
str_xml += "<Text>" + self.text + "</Text>"
|
|
|
166 |
str_xml += "<EvalDescription>" + ("" if self.eval_description is None else self.eval_description) + "</EvalDescription>"
|
188 |
str_xml = "<EvalDescription>" + ("" if self.eval_description is None else self.eval_description) + "</EvalDescription>"
|
167 |
str_xml += "<EvalValue>" + ("" if self.eval_value is None else self.eval_value) + "</EvalValue>"
|
189 |
str_xml += "<EvalValue>" + ("" if self.eval_value is None else self.eval_value) + "</EvalValue>"
|
|
|
190 |
# We do not use question_type at the moment as we have just one type
|
168 |
str_xml += self.question_type.to_xml()
|
191 |
# str_xml += self.question_type.to_xml()
|
169 |
str_xml += "<Queries>"
|
192 |
str_xml += "<Queries>"
|
170 |
for query in self.query_set.all():
|
193 |
for query in self.query_set.all():
|
171 |
str_xml += query.to_xml()
|
194 |
str_xml += query.to_xml()
|
|
|
195 |
str_xml += "</Queries>"
|
|
|
196 |
str_xml += "<Choices>"
|
172 |
for choice in self.choice_set.all():
|
197 |
for choice in self.choice_set.all():
|
173 |
str_xml += choice.to_xml()
|
198 |
str_xml += choice.to_xml()
|
174 |
str_xml += "</Queries>"
|
199 |
str_xml += "</Choices>"
|
175 |
return "<Question>" + str_xml + "</Question>"
|
200 |
return '<Question Id="' + str(self.id) + '" Text="' + self.text + '" Order="' + str(self.order) + '">' + str_xml + '</Question>'
|
|
|
201 |
|
|
|
202 |
class Meta:
|
|
|
203 |
ordering = ['order']
|
176 |
|
204 |
|
177 |
class Query(models.Model):
|
205 |
class Query(models.Model):
|
178 |
'''
|
206 |
'''
|
179 |
Queries against web search engines used to automate the answer to a question and/or as a hint to the reviewer
|
207 |
Queries against web search engines used to automate the answer to a question and/or as a hint to the reviewer
|
180 |
'''
|
208 |
'''
|
181 |
question = models.ForeignKey(Question)
|
209 |
question = models.ForeignKey(Question)
|
182 |
eval_text = models.CharField(max_length=2000)
|
210 |
eval_text = models.CharField(max_length=2000)
|
183 |
eval_site = models.CharField(max_length=2000)
|
211 |
eval_site = models.CharField(max_length=2000)
|
184 |
eval_site_exclude = models.CharField(max_length=2000)
|
212 |
eval_site_exclude = models.CharField(max_length=2000)
|
185 |
|
213 |
|
186 |
def from_xml(self, xmldoc, insert = True):
|
214 |
def from_xml(self, xmldoc, question, insert = True):
|
|
|
215 |
if not insert:
|
|
|
216 |
self.id = xmlMinidom.getNaturalAttribute(xmldoc, 'Id')
|
|
|
217 |
self.question = question
|
|
|
218 |
self.eval_text = xmlMinidom.getString(xmldoc, 'EvalText')
|
|
|
219 |
self.eval_site = xmlMinidom.getString(xmldoc, 'EvalSite')
|
|
|
220 |
self.eval_site_exclude = xmlMinidom.getString(xmldoc, 'EvalSiteExclude')
|
|
|
221 |
self.save()
|
187 |
pass
|
222 |
|
188 |
|
|
|
189 |
def to_xml(self):
|
223 |
def to_xml(self):
|
190 |
str_xml = "<Id>" + str(self.id) + "</Id>"
|
|
|
191 |
str_xml += "<EvalText>" + self.eval_text + "</EvalText>"
|
224 |
str_xml = "<EvalText>" + self.eval_text + "</EvalText>"
|
192 |
str_xml += "<EvalSite>" + self.eval_site + "</EvalSite>"
|
225 |
str_xml += "<EvalSite>" + self.eval_site + "</EvalSite>"
|
193 |
str_xml += "<EvalSiteExclude>" + self.eval_site_exclude + "</EvalSiteExclude>"
|
226 |
str_xml += "<EvalSiteExclude>" + self.eval_site_exclude + "</EvalSiteExclude>"
|
194 |
return "<Query>" + str_xml + "</Query>"
|
227 |
return '<Query Id="' + str(self.id) + '">' + str_xml + '</Query>'
|
195 |
|
228 |
|
196 |
class Choice(models.Model):
|
229 |
class Choice(models.Model):
|
197 |
'''
|
230 |
'''
|
198 |
'''
|
231 |
'''
|
199 |
question = models.ForeignKey(Question)
|
232 |
question = models.ForeignKey(Question)
|
200 |
text = models.CharField(max_length=200)
|
233 |
text = models.CharField(max_length=200)
|
201 |
order = models.IntegerField()
|
234 |
order = models.IntegerField()
|
202 |
todo = models.CharField(max_length=2000)
|
235 |
todo = models.CharField(max_length=2000)
|
203 |
|
236 |
|
204 |
def from_xml(self, xmldoc, insert = True):
|
237 |
def from_xml(self, xmldoc, question, insert = True):
|
205 |
pass
|
238 |
if not insert:
|
|
|
239 |
self.id = xmlMinidom.getNaturalAttribute(xmldoc, 'Id')
|
|
|
240 |
self.question = question
|
|
|
241 |
self.text = xmlMinidom.getStringAttribute(xmldoc, 'Text')
|
|
|
242 |
self.order = xmlMinidom.getNaturalAttribute(xmldoc, 'Order')
|
|
|
243 |
self.todo = xmlMinidom.getString(xmldoc, 'Todo')
|
|
|
244 |
self.save()
|
206 |
|
245 |
|
207 |
def to_xml(self):
|
246 |
def to_xml(self):
|
208 |
str_xml = "<Id>" + str(self.id) + "</Id>"
|
|
|
209 |
str_xml += "<Text>" + self.text + "</Text>"
|
|
|
210 |
str_xml += "<Order>" + str(self.order) + "</Order>"
|
|
|
211 |
str_xml += "<Todo>" + self.todo + "</Todo>"
|
247 |
str_xml = "<Todo>" + self.todo + "</Todo>"
|
212 |
return "<Choice>" + str_xml + "</Choice>"
|
248 |
return '<Choice Id="' + str(self.id) + '" Text="' + self.text + '" Order="' + str(self.order) + '">' + str_xml + '</Choice>'
|
|
|
249 |
|
|
|
250 |
class Meta:
|
|
|
251 |
ordering = ['order']
|
213 |
|
252 |
|
214 |
class WeightScenario(models.Model):
|
253 |
class WeightScenario(models.Model):
|
215 |
name = models.CharField(max_length=200)
|
254 |
name = models.CharField(max_length=200)
|
216 |
methodology_version = models.ForeignKey(MethodologyVersion)
|
255 |
methodology_version = models.ForeignKey(MethodologyVersion)
|
217 |
active = models.BooleanField(blank=False)
|
256 |
active = models.BooleanField(blank=False)
|
|
... |
|
... |
219 |
def from_xml(self, xmldoc, methodology_version, insert = True):
|
258 |
def from_xml(self, xmldoc, methodology_version, insert = True):
|
220 |
self.methodology_version = methodology_version
|
259 |
self.methodology_version = methodology_version
|
221 |
pass
|
260 |
pass
|
222 |
|
261 |
|
223 |
def to_xml(self):
|
262 |
def to_xml(self):
|
224 |
str_xml = "<Id>" + str(self.id) + "</Id>"
|
|
|
225 |
str_xml += "<Name>" + self.name + "</Name>"
|
|
|
226 |
str_xml += "<Active>" + str(self.active) + "</Active>"
|
|
|
227 |
str_xml += "<Weights>"
|
263 |
str_xml = "<Weights>"
|
228 |
for weight in self.weight_set.all():
|
264 |
for weight in self.weight_set.all():
|
229 |
str_xml += weight.to_xml()
|
265 |
str_xml += weight.to_xml()
|
230 |
str_xml += "</Weights>"
|
266 |
str_xml += "</Weights>"
|
231 |
return "<WeightScenario>" + str_xml + "</WeightScenario>"
|
267 |
return '<WeightScenario Id="' + str(self.id) + '" Name="' + self.name + '" Active="' + str(self.active) + '">' + str_xml + '</WeightScenario>'
|
232 |
|
268 |
|
233 |
class Weight(models.Model):
|
269 |
class Weight(models.Model):
|
234 |
question = models.ForeignKey(Question)
|
270 |
question = models.ForeignKey(Question)
|
235 |
weight = models.FloatField()
|
271 |
weight = models.FloatField()
|
236 |
scenario = models.ForeignKey(WeightScenario)
|
272 |
scenario = models.ForeignKey(WeightScenario)
|
|
... |
|
... |
243 |
str_xml += "<Active>" + self.active + "</Active>"
|
279 |
str_xml += "<Active>" + self.active + "</Active>"
|
244 |
str_xml += "<Weights>"
|
280 |
str_xml += "<Weights>"
|
245 |
for weight in self.weight_set.all():
|
281 |
for weight in self.weight_set.all():
|
246 |
str_xml += weight.to_xml()
|
282 |
str_xml += weight.to_xml()
|
247 |
str_xml += "</Weights>"
|
283 |
str_xml += "</Weights>"
|
248 |
return "<WeightScenario>" + str_xml + "</WeightScenario>"
|
284 |
return '<Weight Id="' + str(self.id) + '" Active="' + str(self.active) + '">' + str_xml + '</Weight>'
|