package preSimulationWindow;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.text.JTextComponent;
import server.SpeciesStats;
import utils.Constants;
@SuppressWarnings("serial")
public class RestManagementPane extends JPanel {
private ViewModel viewModel;
private SpeciesStats speciesStats;
private ArrayList<String> speciesList;
private ArrayList<String> foodList; // liste des especes comestibles
private boolean showSpeciesFlag;
/** Choix d'actions a effectuer **/
private JButton actionChoiceButton;
private JComboBox actionsList;
private JComboBox speciesChoice;
private JLabel actionsLabel;
/** Caracteristiques de l'espece **/
private JTextField nom; // nom commun
private JTextField type; // nom "scientifique"
private JTextField smellPoint; // by meter
private JTextField visionPoint; // by meter
private JTextField movePoint; // by meter per day
private JTextField maxLifetime;
private JTextField minimumWeightToDeath;
private JTextField weightConsumeByDay;
private JTextField maxNbDaySafe;
private JTextField attackPoint;
private JTextField defendPoint;
private JTextField initWeight;
private JTextField initAge;
private JTextField birthRateByDay;
private JTextArea descriptif;
private JRadioButton isHerbivorious;
private JRadioButton isCarnivorous;
private ButtonGroup dietButtons;
private JPanel dietPanel;
private JRadioButton defenseHidden;
private JRadioButton defenseFlee;
private ButtonGroup defenseButtons;
private JPanel defensePanel;
private JLabel edibleFoodList;
private JButton edibleFoodButton;
private JLabel nomLabel;
private JLabel descriptifLabel;
private JLabel isHerbivoriousLabel;
private JLabel typeLabel;
private JLabel smellPointLabel;
private JLabel visionPointLabel;
private JLabel movePointLabel;
private JLabel maxLifetimeLabel;
private JLabel minimumWeightToDeathLabel;
private JLabel weightConsumeByDayLabel;
private JLabel maxNbDaySafeLabel;
private JLabel attackPointLabel;
private JLabel defendPointLabel;
private JLabel initWeightLabel;
private JLabel initAgeLabel;
private JLabel birthRateByDayLabel;
private JLabel isUseHiddenDefenseLabel;
private JLabel edibleFoodListLabel;
/** Structuration des champs **/
private JPanel actionsPanel;
private JPanel statsPanel;
private JScrollPane statsScrollPane;
private Border initBorder;
/** Constructeur **/
public RestManagementPane(ViewModel model) {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
/** Initialisation **/
GridBagConstraints c = new GridBagConstraints();
viewModel = model;
showSpeciesFlag = false;
speciesList = new ArrayList<String>();
speciesStats = new SpeciesStats();
foodList = new ArrayList<String>();
speciesChoice = new JComboBox();
fetchSpeciesList();
speciesChoice.setVisible(false);
actionsList = new JComboBox(Constants.REST_MANAGEMENT_ACTIONS);
actionsLabel = new JLabel("Action : ");
actionChoiceButton = new JButton("OK");
actionsPanel = new JPanel(new GridBagLayout());
statsPanel = new JPanel(new GridBagLayout());
statsScrollPane = new JScrollPane();
nom = new JTextField();
descriptif = new JTextArea(3, 20);
descriptif.setLineWrap(true);
isHerbivorious = new JRadioButton("Herbivore");
isCarnivorous = new JRadioButton("Carnivore");
dietButtons = new ButtonGroup();
dietButtons.add(isHerbivorious);
dietButtons.add(isCarnivorous);
dietPanel = new JPanel(new GridLayout(1, 0));
dietPanel.add(isHerbivorious);
dietPanel.add(isCarnivorous);
type = new JTextField();
smellPoint = new JTextField();
visionPoint = new JTextField();
movePoint = new JTextField();
maxLifetime = new JTextField();
minimumWeightToDeath = new JTextField();
weightConsumeByDay = new JTextField();
maxNbDaySafe = new JTextField();
attackPoint = new JTextField();
defendPoint = new JTextField();
initWeight = new JTextField();
initAge = new JTextField();
birthRateByDay = new JTextField();
defenseHidden = new JRadioButton("Se cacher");
defenseFlee = new JRadioButton("Fuir");
defenseButtons = new ButtonGroup();
defenseButtons.add(defenseHidden);
defenseButtons.add(defenseFlee);
defensePanel = new JPanel(new GridLayout(1, 0));
defensePanel.add(defenseHidden);
defensePanel.add(defenseFlee);
edibleFoodList = new JLabel();
edibleFoodButton = new JButton("+");
edibleFoodButton.setMaximumSize(edibleFoodButton.getSize());
nomLabel = new JLabel("Nom commun : ");
descriptifLabel = new JLabel("Description de l'espèce :");
typeLabel = new JLabel("Nom scientifique : ");
smellPointLabel = new JLabel("Portée olfactive (en m) : ");
visionPointLabel = new JLabel("Portée visuelle (en m) : ");
movePointLabel = new JLabel("Distance parcourue (en m/jour) : ");
maxLifetimeLabel = new JLabel("Durée de vie maximale : ");
minimumWeightToDeathLabel = new JLabel(
"Poids minimum avant famine (en kg) : ");
weightConsumeByDayLabel = new JLabel(
"Poids minimum de nourriture mangée (en kg/jour) : ");
maxNbDaySafeLabel = new JLabel("Durée de vie à jeûn : ");
attackPointLabel = new JLabel("Points d'attaque : ");
defendPointLabel = new JLabel("Points de défense : ");
initWeightLabel = new JLabel("Poids initial (en kg) : ");
initAgeLabel = new JLabel("Âge initial : ");
birthRateByDayLabel = new JLabel("Taux de reproduction journalier : ");
isUseHiddenDefenseLabel = new JLabel("Comportement en cas de repli : ");
isHerbivoriousLabel = new JLabel("Type de régime alimentaire : ");
edibleFoodListLabel = new JLabel("Régime alimentaire");
initBorder = nom.getBorder();
/** Lien entre les champs & les statistiques **/
actionsList.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
boolean show;
boolean enablePanel;
switch (actionsList.getSelectedIndex()) {
case 0:
show = false;
enablePanel = false;
break;
case 1:
enablePanel = true;
show = false;
clearPanel(statsPanel);
edibleFoodList.setText("");
break;
case 2:
enablePanel = false;
show = true;
break;
default:
enablePanel = true;
show = true;
break;
}
enablePanel(statsPanel, enablePanel);
showSpeciesList(show);
}
});
actionChoiceButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
switch (actionsList.getSelectedIndex()) {
case 1: // Ajout
int r_new = checkData();
if (r_new == 0) {
setSpecies();
addSpeciesOnRest();
System.out.println("L'espèce " + nom.getText()
+ " a bien été ajoutée au service Rest.");
}
break;
case 2: // Suppression
if (speciesChoice.getSelectedIndex() > 0) {
String msg = "Êtes-vous sûr de vouloir supprimer l'espèce "
+ speciesChoice.getSelectedItem()
+ " du service Rest ? \n"
+ "Cette action est irréversible.";
int action = JOptionPane.showConfirmDialog(null, msg,
"Warning", JOptionPane.OK_CANCEL_OPTION);
if (action == JOptionPane.OK_OPTION) {
String species = (String) speciesChoice
.getSelectedItem();
deleteSpeciesFromRest(species);
System.out.println("L'espèce " + nom.getText()
+ " a bien été supprimée du service Rest.");
}
} else
JOptionPane.showMessageDialog(null,
"No species selected !", "Warning",
JOptionPane.WARNING_MESSAGE);
break;
case 3: // Mise a jour en 3 temps
/**
* Si la case contenant le nom est vide, alors il faut aller
* recuperer les stats sur le serveur Si la case nom n'est
* pas vide mais ne correpsond pas a l'espece choisie, c'est
* que l'utilisateur veut faire une misque a jour d'une
* autre espece Sinon si la case contenant le nom n'est pas
* vide et qu'elle correspond au nom de l'espece choisie,
* c'est-à-dire que l'utilisateur a fait sa mise à jour Donc
* il faut la mettre sur le serveur Sinon s
**/
String spec = nom.getText();
String choice = (String) speciesChoice.getSelectedItem();
/** Choix d'espece **/
if (spec.isEmpty() && speciesChoice.getSelectedIndex() > 0) {
getSpeciesFromRest();
enablePanel(statsPanel, true);
setView();
setEdibleFoodList();
} else if (!(spec.isEmpty()) && !(choice.equals(spec))) {
/** L'utilisateur veut modifier une autre espece **/
getSpeciesFromRest();
enablePanel(statsPanel, true);
setView();
setEdibleFoodList();
} else if (speciesChoice.getSelectedIndex() == 0) {
/** L'utilisateur n'a selectionne aucune espece **/
JOptionPane.showMessageDialog(null,
"No species selected !", "Warning",
JOptionPane.WARNING_MESSAGE);
} else {
/** Mise a jour **/
int r_maj = checkData();
if (r_maj == 0) {
setSpecies();
updateSpeciesOnRest();
System.out.println("L'espèce "
+ nom.getText()
+ " a bien été mise à jour dans le service Rest.");
}
}
break;
default:
break;
}
}
});
isHerbivorious.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
edibleFoodList.setVisible(false);
edibleFoodListLabel.setVisible(false);
edibleFoodButton.setVisible(false);
}
});
isCarnivorous.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
edibleFoodList.setVisible(true);
edibleFoodListLabel.setVisible(true);
edibleFoodButton.setVisible(true);
}
});
edibleFoodButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
foodManagement();
}
});
/** Structuration & affichage **/
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 0.2;
c.fill = GridBagConstraints.HORIZONTAL;
actionsPanel.add(actionsLabel, c);
c.gridx = 1;
c.gridy = 0;
c.weightx = 0.2;
actionsPanel.add(actionsList, c);
c.gridx = 3;
c.gridy = 0;
c.weightx = 0.8;
actionsPanel.add(speciesChoice, c);
c.gridx = 5;
c.gridy = 0;
c.weightx = 0.2;
c.fill = GridBagConstraints.NONE;
actionsPanel.add(actionChoiceButton, c);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 0.2;
c.fill = GridBagConstraints.HORIZONTAL;
statsPanel.add(nomLabel, c);
c.gridx = 1;
statsPanel.add(nom, c);
c.gridx = 0;
c.gridy = 1;
statsPanel.add(typeLabel, c);
c.gridx = 1;
statsPanel.add(type, c);
c.gridx = 0;
c.gridy = 2;
c.weightx = 0.2;
statsPanel.add(descriptifLabel, c);
c.gridx = 1;
c.gridwidth = 1;
c.gridheight = 3;
statsPanel.add(descriptif, c);
c.gridx = 0;
c.gridy = 5;
c.gridwidth = 1;
c.gridheight = 1;
c.weightx = 0.2;
statsPanel.add(isHerbivoriousLabel, c);
c.gridx = 1;
statsPanel.add(dietPanel, c);
c.gridx = 0;
c.gridy = 6;
c.gridwidth = 3;
// statsPanel.add(edibleFoodPanel, c);
statsPanel.add(edibleFoodListLabel, c);
c.gridx = 1;
statsPanel.add(edibleFoodList, c);
c.gridx = 2;
statsPanel.add(edibleFoodButton, c);
c.gridx = 0;
c.gridy = 7;
c.gridwidth = 1;
statsPanel.add(smellPointLabel, c);
c.gridx = 1;
statsPanel.add(smellPoint, c);
c.gridx = 0;
c.gridy = 8;
statsPanel.add(visionPointLabel, c);
c.gridx = 1;
statsPanel.add(visionPoint, c);
c.gridx = 0;
c.gridy = 9;
statsPanel.add(movePointLabel, c);
c.gridx = 1;
statsPanel.add(movePoint, c);
c.gridx = 0;
c.gridy = 10;
statsPanel.add(maxLifetimeLabel, c);
c.gridx = 1;
statsPanel.add(maxLifetime, c);
c.gridx = 0;
c.gridy = 11;
statsPanel.add(minimumWeightToDeathLabel, c);
c.gridx = 1;
statsPanel.add(minimumWeightToDeath, c);
c.gridx = 0;
c.gridy = 12;
statsPanel.add(weightConsumeByDayLabel, c);
c.gridx = 1;
statsPanel.add(weightConsumeByDay, c);
c.gridx = 0;
c.gridy = 13;
statsPanel.add(maxNbDaySafeLabel, c);
c.gridx = 1;
statsPanel.add(maxNbDaySafe, c);
c.gridx = 0;
c.gridy = 14;
statsPanel.add(attackPointLabel, c);
c.gridx = 1;
statsPanel.add(attackPoint, c);
c.gridx = 0;
c.gridy = 15;
statsPanel.add(defendPointLabel, c);
c.gridx = 1;
statsPanel.add(defendPoint, c);
c.gridx = 0;
c.gridy = 16;
statsPanel.add(isUseHiddenDefenseLabel, c);
c.gridx = 1;
statsPanel.add(defensePanel, c);
c.gridx = 0;
c.gridy = 17;
statsPanel.add(initWeightLabel, c);
c.gridx = 1;
statsPanel.add(initWeight, c);
c.gridx = 0;
c.gridy = 18;
statsPanel.add(initAgeLabel, c);
c.gridx = 1;
statsPanel.add(initAge, c);
c.gridx = 0;
c.gridy = 19;
statsPanel.add(birthRateByDayLabel, c);
c.gridx = 1;
statsPanel.add(birthRateByDay, c);
actionsPanel.setBorder(BorderFactory.createTitledBorder("Action"));
statsScrollPane.setBorder(BorderFactory
.createTitledBorder("Caractéristiques de l'espèce"));
statsScrollPane.setViewportView(statsPanel);
enablePanel(statsPanel, false);
this.add(actionsPanel);
this.add(statsScrollPane);
}
/** Methodes **/
private void fetchSpeciesList() {
String[] list = viewModel.getSpeciesList();
speciesChoice.removeAllItems();
speciesChoice.addItem("Espèce");
for (String species : list) {
speciesList.add(species);
speciesChoice.addItem(species);
}
}
/** Recuperation des donnees a partir du service Rest **/
private void getSpeciesFromRest() {
String species = (String) speciesChoice.getSelectedItem();
speciesStats = viewModel.getRestServer().getSpecies(species);
}
private void showSpeciesList(boolean show) {
showSpeciesFlag = show;
speciesChoice.setVisible(showSpeciesFlag);
}
/** Affichage des donnees **/
private void setView() {
nom.setText(speciesStats.getNom());
type.setText(speciesStats.getType());
descriptif.setText(speciesStats.getDescriptif());
smellPoint.setText(speciesStats.getSmellPoint().toString());
visionPoint.setText(speciesStats.getVisionPoint().toString());
movePoint.setText(speciesStats.getMovePoint().toString());
maxLifetime.setText(speciesStats.getMaxLifetime().toString());
minimumWeightToDeath.setText(speciesStats.getMinimumWeightToDeath()
.toString());
weightConsumeByDay.setText(speciesStats.getWeightConsumeByDay()
.toString());
maxNbDaySafe.setText(speciesStats.getMaxNbDaySafe().toString());
attackPoint.setText(speciesStats.getAttackPoint().toString());
defendPoint.setText(speciesStats.getDefendPoint().toString());
initWeight.setText(speciesStats.getInitWeight().toString());
initAge.setText(speciesStats.getInitAge().toString());
birthRateByDay.setText(speciesStats.getBirthRateByDay().toString());
if (speciesStats.getIsHerbivorious()) {
isHerbivorious.setSelected(true);
edibleFoodList.setVisible(false);
edibleFoodListLabel.setVisible(false);
edibleFoodButton.setVisible(false);
} else {
isCarnivorous.setSelected(true);
edibleFoodList.setVisible(true);
edibleFoodListLabel.setVisible(true);
edibleFoodButton.setVisible(true);
}
if (speciesStats.getIsUseHiddenDefense())
defenseHidden.setSelected(true);
else
defenseFlee.setSelected(true);
nom.setEnabled(false);
type.setEnabled(false);
}
/** Affichage de la liste des especes comestibles **/
private void setEdibleFoodListView() {
if (isCarnivorous.isSelected()) {
String list = "";
for (String s : foodList) {
list += s + ",";
}
edibleFoodList.setText(list.substring(0, list.lastIndexOf(",")));
}
}
/** Recuperation de la liste des especes comestibles depuis le service Rest **/
private void setEdibleFoodList() {
for (String s : speciesStats.getEatableFoodList()) {
foodList.add(s);
}
setEdibleFoodListView();
}
/** Ouverture d'une nouvelle fenetre pour la gestion de la nourriture **/
private void foodManagement() {
System.out
.println("Ouverture d'une fenetre pour la gestion des especes mangees");
if (viewModel.getNameList().size() == 0)
viewModel.setNameList();
PropertyChangeListener lst = new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent e) {
if (e.getPropertyName().equals("foodList")) {
String[] fList = (String[]) e.getNewValue();
foodList.clear();
for (String f : fList) {
foodList.add(f);
}
setEdibleFoodListView();
}
}
};
@SuppressWarnings("unused")
FoodManagementDialog dialog = new FoodManagementDialog(speciesList,
viewModel, foodList, lst);
}
private void enablePanel(Container container, boolean enablePanel) {
for (Component comp : container.getComponents()) {
if (comp instanceof Container)
enablePanel((Container) comp, enablePanel);
comp.setEnabled(enablePanel);
}
}
private void clearPanel(Container container) {
for (Component comp : container.getComponents()) {
if (comp instanceof JTextComponent) {
JTextComponent field = (JTextComponent) comp;
field.setText("");
}
}
}
private int checkData() {
String emptyFields = "Attention, les valeurs suivantes doivent etre renseignées : \n";
String wrongFields = "Attention, les valeurs suivantes sont erronées : \n";
boolean ok = true; // vrai si tous les champs sont remplis
boolean wrongF = true; // vrai si tous les champs sont remplis
// correctement
if (nom.getText().isEmpty()) {
emptyFields += "- nom commun de l'espèce \n";
nom.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
}
if (type.getText().isEmpty()) {
emptyFields += "- nom scientifique de l'espèce \n";
type.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
}
try {
if (smellPoint.getText().isEmpty()) {
emptyFields += "- portée olfactive \n";
smellPoint.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(smellPoint.getText());
} catch (Exception e) {
wrongFields += "- portée olfactive \n";
smellPoint.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (visionPoint.getText().isEmpty()) {
emptyFields += "- portée visuelle \n";
visionPoint
.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(visionPoint.getText());
} catch (Exception e) {
wrongFields += "- portée visuelle \n";
visionPoint.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (movePoint.getText().isEmpty()) {
emptyFields += "- distance journalière parcourue \n";
movePoint.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(movePoint.getText());
} catch (Exception e) {
wrongFields += "- distance journalière parcourue \n";
movePoint.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (maxLifetime.getText().isEmpty()) {
emptyFields += "- durée de vie maximale \n";
maxLifetime
.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(maxLifetime.getText());
} catch (Exception e) {
wrongFields += "- durée de vie maximale \n";
maxLifetime.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (minimumWeightToDeath.getText().isEmpty()) {
emptyFields += "- poids minimum avant famine \n";
minimumWeightToDeath.setBorder(BorderFactory
.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(minimumWeightToDeath.getText());
} catch (Exception e) {
wrongFields += "- poids minimum avant famine \n";
minimumWeightToDeath.setBorder(BorderFactory
.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (weightConsumeByDay.getText().isEmpty()) {
emptyFields += "- poids minimum de nourriture mangée quotidiennement \n";
weightConsumeByDay.setBorder(BorderFactory
.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(weightConsumeByDay.getText());
} catch (Exception e) {
wrongFields += "- poids minimum de nourriture mangée quotidiennement \n";
weightConsumeByDay.setBorder(BorderFactory
.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (maxNbDaySafe.getText().isEmpty()) {
emptyFields += "- durée de vie à jeûn \n";
maxNbDaySafe.setBorder(BorderFactory
.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(maxNbDaySafe.getText());
} catch (Exception e) {
wrongFields += "- durée de vie à jeûn \n";
maxNbDaySafe.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (attackPoint.getText().isEmpty()) {
emptyFields += "- points d'attaque \n";
attackPoint
.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(attackPoint.getText());
} catch (Exception e) {
wrongFields += "- points d'attaque \n";
attackPoint.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (defendPoint.getText().isEmpty()) {
emptyFields += "- points de défense \n";
defendPoint
.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(defendPoint.getText());
} catch (Exception e) {
wrongFields += "- points de défense \n";
defendPoint.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (initWeight.getText().isEmpty()) {
emptyFields += "- poids initial \n";
initWeight.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(initWeight.getText());
} catch (Exception e) {
wrongFields += "- poids initial \n";
initWeight.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (initAge.getText().isEmpty()) {
emptyFields += "- âge initial \n";
initAge.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(initAge.getText());
} catch (Exception e) {
wrongFields += "- âge initial \n";
initAge.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
try {
if (birthRateByDay.getText().isEmpty()) {
emptyFields += "- taux de reproduction journalier\n";
birthRateByDay.setBorder(BorderFactory
.createLineBorder(Color.RED));
ok = false;
} else
Double.parseDouble(birthRateByDay.getText());
} catch (Exception e) {
wrongFields += "- taux de reproduction journalier \n";
birthRateByDay.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
wrongF = false;
}
if (dietButtons.getSelection() == null) {
emptyFields += "- type de régime alimentaire \n";
dietPanel.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
}
if (isCarnivorous.isSelected() && edibleFoodList.getText().isEmpty()) {
emptyFields += "- régime alimentaire \n";
dietPanel.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
}
if (defenseButtons.getSelection() == null) {
emptyFields += "- comportement en cas de repli \n";
defensePanel.setBorder(BorderFactory.createLineBorder(Color.RED));
ok = false;
}
String message = "";
if (!wrongF)
message += wrongFields;
else if (!ok)
message += emptyFields;
if (!message.isEmpty())
JOptionPane.showMessageDialog(null, message, "Warning",
JOptionPane.WARNING_MESSAGE);
if (ok)
return 0;
return -1; // 0 si c'est bon, sinon retourne -1
}
/** Recuperation des donnees entrees par l'utilisateur **/
private void setSpecies() {
speciesStats.setNom(nom.getText());
speciesStats.setType(type.getText());
speciesStats.setSmellPoint(Double.parseDouble(smellPoint.getText()));
speciesStats.setVisionPoint(Double.parseDouble(visionPoint.getText()));
speciesStats.setMovePoint(Double.parseDouble(movePoint.getText()));
speciesStats.setMaxLifetime(Double.parseDouble(maxLifetime.getText()));
speciesStats.setMinimumWeightToDeath(Double
.parseDouble(minimumWeightToDeath.getText()));
speciesStats.setWeightConsumeByDay(Double
.parseDouble(weightConsumeByDay.getText()));
speciesStats
.setMaxNbDaySafe(Double.parseDouble(maxNbDaySafe.getText()));
speciesStats.setAttackPoint(Double.parseDouble(attackPoint.getText()));
speciesStats.setDefendPoint(Double.parseDouble(defendPoint.getText()));
speciesStats.setInitWeight(Double.parseDouble(initWeight.getText()));
speciesStats.setInitAge(Double.parseDouble(initAge.getText()));
speciesStats.setBirthRateByDay(Double.parseDouble(birthRateByDay
.getText()));
if (isHerbivorious.isSelected())
speciesStats.setIsHerbivorious(true);
else {
speciesStats.setIsHerbivorious(false);
speciesStats.setEatableFoodList(foodList);
}
if (defenseHidden.isSelected())
speciesStats.setIsUseHiddenDefense(true);
else
speciesStats.setIsUseHiddenDefense(false);
for (Component c : statsPanel.getComponents()) {
if (c instanceof JTextArea || c instanceof JTextField)
((JComponent) c).setBorder(initBorder);
}
}
/** Modification des donnees sur le service Rest **/
private void updateSpeciesOnRest() {
viewModel.getRestServer().updateSpecies(speciesStats);
foodList.clear();
}
private void deleteSpeciesFromRest(String species) {
viewModel.getRestServer().deleteSpecies(species);
fetchSpeciesList();
speciesChoice.setSelectedIndex(0);
}
private void addSpeciesOnRest() {
viewModel.getRestServer().createSpecies(speciesStats);
fetchSpeciesList();
speciesChoice.setSelectedIndex(0);
foodList.clear();
}
}