Update temperature-sensor generation process

Define a fixed icon resource value

define 100 devices to be created by default
diff --git a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java
index c7a1137..c49bfe1 100644
--- a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java
+++ b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/discovery/TemperaturesGeneratorDiscoveryPacketReader.java
@@ -14,7 +14,6 @@
 import org.eclipse.sensinact.gateway.generic.packet.InvalidPacketException;
 import org.eclipse.sensinact.gateway.simulated.temperature.generator.internal.TemperaturesGeneratorAbstractPacket;
 import org.eclipse.sensinact.gateway.simulated.temperature.generator.internal.TemperaturesGeneratorAbstractPacketReader;
-import org.eclipse.sensinact.gateway.simulated.temperature.generator.reader.TemperaturesGeneratorPacket;
 
 public class TemperaturesGeneratorDiscoveryPacketReader extends TemperaturesGeneratorAbstractPacketReader {
     /**
diff --git a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java
index 5601516..fc902ce 100644
--- a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java
+++ b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/osgi/Activator.java
@@ -17,7 +17,6 @@
 import org.eclipse.sensinact.gateway.generic.ExtModelConfiguration;
 import org.eclipse.sensinact.gateway.generic.ExtModelConfigurationBuilder;
 import org.eclipse.sensinact.gateway.generic.local.LocalProtocolStackEndpoint;
-import org.eclipse.sensinact.gateway.simulated.temperature.generator.internal.TemperaturesGeneratorAbstractPacket;
 import org.eclipse.sensinact.gateway.simulated.temperature.generator.parser.DataParser;
 import org.eclipse.sensinact.gateway.simulated.temperature.generator.reader.TemperaturesGeneratorPacket;
 import org.eclipse.sensinact.gateway.simulated.temperature.generator.thread.TemperaturesGeneratorThreadManager;
@@ -26,7 +25,7 @@
 import java.util.Collections;
 
 public class Activator extends AbstractActivator<Mediator> {
-    @Property(name = "org.eclipse.sensinact.simulated.generator.amount", defaultValue = "10")
+    @Property(name = "org.eclipse.sensinact.simulated.generator.amount", defaultValue = "100")
     Integer DEVICES_NUMBER;
     private LocalProtocolStackEndpoint<TemperaturesGeneratorPacket> connector;
     private ExtModelConfiguration<TemperaturesGeneratorPacket> manager;
diff --git a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java
index 953b9ec..295c791 100644
--- a/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java
+++ b/simulated-devices/temperatures-generator/src/main/java/org/eclipse/sensinact/gateway/simulated/temperature/generator/parser/DataParser.java
@@ -10,17 +10,15 @@
  */
 package org.eclipse.sensinact.gateway.simulated.temperature.generator.parser;
 
-import org.eclipse.sensinact.gateway.common.bundle.Mediator;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Map;
 import java.util.Random;
 import java.util.Set;
 
+import org.eclipse.sensinact.gateway.common.bundle.Mediator;
+
 /**
  * The parser randomly chooses line in the data.csv file using the reservoir sampling algorithm
  */
@@ -32,43 +30,65 @@
     }
 
     public Set<DeviceInfo> createDeviceInfosSet(int number) {
-        Map<String, Integer> map = new HashMap<String, Integer>();
+        found = new HashSet<String>();
         Set<DeviceInfo> deviceInfoSet = new HashSet<DeviceInfo>();
         try {
             for (int i = 0; i < number; i++) {
-                BufferedReader reader = new BufferedReader(new InputStreamReader(mediator.getContext().getBundle().getResource("data.csv").openStream()));
-                DeviceInfo deviceInfo = choose(i, new BufferedReader(reader));
-                if (!map.containsKey(deviceInfo.getServiceProviderId())) {
-                    map.put(deviceInfo.getServiceProviderId(), 0);
-                }
-                map.put(deviceInfo.getServiceProviderId(), map.get(deviceInfo.getServiceProviderId()) + 1);
+                DeviceInfo deviceInfo = null;
+                while(deviceInfo == null)
+                	deviceInfo = choose(mediator, i);                
                 deviceInfoSet.add(deviceInfo);
-                reader.close();
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
+        found.clear();
+        found = null;
         return deviceInfoSet;
     }
-
-    private static DeviceInfo choose(int nb, BufferedReader reader) throws IOException {
+    
+    private static BufferedReader buildReader(Mediator mediator) throws IOException {
+    	return new BufferedReader(new InputStreamReader(mediator.getContext().getBundle().getResource("data.csv").openStream()));
+    }
+    
+    private static Set<String> found;
+    
+    private static DeviceInfo choose(Mediator mediator, int nb) throws IOException {
         DeviceInfo result = null;
         Random rand = new Random();
-        Integer sleepTimeRandom = new Random().nextInt(60000) + 1000;
-        String currentLine;
-        int n = 0;
-        while ((currentLine = reader.readLine()) != null) {
-            n++;
+        BufferedReader reader = buildReader(mediator);
+        Integer sleepTimeRandom = new Random().nextInt(10000) + 1000;
+        String currentLine = null;
+        int n = nb;
+        while (true) {
+        	currentLine = reader.readLine();
+        	if(currentLine == null) {
+        		reader.close();
+        		reader = null;
+        		reader = buildReader(mediator);
+            	currentLine = reader.readLine();
+            	n=nb;
+        	}
+            if (n==0 || rand.nextInt(n) != 0) {
+            	n++;
+            	continue;
+            }
+            if(found.contains(String.valueOf(n-nb))) {
+            	n++;
+            	continue;
+            }
+            found.add(String.valueOf(n-nb));
             String[] splittedLine = currentLine.split(",");
             double[] temperatures = new double[12];
             for (int i = 0; i < 12; i++) {
                 temperatures[i] = Double.parseDouble(splittedLine[i + 2]);
             }
             DeviceInfo deviceInfo = new DeviceInfo(String.valueOf(nb), splittedLine[1] + "," + splittedLine[2], temperatures, sleepTimeRandom);
-            if (rand.nextInt(n) == 0) {
-                result = deviceInfo;
-            }
+            result = deviceInfo;
+            break;
         }
+		reader.close();
+		reader = null;
         return result;
     }
 }
diff --git a/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml b/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml
index 5693705..254bc3a 100644
--- a/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml
+++ b/simulated-devices/temperatures-generator/src/main/resources/temperature-resource.xml
@@ -11,11 +11,26 @@
 
 <resourceInfos xmlns="http://org.eclipse.sensinact/resource" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://org.eclipse.sensinact/resource ../../../../../platform/sensinact-generic/src/main/resources/sensinact-resource.xsd">
+   <resourceInfo xsi:type="resourceInfoProperty" name="ICON"  target="admin">
+    <identifier xsi:type="stringContent">ICON</identifier>
+    <attributes>
+    	<attribute name="value" type="String" modifiable="FIXED">
+    		<value>weather-station</value>
+    	</attribute>
+    </attributes>
+  </resourceInfo>
+  <resourceInfo xsi:type="resourceInfoProperty" name="LOCATION"  target="admin">
+    <identifier xsi:type="stringContent">LOCATION</identifier>
+    <attributes>
+    	<attribute name="value" type="String" modifiable="UPDATABLE">
+    	</attribute>
+    </attributes>
+  </resourceInfo>
   <resourceInfo xsi:type="resourceInfoSensor" name="TEMPERATURE"  target="sensor">
     <identifier xsi:type="stringContent">TEMPERATURE</identifier>
     <attributes>
     	<attribute name="value" type="double"></attribute>
-    	<attribute name="floor" type="int" modifiable="MODIFIABLE" observed="true"></attribute>
+    	<attribute name="floor" type="int" modifiable="MODIFIABLE"></attribute>
     </attributes>
   </resourceInfo>
 </resourceInfos>
\ No newline at end of file