| Line 265... |
Line 265... |
| 265 |
{
|
265 |
{
|
| 266 |
ea_req_matched[i_ea_req] = true;
|
266 |
ea_req_matched[i_ea_req] = true;
|
| 267 |
|
267 |
|
| 268 |
EA.Element ea_req = ((EA.Element)ea_reqs[i_ea_req]);
|
268 |
EA.Element ea_req = ((EA.Element)ea_reqs[i_ea_req]);
|
| 269 |
|
269 |
|
| - |
|
270 |
rq_obj.ea_element_ID = ea_req.ElementID;
|
| - |
|
271 |
|
| 270 |
// This ReqPro requirement already has a counterpart in EA, so we must simply
|
272 |
// This ReqPro requirement already has a counterpart in EA, so we must simply
|
| 271 |
// update the counterpart. But, to aid the designer, we need to try to tell them
|
273 |
// update the counterpart. But, to aid the designer, we need to try to tell them
|
| 272 |
// how the requirement has changed, which could ofcoarse change the meaning
|
274 |
// how the requirement has changed, which could ofcoarse change the meaning
|
| 273 |
// of the requirement and require design changes to be done.
|
275 |
// of the requirement and require design changes to be done.
|
| 274 |
|
276 |
|
| Line 342... |
Line 344... |
| 342 |
|
344 |
|
| 343 |
// create the new EA requirement in the import package
|
345 |
// create the new EA requirement in the import package
|
| 344 |
EA.Element ea_req = (EA.Element)importPackage.Elements.AddNew( rq_obj.tag + " " + rq_obj.name, "Requirement");
|
346 |
EA.Element ea_req = (EA.Element)importPackage.Elements.AddNew( rq_obj.tag + " " + rq_obj.name, "Requirement");
|
| 345 |
ea_req.Notes = rq_obj.text;
|
347 |
ea_req.Notes = rq_obj.text;
|
| 346 |
|
348 |
|
| - |
|
349 |
rq_obj.ea_element_ID = ea_req.ElementID;
|
| - |
|
350 |
|
| 347 |
ea_req.Difficulty = rq_obj.difficulty;
|
351 |
ea_req.Difficulty = rq_obj.difficulty;
|
| 348 |
ea_req.Priority = rq_obj.priority;
|
352 |
ea_req.Priority = rq_obj.priority;
|
| 349 |
ea_req.Version = rq_obj.version;
|
353 |
ea_req.Version = rq_obj.version;
|
| 350 |
ea_req.Status = rq_obj.status;
|
354 |
ea_req.Status = rq_obj.status;
|
| 351 |
|
355 |
|
| Line 388... |
Line 392... |
| 388 |
|
392 |
|
| 389 |
displayChangeLog(ea_repository, changeLog);
|
393 |
displayChangeLog(ea_repository, changeLog);
|
| 390 |
|
394 |
|
| 391 |
ea_repository.RefreshModelView(parentPackage.PackageID);
|
395 |
ea_repository.RefreshModelView(parentPackage.PackageID);
|
| 392 |
|
396 |
|
| - |
|
397 |
// Setup the internal requirement to requirement connectivity. This is seperate from the browser
|
| - |
|
398 |
// organisation of elements in EA, but since in ReqPro, that organisation tells part of the story
|
| - |
|
399 |
// of requirement to requirement connectivity, it is mirrored in the internal connectivity, along
|
| - |
|
400 |
// with explicit trace relationships setup in ReqPro.
|
| - |
|
401 |
// The purpose of this internal connectivity is to support relationship matrix tables in documentation
|
| - |
|
402 |
// generated by EA_DocGen, or to support diagrammatic representations of the requirements in EA,
|
| - |
|
403 |
// where the connectivity will become apparent through links ajoining the requirement elements in the
|
| - |
|
404 |
// diagram.
|
| - |
|
405 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, "Writing Trace Information", -1);
|
| - |
|
406 |
foreach( ReqPro_object sub_obj in rq_root_package.ReqPro_objects )
|
| - |
|
407 |
{
|
| - |
|
408 |
write_traces(ea_repository, sub_obj);
|
| - |
|
409 |
}
|
| - |
|
410 |
|
| 393 |
// display summary stats
|
411 |
// display summary stats
|
| 394 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, newRequirementCount.ToString() + " new requirements", -1);
|
412 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, newRequirementCount.ToString() + " new requirements", -1);
|
| 395 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, modifiedRequirementCount.ToString() + " requirements modified", -1);
|
413 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, modifiedRequirementCount.ToString() + " requirements modified", -1);
|
| 396 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, statusUpdatedRequirementCount.ToString() + " requirements had status changes", -1);
|
414 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, statusUpdatedRequirementCount.ToString() + " requirements had status changes", -1);
|
| 397 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, orphanedCount.ToString() + " requirements were orphaned", -1);
|
415 |
ea_repository.WriteOutput( Main.GUI_OUTPUT_TAB_NAME, orphanedCount.ToString() + " requirements were orphaned", -1);
|
| Line 453... |
Line 471... |
| 453 |
if ( ! (reqTypeIsFiltered(rq_obj) || reqStatusTypeIsFiltered(rq_obj)) )
|
471 |
if ( ! (reqTypeIsFiltered(rq_obj) || reqStatusTypeIsFiltered(rq_obj)) )
|
| 454 |
{
|
472 |
{
|
| 455 |
// Add this requirement to the flattened list we are accumulating
|
473 |
// Add this requirement to the flattened list we are accumulating
|
| 456 |
rq_req_collection.Add(rq_obj);
|
474 |
rq_req_collection.Add(rq_obj);
|
| 457 |
|
475 |
|
| - |
|
476 |
// In ReqPro, a requirement can be related to another requirement in several ways:
|
| - |
|
477 |
// 1. By virtue of its position relative to another in the browser display. That is,
|
| - |
|
478 |
// if you place a requirement beneath a parent requirement, you are establishing a
|
| - |
|
479 |
// parent-child relationship.
|
| - |
|
480 |
// 2. By virtue of a specific TraceTo relationship being made via the Traceability menu
|
| - |
|
481 |
// option.
|
| - |
|
482 |
// Interestingly, ReqPro prevents you creating a relationship of one of the above types,
|
| - |
|
483 |
// if a relationship of the other type already exists. This implies that the relationship
|
| - |
|
484 |
// between a parent and child requirement must be singular and is important regardless
|
| - |
|
485 |
// of the manner in which it was created or represented.
|
| - |
|
486 |
// The CopyReqProDatabaseToMemory base class will already have taken care of recording
|
| - |
|
487 |
// relationships detected from ReqPro made using method 2 above. What we need to do here is
|
| - |
|
488 |
// take care of those apparent from the browser based hierarchical organisation (ie. made
|
| - |
|
489 |
// in ReqPro using method 1).
|
| - |
|
490 |
// All we need to do is grab the parent object (if any) and add the GUID of the child to
|
| - |
|
491 |
// its list of trace-to's. Later on, the write_traces() class method will turn these into
|
| - |
|
492 |
// EA based connection objects that belong to the parent requirement elements.
|
| - |
|
493 |
if (rq_obj.parent != null)
|
| - |
|
494 |
{
|
| - |
|
495 |
rq_obj.parent.ReqPro_traces.Add(rq_obj.guid);
|
| - |
|
496 |
}
|
| - |
|
497 |
|
| 458 |
// Using recursion, scan this objects sub-objects, which in practise will all
|
498 |
// Using recursion, scan this objects sub-objects, which in practise will all
|
| 459 |
// be requirement objects. At this time requirement objects cannot have packages
|
499 |
// be requirement objects. At this time requirement objects cannot have packages
|
| 460 |
// as children.
|
500 |
// as children.
|
| 461 |
foreach( ReqPro_object sub_obj in rq_obj.ReqPro_objects )
|
501 |
foreach( ReqPro_object sub_obj in rq_obj.ReqPro_objects )
|
| 462 |
{
|
502 |
{
|