From 8d64e669579c2ebbf229606d3e4f3c9a5e9b977c Mon Sep 17 00:00:00 2001
From: Hugo Roussel <hugo.roussel@univ-tlse3.fr>
Date: Wed, 10 Jul 2019 17:41:55 +0200
Subject: [PATCH] Updated XmlConfigGenerator

---
 .../src/experiments/XmlConfigGenerator.java   | 69 -------------------
 .../nDimensionsLaunchers/F_N_Launcher.java    |  5 --
 .../src/utils/XmlConfigGenerator.java         | 61 ++++++++++++++++
 3 files changed, 61 insertions(+), 74 deletions(-)
 delete mode 100644 AMOEBAonAMAK/src/experiments/XmlConfigGenerator.java
 create mode 100644 AMOEBAonAMAK/src/utils/XmlConfigGenerator.java

diff --git a/AMOEBAonAMAK/src/experiments/XmlConfigGenerator.java b/AMOEBAonAMAK/src/experiments/XmlConfigGenerator.java
deleted file mode 100644
index 00f5086a..00000000
--- a/AMOEBAonAMAK/src/experiments/XmlConfigGenerator.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package experiments;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileWriter;
-import java.io.IOException;
-
-public class XmlConfigGenerator {
-
-	public XmlConfigGenerator() {
-		
-	}
-	
-	public static String makeLineXML(String sensorName, String source) {
-		return "\t\t<Sensor Name=\""+sensorName+"\" Source=\""+source+"\"></Sensor>\n"; 
-	}
-
-	public static void makeXML(String XMLFile, int dimension) {
-		String path = "Ressources";
-	
-	    try {
-	    	File file = new File(path+"/"+XMLFile);
-	        FileWriter fw = new FileWriter(file);
-	        
-	        //Make content
-	        String str = "";
-	        str += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
-	        		"<System>\n" + 
-	        		"\n" + 
-	        		"\t<!-- General config options -->\n" + 
-	        		"\t<Configuration>\n" + 
-	        		"\t\t<Learning allowed = \"true\" creationOfNewContext = \"true\" loadPresetContext = \"false\"></Learning>	\n" + 
-	        		"\t</Configuration>\n" + 
-	        		"\n" + 
-	        		"\t<StartingAgents>\n";
-	  
-	        for(int j = 0; j < dimension; ++j) {
-	        	str += makeLineXML("px"+j,"x"+j);
-    		}
-	        
-	        str += "\t\t<Controller Name=\"Controller\" Oracle=\"test\"></Controller>\n\n";
-
-	        
-	        		
-	        str += "\t</StartingAgents>\n" + 
-	        		"\n" + 
-	        		"</System>";
-	        
-	        //Write and close file
-	        fw.write(str);
-	        fw.close();
-	      } catch (FileNotFoundException e) {
-	        e.printStackTrace();
-	      } catch (IOException e) {
-	        e.printStackTrace();
-	      }
-	}
-	
-	public static void main(String[] args) {
-		// TODO Auto-generated method stub
-
-		
-		String XMLConfigFile = "nDimensionLauncher.xml";
-		
-		XmlConfigGenerator.makeXML(XMLConfigFile, 2);
-		
-		
-	}
-}
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index 5a9e38b3..c24ccaa1 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -4,13 +4,8 @@ import java.io.File;
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
 
-import agents.context.Context;
 import experiments.FILE;
-import experiments.F_XY_System;
-import experiments.XmlConfigGenerator;
 import fr.irit.smac.amak.Configuration;
 import gui.AmoebaWindow;
 import kernel.AMOEBA;
diff --git a/AMOEBAonAMAK/src/utils/XmlConfigGenerator.java b/AMOEBAonAMAK/src/utils/XmlConfigGenerator.java
new file mode 100644
index 00000000..3819e2af
--- /dev/null
+++ b/AMOEBAonAMAK/src/utils/XmlConfigGenerator.java
@@ -0,0 +1,61 @@
+package utils;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+public class XmlConfigGenerator {
+	
+	public static String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+	public static String systemStart = "<System>\n";
+	public static String configurationStart = "<Configuration>\n";
+	public static String configuration = "    <Learning allowed = \"%s\" creationOfNewContext = \"%s\" loadPresetContext = \"%s\" />\n";
+	public static String configurationEnd = "</Configuration>\n";
+	public static String agentsStart = "<StartingAgents>\n";
+	public static String sensor = "    <Sensor Name=\"%s\" Enum=\"%s\" />\n";
+	public static String controller = "    <Controller Name=\"Controller\">\n" + 
+			"        <ErrorMargin ErrorAllowed=\"%f\" AugmentationFactorError=\"%f\" DiminutionFactorError=\"%f\" MinErrorAllowed=\"%f\" NConflictBeforeAugmentation=\"%d\" NSuccessBeforeDiminution=\"%d\" />\n" + 
+			"    </Controller>\n";
+	public static String agentsEnd = "</StartingAgents>\n";
+	public static String systemEnd = "</System>\n";
+	
+	private static String makeSensor(String sensorName, boolean isEnum) {
+		return String.format(sensor, sensorName, ""+isEnum);
+	}
+	
+	private static String makeConfiguration(boolean isLearningAllowed, boolean isCreationOfNewContext, boolean isLoadContext) {
+		return String.format(configuration, ""+isLearningAllowed, ""+isCreationOfNewContext, ""+isLoadContext);
+	}
+	
+	private static String makeController(double errorAllowed, double augmentationFactorError, double diminutionFactorError, double minErrorAllowed, int nConflictBeforeAugmentation, int nSuccessBeforeDiminution) {
+		return String.format(Locale.ENGLISH, controller, errorAllowed, augmentationFactorError, diminutionFactorError, minErrorAllowed, nConflictBeforeAugmentation, nSuccessBeforeDiminution);
+	}
+
+	public static void makeXML(File file, List<Pair<String, Boolean>> sensors) throws IOException {
+	    try(FileWriter fw = new FileWriter(file)){
+	    	fw.write(header);
+	    	fw.write(systemStart);
+	    	fw.write(configurationStart);
+	    	fw.write(makeConfiguration(true, true, false));
+	    	fw.write(configurationEnd);
+	    	fw.write(agentsStart);
+	    	for(Pair<String, Boolean> s : sensors) {
+	    		fw.write(makeSensor(s.getA(), s.getB()));
+	    	}
+	    	fw.write(makeController(1.0, 0.5, 0.5, 0.01, 50, 50));
+	    	fw.write(agentsEnd);
+	    	fw.write(systemEnd);
+	    }
+	}
+	
+	public static void makeXML(File file, int dimension) throws IOException {
+		ArrayList<Pair<String, Boolean>> sensors = new ArrayList<>(dimension);
+		for(int i = 1; i <= dimension; i++) {
+			sensors.add(new Pair<String, Boolean>("p"+i, false));
+		}
+		makeXML(file, sensors);
+	}
+}
-- 
GitLab