def requirement(self, req): """Write out one requirement.""" self.__fd.write("%% REQ '%s'\n" % req.id) self.__fd.write( "\%s{%s}\label{%s}\n\\textbf{Description:} %s\n" % ( self.level_names[self.__level + 1], req.get_value("Name").get_content(), latex2.__strescape(req.id), req.get_value("Description").get_content(), ) ) if req.is_val_av_and_not_null("Rationale"): self.__fd.write("\n\\textbf{Rationale:} %s\n" % req.get_value("Rationale").get_content()) if req.is_val_av_and_not_null("Note"): self.__fd.write("\n\\textbf{Note:} %s\n" % req.get_value("Note").get_content()) # Only output the depends on when there are fields for output. if len(req.incoming) > 0: # Create links to the corresponding labels. self.__fd.write("\n\\textbf{Depends on:} ") self.__fd.write( ", ".join( [ "\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.id), latex2.__strescape(d.id)) for d in sorted(req.incoming, key=lambda r: r.id) ] ) ) self.__fd.write("\n") if len(req.outgoing) > 0: # Create links to the corresponding dependency nodes. self.__fd.write("\n\\textbf{Solved by:} ") # No comma at the end. self.__fd.write( ", ".join( [ "\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.id), latex2.__strescape(d.id)) for d in sorted(req.outgoing, key=lambda r: r.id) ] ) ) self.__fd.write("\n") if self.__ce3set != None: cnstrt = self.__ce3set.get(req.get_id()) if cnstrt != None and cnstrt.len() > 0: self.__fd.write("\n\\textbf{Constraints:} ") cstrs = [] for key, val in sorted(cnstrt.get_values().iteritems()): refid = latex2.__strescape(key) refctr = "\\ref{CONSTRAINT%s} \\nameref{CONSTRAINT%s}" % (refid, refid) description = val.description() if description != None: refctr += " [" + description + "] " cstrs.append(refctr) self.__fd.write(", ".join(cstrs)) self.__fd.write("\n") testcases = req.get_value_default("Test Cases") if testcases != None: self.__fd.write("\n\\textbf{Test Cases:} ") tcout = [] for testcase in testcases: refid = latex2.__strescape(testcase) refctr = "\\ref{TESTCASE%s} \\nameref{TESTCASE%s}" % (refid, refid) tcout.append(refctr) self.__fd.write(", ".join(tcout)) self.__fd.write("\n") status = req.get_value("Status").get_output_string() # HACK: Remove annoying parenthesis status = status.split("(")[0] clstr = req.get_value("Class").get_output_string() rtype = Requirement.get_type_as_str(req.get_value("Type")) self.__fd.write("\n\\textbf{Status:} %s" % status)
def requirement(self, req): '''Write out one requirement.''' self.__fd.write("%% REQ '%s'\n" % req.id) self.__fd.write( "\%s{%s}\label{%s}\n\\textbf{Description:} %s\n" % (self.level_names[self.__level + 1], req.get_value("Name").get_content(), latex2.__strescape( req.id), req.get_value("Description").get_content())) if req.is_val_av_and_not_null("Rationale"): self.__fd.write("\n\\textbf{Rationale:} %s\n" % req.get_value("Rationale").get_content()) if req.is_val_av_and_not_null("Note"): self.__fd.write("\n\\textbf{Note:} %s\n" % req.get_value("Note").get_content()) # Only output the depends on when there are fields for output. if len(req.incoming) > 0: # Create links to the corresponding labels. self.__fd.write("\n\\textbf{Depends on:} ") self.__fd.write(", ".join([ "\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.id), latex2.__strescape(d.id)) for d in sorted(req.incoming, key=lambda r: r.id) ])) self.__fd.write("\n") if len(req.outgoing) > 0: # Create links to the corresponding dependency nodes. self.__fd.write("\n\\textbf{Solved by:} ") # No comma at the end. self.__fd.write(", ".join([ "\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.id), latex2.__strescape(d.id)) for d in sorted(req.outgoing, key=lambda r: r.id) ])) self.__fd.write("\n") if self.__ce3set != None: cnstrt = self.__ce3set.get(req.get_id()) if cnstrt != None and cnstrt.len() > 0: self.__fd.write("\n\\textbf{Constraints:} ") cstrs = [] for key, val in sorted(cnstrt.get_values().iteritems()): refid = latex2.__strescape(key) refctr = "\\ref{CONSTRAINT%s} \\nameref{CONSTRAINT%s}" \ % (refid, refid) description = val.description() if description != None: refctr += " [" + description + "] " cstrs.append(refctr) self.__fd.write(", ".join(cstrs)) self.__fd.write("\n") testcases = req.get_value_default("Test Cases") if testcases != None: self.__fd.write("\n\\textbf{Test Cases:} ") tcout = [] for testcase in testcases: refid = latex2.__strescape(testcase) refctr = "\\ref{TESTCASE%s} \\nameref{TESTCASE%s}" \ % (refid, refid) tcout.append(refctr) self.__fd.write(", ".join(tcout)) self.__fd.write("\n") status = req.get_value("Status").get_output_string() # HACK: Remove annoying parenthesis status = status.split('(')[0] clstr = req.get_value("Class").get_output_string() rtype = Requirement.get_type_as_str(req.get_value("Type")) self.__fd.write("\n\\textbf{Status:} %s" % status)
def requirement(self, req): '''Write out one requirement.''' self.__fd.write("%% REQ '%s'\n" % req.get_name()) self.__fd.write("\%s{%s}\label{%s}\n\\textbf{Description:} %s\n" % (self.level_names[self.__level + 1], req.get_requirement().get_value("Name").get_content(), latex2.__strescape(req.get_name()), req.get_requirement().get_value("Description").get_content())) if req.get_requirement().is_val_av_and_not_null("Rationale"): self.__fd.write("\n\\textbf{Rationale:} %s\n" % req.get_requirement().get_value("Rationale").get_content()) if req.get_requirement().is_val_av_and_not_null("Note"): self.__fd.write("\n\\textbf{Note:} %s\n" % req.get_requirement().get_value("Note").get_content()) # Only output the depends on when there are fields for output. if req.get_outgoing_cnt() > 0: # Create links to the corresponding labels. self.__fd.write("\n\\textbf{Depends on:} ") self.__fd.write(", ".join(["\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.get_name()), latex2.__strescape(d.get_name())) for d in sorted(req.get_iter_outgoing(), key=lambda r: r.get_name())])) self.__fd.write("\n") if req.get_incoming_cnt() > 0: # Create links to the corresponding dependency nodes. self.__fd.write("\n\\textbf{Solved by:} ") # No comma at the end. self.__fd.write(", ".join(["\\ref{%s} \\nameref{%s}" % (latex2.__strescape(d.get_name()), latex2.__strescape(d.get_name())) for d in sorted(req.get_iter_incoming(), key=lambda r: r.get_name())])) self.__fd.write("\n") tracer.debug("Output constraints") if self.__ce3set != None: cnstrt = self.__ce3set.get(req.get_name()) tracer.debug("Constraints are available [%s]" % cnstrt) tracer.debug("Check constraint header output [%s]" % cnstrt.len()) if cnstrt != None and cnstrt.len() > 0: tracer.debug("Output constraint header") self.__fd.write("\n\\textbf{Constraints:} ") cstrs = [] for key, val in sorted(cnstrt.get_values().iteritems()): refid = latex2.__strescape(key) tracer.debug("Output constraint [%s]" % refid) refctr = "\\ref{CONSTRAINT%s} \\nameref{CONSTRAINT%s}" \ % (refid, refid) description = val.description() if description != None: refctr += " [" + description + "] " cstrs.append(refctr) # Also put a reference (for later use) in the # constraints to requirements ref. self.__add_constraint_req_ref(refid, req.get_requirement().get_id()) self.__fd.write(", ".join(cstrs)) self.__fd.write("\n") testcases = req.get_requirement().get_value_default("Test Cases") if testcases != None: self.__fd.write("\n\\textbf{Test Cases:} ") tcout = [] for testcase in testcases: refid = latex2.__strescape(testcase) refctr = "\\ref{TESTCASE%s} \\nameref{TESTCASE%s}" \ % (refid, refid) tcout.append(refctr) self.__fd.write(", ".join(tcout)) self.__fd.write("\n") status = req.get_requirement().get_value("Status").get_output_string() clstr = req.get_requirement().get_value("Class").get_output_string() rtype = Requirement.get_type_as_str(req.get_requirement().get_value("Type")) self.__fd.write("\n\\par\n{\small \\begin{center}" "\\begin{tabular}{rlrlrl}\n") # Put mostly three things in a line. i = 0 for rattr in self._config.get_value("req_attributes"): if rattr == "Id": self.__fd.write("\\textbf{Id:} & %s " % req.get_name()) elif rattr == "Priority": self.__fd.write("\\textbf{Priority:} & %4.2f " % (req.get_requirement().get_value("Priority") * 10)) elif rattr == "Owner": self.__fd.write("\\textbf{Owner:} & %s" % req.get_requirement().get_value("Owner")) elif rattr == "Invented on": self.__fd.write("\\textbf{Invented on:} & %s " % req.get_requirement().get_value("Invented on").strftime("%Y-%m-%d")) elif rattr == "Invented by": self.__fd.write("\\textbf{Invented by:} & %s " % req.get_requirement().get_value("Invented by")) elif rattr == "Status": self.__fd.write("\\textbf{Status:} & %s " % status) elif rattr == "Class": self.__fd.write("\\textbf{Class:} & %s " % clstr) elif rattr == "Type": self.__fd.write("\\textbf{Type:} & %s " % rtype) else: # This only happens when a wrong configuration is supllied. raise RMTException(85, "Wrong latex2 output configuration " "supplied: unknown tag [%s]" % rattr) i += 1 if i == 3: i = 0 self.__fd.write("\\\ \n") else: self.__fd.write(" & ") while i < 2: self.__fd.write("& & ") i += 1 self.__fd.write("\end{tabular}\end{center} }\n\n")