diff --git a/src/tmltranslator/TMLCP.java b/src/tmltranslator/TMLCP.java index ef3f4898ab9a78e2a2cf39b253b1692a831aa21e..abcf4941ad83903de2ed26d3b08b43bc83c23a63 100755 --- a/src/tmltranslator/TMLCP.java +++ b/src/tmltranslator/TMLCP.java @@ -327,12 +327,13 @@ public class TMLCP extends TMLElement { } public void splitADs() { - ArrayList<TMLCPActivityDiagram> all = new ArrayList<TMLCPActivityDiagram>(); - all.addAll(mainCP.splitADs()); - for(TMLCPActivityDiagram diag: otherCPs) { - all.addAll(diag.splitADs()); - } - otherCPs.addAll(all); + + ArrayList<TMLCPActivityDiagram> all = new ArrayList<TMLCPActivityDiagram>(); + all.addAll(mainCP.splitADs()); + for(TMLCPActivityDiagram diag: otherCPs) { + all.addAll(diag.splitADs()); + } + otherCPs.addAll(all); } public void printDataStructure() { diff --git a/src/tmltranslator/TMLCPSyntaxChecking.java b/src/tmltranslator/TMLCPSyntaxChecking.java index 830dc32692d4c95596346ed6d83e898b3fdc55b6..44d129bdb8675cc7104c38a4661daad7265aab3d 100755 --- a/src/tmltranslator/TMLCPSyntaxChecking.java +++ b/src/tmltranslator/TMLCPSyntaxChecking.java @@ -102,6 +102,8 @@ public class TMLCPSyntaxChecking { //First check the mainCP then check the other Activity Diagrams private void checkActivityDiagrams() { + ArrayList<TMLCPActivityDiagram> junctionsList = new ArrayList<TMLCPActivityDiagram>(); + TMLCPActivityDiagram mainCP = tmlcp.getMainCP(); //Checking mainCP @@ -112,9 +114,15 @@ public class TMLCPSyntaxChecking { //Checking the other ActivityDiagrams ArrayList<TMLCPActivityDiagram> listADs = tmlcp.getCPActivityDiagrams(); + //TraceManager.addDev( "The list of ADs contains: " + listADs.toString() ); for( TMLCPActivityDiagram diag: listADs ) { + if( diag.getName().toLowerCase().contains( "junction" ) ) { + junctionsList.add( diag ); + break; + } currentListOfElements = diag.getElements(); checkStartState( currentListOfElements, diag ); + TraceManager.addDev( "DIAGRAM UNDER EXAMINATION IS: " + diag.getName() ); checkDisconnectedSubParts( currentListOfElements, diag ); checkDiagramsBetweenForkAndJoin( currentListOfElements, diag ); } @@ -159,7 +167,7 @@ public class TMLCPSyntaxChecking { int startCounter = 0; for( TMLCPElement elem: diag.getElements() ) { - TraceManager.addDev( "ELEMENT in AD: " + elem ); + //TraceManager.addDev( "ELEMENT in AD: " + elem ); if( elem instanceof TMLCPStart ) { startCounter++; } @@ -182,11 +190,16 @@ public class TMLCPSyntaxChecking { for( TMLCPElement currentElement: currentListOfElements ) { if( !(currentElement instanceof TMLCPStart) ) { for( TMLCPElement element: listOfElementsToCheck ) { - if( !element.getNextElements().contains( currentElement ) ) { + ArrayList<TMLCPElement> nextElements = element.getNextElements(); + if( nextElements.get(0).getName().toLowerCase().contains( "junction" ) ) { + adsWithJunctionsList.add( diag ); + } + if( !nextElements.contains( currentElement ) ) { //counting how many times currentElement is NOT present as a next element counter++; } } } + //If currentElement is NEVER present as a next element it means its head is not connected if( counter == currentListOfElements.size() ) { addError( "Element <<" + currentElement.toString()+ ">> in diagram <<" + diag.getName() + ">> is not correctly connected", TMLCPError.ERROR_STRUCTURE ); } diff --git a/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java b/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java index e288adb07e0ed114b72c02ff4fb36a488c34c69e..7690981bd2516ce8cc0d0a608cc8b93eb97ba6de 100755 --- a/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java +++ b/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java @@ -311,22 +311,22 @@ public class TMLCPActivityDiagram extends TMLElement { int id = 0; TMLCPActivityDiagram diag; - TraceManager.addDev("Splitting AD: " + getName()); + TraceManager.addDev("Splitting AD: " + getName()); // For each junction, we create a new AD ArrayList<TMLCPJunction> junctions = new ArrayList<TMLCPJunction>(); - ArrayList<TMLCPRefAD> refsAD = new ArrayList<TMLCPRefAD>(); - ArrayList<TMLCPElement> toBeRemoved = new ArrayList<TMLCPElement>(); + ArrayList<TMLCPRefAD> refsAD = new ArrayList<TMLCPRefAD>(); + ArrayList<TMLCPElement> toBeRemoved = new ArrayList<TMLCPElement>(); HashMap<TMLCPJunction, TMLCPActivityDiagram> refs = new HashMap<TMLCPJunction, TMLCPActivityDiagram>(); for(TMLCPElement elt: elements) { if (elt instanceof TMLCPJunction) { junctions.add((TMLCPJunction)elt); diag = new TMLCPActivityDiagram(elt.getName() + "_" + id, referenceObject); - TMLCPStart start = new TMLCPStart("StartFrom_" + elt.getName(), elt.getReferenceObject()); - diag.setStartElement(start); - diag.addTMLCPElement(start); + TMLCPStart start = new TMLCPStart("StartFrom_" + elt.getName(), elt.getReferenceObject()); + diag.setStartElement(start); + diag.addTMLCPElement(start); refs.put((TMLCPJunction)elt, diag); - TraceManager.addDev("Adding a new diag named: " + diag.getName()); + TraceManager.addDev("Adding a new diag named: " + diag.getName()); } } diff --git a/src/ui/GTMLModeling.java b/src/ui/GTMLModeling.java index 7ac753590ad7189a9572475b531a18689d0c4d62..0754a2fbb624a020469070879ac9916b388e02b1 100755 --- a/src/ui/GTMLModeling.java +++ b/src/ui/GTMLModeling.java @@ -623,7 +623,7 @@ public class GTMLModeling { TMLChannel channel; TMLTask tt1, tt2; - //TraceManager.addDev("*** Adding channels ***"); + TraceManager.addDev("*** Adding channels ***"); while(iterator.hasNext()) { tgc = (TGComponent)(iterator.next()); @@ -2201,10 +2201,13 @@ public class GTMLModeling { //TraceManager.addDev( "PANEL number: " + panelCounter + " " + panelList.get( panelCounter ) ); } + TraceManager.addDev( "Before correcting references. The list of ADs contains: " + tmlcp.getCPActivityDiagrams().toString() ); tmlcp.correctReferences(); //Update references to the right activity and sequence diagrams + TraceManager.addDev( "After correcting references and before splitting ADs. The list of ADs contains: " + tmlcp.getCPActivityDiagrams().toString() ); //tmlcp.generateNexts(); // Add nexts elements to CPElements //tmlcp.removeADConnectors(); // Remove connectors since nexts have been filled tmlcp.splitADs(); // Splitting ADs so as to remove junctions -> new ADs are introduced for each junction inside an AD + TraceManager.addDev( "After splitting ADs. The list of ADs contains: " + tmlcp.getCPActivityDiagrams().toString() ); for( TMLCPSequenceDiagram seqDiag: tmlcp.getCPSequenceDiagrams() ) { TraceManager.addDev( "**********" );