package preSimulationWindow;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import server.SpeciesStats;
import simulation.SimProperties;
import simulation.SimulationModel;
import utils.Constants;
import client.RestFacilities;
public class ViewModel {
private SimulationModel simModel;
private SimProperties simProperties;
private RestFacilities servRes;
private HashMap<String, String> nameList; // liste des correspondances nom/type
public ViewModel(SimulationModel model, RestFacilities serv) {
simModel = model;
servRes = serv;
nameList = new HashMap<String, String>();
}
public int randomAnimals() {
return (int) Math.round(Math.random() * Constants.MAX_POP);
}
// TODO
public void sendToModel(Map<String, Integer> speciesList,
SimProperties properties) {
simProperties = properties;
for (String key : speciesList.keySet()) {
SpeciesStats stats = servRes.getSpecies(key);
properties.addSpecies(stats, speciesList.get(key));
System.out.println("Ajout de l'espece : " + stats.getNom() + " avec une population de " + speciesList.get(key));
}
System.out.println("Envoi de la liste "+ simProperties.getSpeciesList() +" au modele");
simModel.setProperties(simProperties);
simModel.launchView();
}
public RestFacilities getRestServer() {
return servRes;
}
/** Liste des noms communs/URIs des especes **/
public String[] getSpeciesList() {
String str = servRes.getSpeciesList();
return str.substring(1, str.length() - 1).split(", ");
}
public String getName(String type) {
// On le compare aux valeurs contenues dans la map
Set<Entry<String, String>> set = nameList.entrySet();
for (Entry<String, String> e : set) {
if (e.getValue().equals(type)) {
// On recupere la cle associee a la valeur
return e.getKey();
}
}
return "";
}
/** Liste des types associes aux especes **/
public void setNameList() {
for (String s : getSpeciesList()) {
String type = servRes.getSpecies(s).getType();
nameList.put(s, type);
}
}
public HashMap<String, String> getNameList() {
return nameList;
}
public String getType(String name) {
return nameList.get(name);
}
}