public void updateLinkContainer(ECPProject project)
{
if( project == null ) return;
LinkContainer container = null;
List<EObject> helper = accessLayer.getElements(project, "LinkContainer");
if( helper.isEmpty() )
{
container = LinkModelFactory.eINSTANCE.createLinkContainer();
accessLayer.addElement(project, container);
}
else
{
// merge containers:
container = (LinkContainer)helper.get(0);
for(int i = 0; i < helper.size(); i++)
{
if( i == 0 ) continue;
container.getLinks().addAll(((LinkContainer)helper.get(i)).getLinks());
((LinkContainer)helper.get(i)).getLinks().clear();
container.getTraces().addAll(((LinkContainer)helper.get(i)).getTraces());
((LinkContainer)helper.get(i)).getTraces().clear();
accessLayer.removeElement(project, helper.get(i));
helper.remove(i);
i--;
}
}
// move all links & traces into the container:
List<EObject> links = accessLayer.getElements(project, "TraceLink");
List<EObject> traces = accessLayer.getElements(project, "Trace");
int numLinks = links.size();
int numTraces = traces.size();
if( container.getLinks().size() != numLinks )
for(int i = 0; i < numLinks; i++)
if( !container.getLinks().contains(links.get(i)))
container.getLinks().add((TraceLink)links.get(i));
if( container.getTraces().size() != numTraces )
for(int i = 0; i < numTraces; i++)
if( !container.getTraces().contains(traces.get(i)))
container.getTraces().add((Trace)traces.get(i));
// update the names of traces:
for(int i = 0; i < numTraces; i++)
{
((Trace) traces.get(i)).setName("Trace" + "#" + i + " [spanning " + ((Trace)traces.get(i)).getTraceabilityLinks().size() + " links]");
}
String linkText = " link";
if( numLinks == 0 || numLinks > 1 ) linkText += "s";
String traceText = " trace";
if( numTraces == 0 || numTraces > 1 ) traceText += "s";
container.setName("[" + numLinks + linkText + ", " + numTraces + traceText + "]");
if( isLoggingEnabled ) printToLog("updateLinkContainer", "9. link container has been updated");
}