From 1e379865eb41ef42a6adf18f52ebf44186376927 Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paristech.fr>
Date: Tue, 9 Dec 2014 08:43:29 +0000
Subject: [PATCH] Update on non connected elements

---
 src/tmltranslator/TMLCP.java                  | 40 ++++++++++++----
 .../tmlcp/TMLCPActivityDiagram.java           | 47 +++++++++++++++++++
 2 files changed, 77 insertions(+), 10 deletions(-)

diff --git a/src/tmltranslator/TMLCP.java b/src/tmltranslator/TMLCP.java
index ceb0e0eafe..85754dc871 100755
--- a/src/tmltranslator/TMLCP.java
+++ b/src/tmltranslator/TMLCP.java
@@ -337,20 +337,40 @@ public class TMLCP extends TMLElement {
     }
 
     public TMLCPElement getNonConnectedElement() {
-	TMLCPElement elt;
-	elt = mainCP.getNonConnectedElement();
-	if (elt != null) {
-	    return elt;
-	}
-	for(TMLCPActivityDiagram diag: otherCPs) {
+        TMLCPElement elt;
+        elt = mainCP.getNonConnectedElement();
+        if (elt != null) {
+            return elt;
+        }
+        for(TMLCPActivityDiagram diag: otherCPs) {
             elt = diag.getNonConnectedElement();
-	    if (elt != null) {
-		return elt;
-	    }
+            if (elt != null) {
+                return elt;
+            }
+        }
+        return null;
+    }
+
+    public LinkedList<TMLCPElement> getAllNonConnectedElements() {
+        LinkedList<TMLCPElement> list = new LinkedList<TMLCPElement>();
+        TMLCPElement elt;
+        list.addAll(mainCP.getAllNonConnectedElements());
+        for(TMLCPActivityDiagram diag: otherCPs) {
+            list.addAll(diag.getAllNonConnectedElements());
         }
-	return null;
+        return list;
     }
 
+    public LinkedList<TMLCPElement> removeAllNonConnectedElements() {
+        LinkedList<TMLCPElement> list = new LinkedList<TMLCPElement>();
+        TMLCPElement elt;
+        list.addAll(mainCP.removeAllNonConnectedElements());
+        for(TMLCPActivityDiagram diag: otherCPs) {
+            list.addAll(diag.removeAllNonConnectedElements());
+        }
+        return list;
+    }
+    
     public void printDataStructure()    {
 
         ArrayList<TMLCPActivityDiagram> CPlist = new ArrayList<TMLCPActivityDiagram>();
diff --git a/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java b/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java
index 3d93a53f14..61b5a538eb 100755
--- a/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java
+++ b/src/tmltranslator/tmlcp/TMLCPActivityDiagram.java
@@ -436,6 +436,53 @@ public class TMLCPActivityDiagram  extends TMLElement {
 	return null;
     }
 
+    public LinkedList<TMLCPElement> getAllNonConnectedElements() {
+	// Starting from Start state ... reaching all elements
+	// Then, see elements which are not in the reachable ones
+	if (start == null) {
+	    return null;
+	}
+
+	LinkedList<TMLCPElement> list = new LinkedList<TMLCPElement>();
+	ArrayList<TMLCPElement> reached = new ArrayList<TMLCPElement>();
+	
+	computeReachableElements(start, reached);
+
+	// Find elements which were not reached
+	for(TMLCPElement elt: elements) {
+	    if (!(reached.contains(elt))) {
+		list.add(elt);
+	    }
+	}
+	return list;
+    }
+
+    public LinkedList<TMLCPElement> removeAllNonConnectedElements() {
+	// Starting from Start state ... reaching all elements
+	// Then, see elements which are not in the reachable ones
+	if (start == null) {
+	    return null;
+	}
+
+	LinkedList<TMLCPElement> list = new LinkedList<TMLCPElement>();
+	ArrayList<TMLCPElement> reached = new ArrayList<TMLCPElement>();
+	
+	computeReachableElements(start, reached);
+
+	// Find elements which were not reached
+	for(TMLCPElement elt: elements) {
+	    if (!(reached.contains(elt))) {
+		list.add(elt);
+	    }
+	}
+
+	for(TMLCPElement elt: list) {
+	    elements.remove(elt);
+	}
+	
+	return list;
+    }
+
     private void computeReachableElements(TMLCPElement _elt, ArrayList<TMLCPElement> _reached) {
 	if (_reached.contains(_elt)) {
 	    return;
-- 
GitLab