In the previous Table Layouts, there are several examples of Calculated Attributes. Here are explanations on how to add them to the table:
This column gives the Status of the Requirement, namely <<New>>, <<Changed>> or <<Deleted>>.
To retrieve such information, it is necessary to add Java code:
String status = "";
IRPCollection stereotypes = cellElement.getStereotypes();
for(int i=1; i<=stereotypes.getCount(); ++i) {
IRPStereotype stereotype = (IRPStereotype)(stereotypes.getItem(i));
String stereotypeName = stereotype.getName();
switch(stereotypeName) {
case "New":
case "Changed":
case "Deleted":
status = status.isEmpty() ? stereotypeName : status + ", " + stereotypeName;
break;
}
}
return status;
This column gives the Model Element in connection with the Requirement.
To retrieve such information, it is necessary to add Java code:
List<IRPModelElement> results = new LinkedList<>();
IRPCollection references = cellElement.getReferences();
for(int i=1; i<= references.getCount();++i) {
IRPModelElement referenceElement = (IRPModelElement)(references.getItem(i));
if(referenceElement.getIsOfMetaClass("Dependency") == 1) {
IRPDependency dependency = (IRPDependency)referenceElement;
IRPModelElement dependent = dependency.getDependent();
if(dependent.getIsOfMetaClass("Requirement") == 0) {
results.add(dependency.getDependent());
}
}
}
return results;
This column gives the percentage of covered Requirements.
To retrieve such information, it is necessary to add Java code:
String result = "";
int requirementsCount = 0;
int tracedRequirements = 0;
boolean leavesOnly = false;
boolean headingCoverage = false;
IRPTag leavesOnlyTag = view.getTag("considerLeavesOnly");
if(leavesOnlyTag != null) {
leavesOnly = "true".equalsIgnoreCase(leavesOnlyTag.getValue());
}
IRPTag headingCoverageTag = view.getTag("headingCoverage");
if(headingCoverageTag != null) {
headingCoverage = "true".equalsIgnoreCase(headingCoverageTag.getValue());
}
if (cellElement.getIsOfMetaClass("Package") == 1 || (headingCoverage && cellElement.getIsOfMetaClass("Requirement") == 1)) {
// get all nested requirements
IRPCollection nestedRequirements = cellElement.getNestedElementsByMetaClass("Requirement", 1);
requirementsCount = nestedRequirements.getCount();
for (int i = 1; i <= nestedRequirements.getCount(); ++i) {
IRPRequirement requirement = (IRPRequirement) nestedRequirements.getItem(i);
// skip if nested element is element itself (occurs when there is actually no nested element
if(requirement.equals(cellElement)) {
requirementsCount--;
continue;
}
// skip if contains requirements and leavesOnly == true
if(leavesOnly) {
if(requirement.getNestedElementsByMetaClass("Requirement", 0).getCount() > 0) {
// remove this requirement from counts
requirementsCount--;
// skip analysis
continue;
}
}
// check incoming traces
IRPCollection references = requirement.getReferences();
for (int iRef = 1; iRef <= references.getCount(); ++iRef) {
IRPModelElement referenceElement = (IRPModelElement) (references.getItem(iRef));
if (referenceElement.getIsOfMetaClass("Dependency") == 1) {
IRPDependency dependency = (IRPDependency) referenceElement;
IRPModelElement dependent = dependency.getDependent();
if (dependent != null && dependent.getIsOfMetaClass("Requirement") == 0) {
tracedRequirements++;
break;
}
}
}
}
// calculate ratio
if(requirementsCount > 0) {
float coverage = (float)tracedRequirements / requirementsCount * 100;
result = String.format("%.2f%%", coverage);
}
}
return result;