diff --git a/.idea/misc.xml b/.idea/misc.xml
index b4b256d..4db2818 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..65ca07a
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index f598c83..3989302 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,7 +4,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -35,6 +45,7 @@
+
diff --git a/src/fr/impl/CompatibilityCheckerImpl.java b/src/fr/impl/CompatibilityCheckerImpl.java
index eaae86e..d628ffd 100644
--- a/src/fr/impl/CompatibilityCheckerImpl.java
+++ b/src/fr/impl/CompatibilityCheckerImpl.java
@@ -1,6 +1,6 @@
package src.fr.impl;
-import java.util.HashMap;
+//import java.util.HashMap;
import java.util.Set;
import src.fr.api.PartType;
diff --git a/src/fr/impl/CompatibilityManagerImpl.java b/src/fr/impl/CompatibilityManagerImpl.java
index 77148db..49562d3 100644
--- a/src/fr/impl/CompatibilityManagerImpl.java
+++ b/src/fr/impl/CompatibilityManagerImpl.java
@@ -42,6 +42,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
incompa.add(x);
System.out.println("Add "+reference.getName() +" incompatible with "+x.getName());
+ this.incompatibilities.put(reference, incompa);
// Symétrie
//Ajoute x à ref
//this.getIncompatibilities(x).add(reference);
@@ -64,7 +65,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}else{
if(incompa.contains(target)){
incompa.remove(target);
-
+ this.incompatibilities.replace(reference, incompa);
// SyMéTrIe
//Remove target -> ref
//this.getIncompatibilities(target).remove(reference);
@@ -96,6 +97,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
require.add(x);
System.out.println("Add "+reference.getName() +" compatible with "+x.getName());
+ this.requirements.put(reference, require);
//Symétrie
//Ajoute x à ref
//this.getRequirements(x).add(reference);
@@ -119,7 +121,7 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}else{
if(require.contains(target)){
require.remove(target);
-
+ this.requirements.replace(reference, require);
// SyMéTrIe
//Remove target -> ref
//this.getRequirements(target).remove(reference);
@@ -130,8 +132,8 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}
// A -> B -> C -> A, D -> B
- //bool verify requirement (1) or incompatible (0)
- private void Femeture_Transivite(PartType reference, Set result, Set visited, boolean bool){
+ //erquirement only
+ private void Femeture_Transivite(PartType reference, Set result, Set visited, PartType start){
//Condition de quitter la boucle
if(visited.contains(reference)){
return;
@@ -140,42 +142,63 @@ public class CompatibilityManagerImpl implements src.fr.api.CompatibilityManager
}
Set list = null;
- if(bool==true){ // requirement
- //Get all requirement of A (in example is B)
- list = this.requirements.get(reference);
- }else{ //incompatible
- list = this.incompatibilities.get(reference);
- }
+ //Get all requirement of A (in example is B)
+ list = this.requirements.get(reference);
if(list != null){ // list = {B}
for(PartType pt: list){
- if(!result.contains(pt)){
+ if(!result.contains(pt)&& pt !=start){
result.add(pt);
}
- Femeture_Transivite(pt,result,visited,bool);
+ Femeture_Transivite(pt,result,visited,reference);
}
}
}
- private void check_All_Catalog(PartType reference, Set result, boolean bool){
- if(bool){ //
-
- }
- }
-
@Override
public Set getIncompatibilities(PartType reference) {
Set result = new HashSet<>();
- Femeture_Transivite(reference, result,new HashSet<>(),false);
+
+ // Remove the case of result become null
+ Set directIncompa = this.incompatibilities.get(reference);
+ if(directIncompa!=null){
+ result.addAll(directIncompa);
+ }
+
+ // Collect the requirements list
+ Set requirements = new HashSet<>();
+ Femeture_Transivite(reference, requirements,new HashSet<>(),reference);
+
+ for(Map.Entry> entry : this.incompatibilities.entrySet()){
+ // check start
+ if(entry.getValue().contains(reference)){
+ result.add(entry.getKey());
+ }
+
+ // check incompatible of A's requirements
+ for(PartType pt: requirements){
+ // In Catalog of pt
+ if(entry.getValue().contains(pt)){
+ result.add(entry.getKey());
+ }
+ // Direct of pt
+ Set direct_pt = this.incompatibilities.get(pt);
+ if(direct_pt!=null){
+ result.addAll(direct_pt);
+ }
+ }
+
+ }
+
return result;
- }
+ }
@Override
public Set getRequirements(PartType reference) {
Set result = new HashSet<>();
- Femeture_Transivite(reference, result,new HashSet<>(),true);
+ Femeture_Transivite(reference, result,new HashSet<>(),reference);
return result;
}
diff --git a/src/fr/test/test.java b/src/fr/test/test.java
index 45937d0..17b79cb 100644
--- a/src/fr/test/test.java
+++ b/src/fr/test/test.java
@@ -149,6 +149,11 @@ public class test {
@Test
public void test_Incompatibilities_Complex_7(){
cm.addRequirements(TC120, Set.of(XC));
+ System.out.print(cm.getRequirements(TC120).size());
+ for(PartType p : cm.getRequirements(TC120)){
+ System.out.print(p.getName());
+ }
+
System.out.println("TC120 requirment size : " + cm.getRequirements(TC120).contains(XC));
assertTrue(cm.getRequirements(TC120).contains(XC));
assertTrue(cm.getRequirements(EH120).contains(XC));
@@ -173,7 +178,9 @@ public class test {
@Test
public void test_Remove_Empty_7(){
- assertTrue(cm.getIncompatibilities(EG100).isEmpty());
+ //Wrong test
+ //assertTrue(cm.getIncompatibilities(EG100).isEmpty());
+ // je crois on a TA5, TSF7, XM, XS et IS, faut tester
cm.removeIncompatibility(EG100, EG100);
assertFalse(cm.getIncompatibilities(EG100).contains(EG100));
}