mirror of
https://github.com/LucasVbr/OutilCuisson.git
synced 2026-05-19 10:53:18 +00:00
Charger/Sauvegarder les cuissons
Besoin de refactor le code Co-Authored-By: Alexandre3417 <81689383+Alexandre3417@users.noreply.github.com> Co-Authored-By: NonoL3Robot <75622909+NonoL3Robot@users.noreply.github.com>
This commit is contained in:
@@ -24,13 +24,6 @@ import androidx.fragment.app.FragmentManager;
|
|||||||
import androidx.fragment.app.FragmentTransaction;
|
import androidx.fragment.app.FragmentTransaction;
|
||||||
|
|
||||||
|
|
||||||
import com.google.android.material.navigation.NavigationView;
|
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.ObjectInputStream;
|
|
||||||
import java.io.ObjectOutputStream;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public class AfficherFragment extends Fragment {
|
public class AfficherFragment extends Fragment {
|
||||||
@@ -38,7 +31,7 @@ public class AfficherFragment extends Fragment {
|
|||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
*/
|
*/
|
||||||
public ListView listeCuissons;
|
public ListView listView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO
|
* TODO
|
||||||
@@ -46,14 +39,7 @@ public class AfficherFragment extends Fragment {
|
|||||||
public static ArrayAdapter<String> adapterCuissons;
|
public static ArrayAdapter<String> adapterCuissons;
|
||||||
|
|
||||||
|
|
||||||
/**
|
public AfficherFragment() {}
|
||||||
* Liste des cuissons enregistrées dans l'application
|
|
||||||
*/
|
|
||||||
public static ArrayList<String> cuissonAffichees;
|
|
||||||
|
|
||||||
|
|
||||||
public AfficherFragment() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AfficherFragment newInstance() {
|
public static AfficherFragment newInstance() {
|
||||||
return new AfficherFragment();
|
return new AfficherFragment();
|
||||||
@@ -70,25 +56,35 @@ public class AfficherFragment extends Fragment {
|
|||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.afficher_fragment, container,
|
View view = inflater.inflate(R.layout.afficher_fragment, container,
|
||||||
false);
|
false);
|
||||||
cuissonAffichees = new ArrayList<>();
|
listView = view.findViewById(R.id.listeCuisson);
|
||||||
listeCuissons = view.findViewById(R.id.listeCuisson);
|
|
||||||
adapterCuissons = new ArrayAdapter<>(getActivity(),
|
adapterCuissons = new ArrayAdapter<>(getActivity(),
|
||||||
R.layout.ligne_liste, R.id.item_cuisson, cuissonAffichees);
|
R.layout.ligne_liste, R.id.item_cuisson, new ArrayList<>());
|
||||||
listeCuissons.setAdapter(adapterCuissons);
|
listView.setAdapter(adapterCuissons);
|
||||||
registerForContextMenu(listeCuissons);
|
registerForContextMenu(listView);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
@Override
|
||||||
* Ajouter une cuisson
|
public void onResume() {
|
||||||
*
|
super.onResume();
|
||||||
* @param cuisson La cuisson à ajouter
|
afficherCuisson();
|
||||||
*/
|
}
|
||||||
public void addCuisson(Cuisson cuisson) {
|
|
||||||
adapterCuissons.add(cuisson.toString());
|
public void afficherCuisson() {
|
||||||
|
adapterCuissons.clear();
|
||||||
|
|
||||||
|
/* Ajoute l'objet cuisson */
|
||||||
|
ArrayList<Cuisson> listeCuisson = ((MainActivity)getActivity()).getListeCuisson();
|
||||||
|
|
||||||
|
/* On affiche toutes les cuissons de la liste dans la view */
|
||||||
|
for (Cuisson cuisson : listeCuisson) {
|
||||||
|
adapterCuissons.add(cuisson.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Met à jour la liste */
|
||||||
adapterCuissons.notifyDataSetChanged();
|
adapterCuissons.notifyDataSetChanged();
|
||||||
listeCuissons.requestLayout();
|
listView.requestLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,30 +108,30 @@ public class AfficherFragment extends Fragment {
|
|||||||
AdapterView.AdapterContextMenuInfo information
|
AdapterView.AdapterContextMenuInfo information
|
||||||
= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
|
= (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
|
||||||
|
|
||||||
|
int index = information.position;
|
||||||
|
|
||||||
switch (item.getItemId()) {
|
switch (item.getItemId()) {
|
||||||
case R.id.thermosContext:
|
case R.id.thermosContext:
|
||||||
afficherThermos(cuissonAffichees.get(information.position));
|
afficherThermos(index);
|
||||||
break;
|
break;
|
||||||
case R.id.modifierContext:
|
case R.id.modifierContext:
|
||||||
// modifierCuisson();
|
((MainActivity) getActivity()).editerCuisson(index);
|
||||||
break;
|
break;
|
||||||
case R.id.supprContext:
|
case R.id.supprContext:
|
||||||
cuissonAffichees.remove(information.position);
|
supprimerCuisson(index);
|
||||||
adapterCuissons.notifyDataSetChanged();
|
|
||||||
listeCuissons.requestLayout();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R.id.cancelContext:
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return super.onContextItemSelected(item);
|
return super.onContextItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void afficherThermos(String cuisson) {
|
public void afficherThermos(int index) {
|
||||||
|
/* Recupère l'objet cuisson */
|
||||||
|
Cuisson cuisson = ((MainActivity) getActivity()).getListeCuisson().get(index);
|
||||||
|
|
||||||
String content = getString(R.string.alert_content_thermos,
|
String content = getString(R.string.alert_content_thermos,
|
||||||
Cuisson.extrairePlat(cuisson),
|
cuisson.getPlat(),
|
||||||
Cuisson.extraireTemperature(cuisson),
|
cuisson.getDegree(),
|
||||||
Cuisson.thermostat(Cuisson.extraireTemperature(cuisson)));
|
cuisson.getThermostat());
|
||||||
new AlertDialog.Builder(getContext()).setTitle(R.string.alert_title_thermos)
|
new AlertDialog.Builder(getContext()).setTitle(R.string.alert_title_thermos)
|
||||||
.setMessage(content)
|
.setMessage(content)
|
||||||
.setNeutralButton(
|
.setNeutralButton(
|
||||||
@@ -144,13 +140,12 @@ public class AfficherFragment extends Fragment {
|
|||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void modifierCuisson() {
|
/**
|
||||||
// ((MainActivity)getActivity()).changeFragment(1);
|
* Supprime l'objet correspondant cuisson
|
||||||
Fragment fragment = new AjouterFragment();
|
* @param index
|
||||||
FragmentManager fragmentManager = fragment.getChildFragmentManager();
|
*/
|
||||||
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
|
public void supprimerCuisson(int index) {
|
||||||
fragmentTransaction.replace(R.id.ajouter_fragment, fragment, fragment.toString());
|
((MainActivity) getActivity()).getListeCuisson().remove(index);
|
||||||
fragmentTransaction.addToBackStack(fragment.toString());
|
afficherCuisson();
|
||||||
fragmentTransaction.commit();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,9 +20,6 @@ import android.widget.Toast;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
|
||||||
import com.example.outilcuisson.OutilCuisson;
|
|
||||||
import com.example.outilcuisson.Cuisson;
|
|
||||||
|
|
||||||
public class AjouterFragment extends Fragment {
|
public class AjouterFragment extends Fragment {
|
||||||
|
|
||||||
EditText inputPlat;
|
EditText inputPlat;
|
||||||
@@ -31,24 +28,15 @@ public class AjouterFragment extends Fragment {
|
|||||||
Button btnEffacer;
|
Button btnEffacer;
|
||||||
Button btnValider;
|
Button btnValider;
|
||||||
|
|
||||||
public AjouterFragment() {
|
public AjouterFragment() {}
|
||||||
}
|
|
||||||
|
|
||||||
public static AjouterFragment newInstance() {
|
public static AjouterFragment newInstance() {
|
||||||
return new AjouterFragment();
|
return new AjouterFragment();
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface EcouteurAjout {
|
|
||||||
void recevoirCuisson(Cuisson cuisson);
|
|
||||||
}
|
|
||||||
|
|
||||||
private EcouteurAjout activiteQuiMEcoute;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(@NonNull Context context) {
|
public void onAttach(@NonNull Context context) {
|
||||||
super.onAttach(context);
|
super.onAttach(context);
|
||||||
|
|
||||||
activiteQuiMEcoute = (EcouteurAjout) context;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -60,8 +48,8 @@ public class AjouterFragment extends Fragment {
|
|||||||
public View onCreateView(LayoutInflater inflater,
|
public View onCreateView(LayoutInflater inflater,
|
||||||
ViewGroup container,
|
ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.ajouter_fragment, container,
|
|
||||||
false);
|
View view = inflater.inflate(R.layout.ajouter_fragment, container,false);
|
||||||
|
|
||||||
/* Liste des éléments intéractifs */
|
/* Liste des éléments intéractifs */
|
||||||
inputPlat = view.findViewById(R.id.input_plat);
|
inputPlat = view.findViewById(R.id.input_plat);
|
||||||
@@ -70,71 +58,106 @@ public class AjouterFragment extends Fragment {
|
|||||||
btnEffacer = view.findViewById(R.id.btn_effacer);
|
btnEffacer = view.findViewById(R.id.btn_effacer);
|
||||||
btnValider = view.findViewById(R.id.btn_valider);
|
btnValider = view.findViewById(R.id.btn_valider);
|
||||||
|
|
||||||
/* Initialise le TimePicker en format 24h avec par défaut la valeur
|
/* Initialise le TimePicker en format 24h et met les champs par défaut */
|
||||||
0h40 */
|
|
||||||
inputDuree.setIs24HourView(true);
|
inputDuree.setIs24HourView(true);
|
||||||
inputDuree.setHour(0);
|
champsDefaut();
|
||||||
inputDuree.setMinute(40);
|
|
||||||
|
|
||||||
/*
|
/* Actions des buttons */
|
||||||
* Action de création de la nouvelle cuisson
|
btnValider.setOnClickListener(this::actionBtnValider);
|
||||||
*/
|
btnEffacer.setOnClickListener(this::actionBtnEffacer);
|
||||||
btnValider.setOnClickListener(view1 -> {
|
|
||||||
/* Récupère toutes les valeurs des champs */
|
|
||||||
String txtPlat = inputPlat.getText().toString();
|
|
||||||
String txtTemperature = inputTemperature.getText().toString();
|
|
||||||
int hDuree = inputDuree.getHour();
|
|
||||||
int mDuree = inputDuree.getMinute();
|
|
||||||
|
|
||||||
/* Convertis la température en entier */
|
|
||||||
int temperature = txtTemperature.isEmpty() ? -1 : Integer.parseInt(
|
|
||||||
txtTemperature);
|
|
||||||
|
|
||||||
/* Cas ou les valeurs ne sont pas valides */
|
|
||||||
if (!OutilCuisson.platValide(txtPlat)
|
|
||||||
|| !OutilCuisson.heureCuissonValide(hDuree)
|
|
||||||
|| !OutilCuisson.minuteCuissonValide(mDuree)
|
|
||||||
|| !OutilCuisson.temperatureValide(temperature)) {
|
|
||||||
|
|
||||||
System.out.println("Erreur");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Cas ou les valeurs sont valides : on ajoute une nouvelle
|
|
||||||
cuisson dans la liste a afficher */
|
|
||||||
try {
|
|
||||||
Cuisson cuisson = new Cuisson(txtPlat, hDuree, mDuree,
|
|
||||||
temperature);
|
|
||||||
activiteQuiMEcoute.recevoirCuisson(cuisson);
|
|
||||||
viderChamps();
|
|
||||||
String content = getString(R.string.toast_ajout_ok,
|
|
||||||
cuisson.getPlat());
|
|
||||||
Toast.makeText(getContext(), content, Toast.LENGTH_SHORT)
|
|
||||||
.show();
|
|
||||||
} catch (Exception e) {
|
|
||||||
new AlertDialog.Builder(getContext()).setTitle(
|
|
||||||
R.string.alert_title_error)
|
|
||||||
.setMessage(
|
|
||||||
R.string.alert_content_error)
|
|
||||||
.setNeutralButton(
|
|
||||||
R.string.alert_neutral_button,
|
|
||||||
null)
|
|
||||||
.show();
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Efface le contenu des champs de textes et met le TimePicker à 0h40
|
|
||||||
*/
|
|
||||||
btnEffacer.setOnClickListener(view2 -> {
|
|
||||||
viderChamps();
|
|
||||||
});
|
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void viderChamps() {
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
/* Si on est en mode edition, on préremplis le champs */
|
||||||
|
if ( ((MainActivity)getActivity()).modeEdition) {
|
||||||
|
Cuisson cuisson = ((MainActivity)getActivity()).cuissonAEditer;
|
||||||
|
|
||||||
|
System.out.println(cuisson);
|
||||||
|
|
||||||
|
/* On remplis les champs */
|
||||||
|
inputPlat.setText(cuisson.getPlat());
|
||||||
|
inputDuree.setHour(cuisson.getHeure());
|
||||||
|
inputDuree.setMinute(cuisson.getMinute());
|
||||||
|
inputTemperature.setText(Integer.toString(cuisson.getDegree()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
((MainActivity)getActivity()).modeEdition = false;
|
||||||
|
champsDefaut();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void actionBtnValider(View view) {
|
||||||
|
/* Récupère toutes les valeurs des champs */
|
||||||
|
String txtPlat = inputPlat.getText().toString();
|
||||||
|
String txtTemperature = inputTemperature.getText().toString();
|
||||||
|
int hDuree = inputDuree.getHour();
|
||||||
|
int mDuree = inputDuree.getMinute();
|
||||||
|
|
||||||
|
/* Convertis la température en entier */
|
||||||
|
int temperature = txtTemperature.isEmpty() ? -1 : Integer.parseInt(txtTemperature);
|
||||||
|
|
||||||
|
if (((MainActivity)getActivity()).modeEdition) {
|
||||||
|
Cuisson cuisson = ((MainActivity)getActivity()).cuissonAEditer;
|
||||||
|
try {
|
||||||
|
cuisson.editCuisson(txtPlat, hDuree, mDuree, temperature);
|
||||||
|
|
||||||
|
((MainActivity)getActivity()).changeFragment(0);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
/* Crée un boite de dialogue qui informe que les valeurs sont incorrectes */
|
||||||
|
new AlertDialog
|
||||||
|
.Builder(getContext())
|
||||||
|
.setTitle(R.string.alert_title_error)
|
||||||
|
.setMessage(R.string.alert_content_error)
|
||||||
|
.setNeutralButton(R.string.alert_neutral_button,null)
|
||||||
|
.show();
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* On essaye de créer une nouvelle cuisson */
|
||||||
|
try {
|
||||||
|
Cuisson cuisson = new Cuisson(txtPlat, hDuree, mDuree, temperature);
|
||||||
|
|
||||||
|
/* On ajoute la cuisson a la liste des cuisson */
|
||||||
|
((MainActivity) getActivity()).addCuisson(cuisson);
|
||||||
|
|
||||||
|
champsDefaut();
|
||||||
|
|
||||||
|
/* Message d'ajout */
|
||||||
|
String content = getString(R.string.toast_ajout_ok,
|
||||||
|
cuisson.getPlat());
|
||||||
|
Toast.makeText(getContext(), content, Toast.LENGTH_SHORT).show();
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
|
||||||
|
/* Crée un boite de dialogue qui informe que les valeurs sont incorrectes */
|
||||||
|
new AlertDialog
|
||||||
|
.Builder(getContext())
|
||||||
|
.setTitle(R.string.alert_title_error)
|
||||||
|
.setMessage(R.string.alert_content_error)
|
||||||
|
.setNeutralButton(R.string.alert_neutral_button,null)
|
||||||
|
.show();
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Efface le contenu des champs de textes et met le TimePicker à 0h40
|
||||||
|
* @param view non utilisé
|
||||||
|
*/
|
||||||
|
private void actionBtnEffacer(View view) {
|
||||||
|
((MainActivity)getActivity()).modeEdition = false;
|
||||||
|
champsDefaut();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void champsDefaut() {
|
||||||
inputPlat.setText("");
|
inputPlat.setText("");
|
||||||
inputDuree.setHour(0);
|
inputDuree.setHour(0);
|
||||||
inputDuree.setMinute(40);
|
inputDuree.setMinute(40);
|
||||||
|
|||||||
@@ -24,18 +24,25 @@ public class Cuisson implements Serializable {
|
|||||||
/**
|
/**
|
||||||
* Nombre maximum de caractères pour le nom du plat
|
* Nombre maximum de caractères pour le nom du plat
|
||||||
*/
|
*/
|
||||||
private static final int LG_MAX_PLAT = 18;
|
private static final int LG_MAX_PLAT = 20;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Le nom du plat
|
||||||
|
*/
|
||||||
private String plat;
|
private String plat;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* La durée en heure de la cuisson du plat
|
||||||
|
*/
|
||||||
private int heure;
|
private int heure;
|
||||||
private int minute;
|
private int minute;
|
||||||
private int degree;
|
private int degree;
|
||||||
|
|
||||||
public Cuisson(String plat, int heure, int minute, int degree) throws
|
public Cuisson(String plat, int heure, int minute, int degree) {
|
||||||
Exception {
|
if (!platValide(plat)
|
||||||
if (!platValide(plat) || !heureCuissonValide(heure)
|
|| !horaireValide(heure, minute)
|
||||||
|| !minuteCuissonValide(minute) || !temperatureValide(degree)) {
|
|| !temperatureValide(degree)) {
|
||||||
throw new Exception(CHAINE_DEFAUT);
|
throw new IllegalArgumentException(CHAINE_DEFAUT);
|
||||||
}
|
}
|
||||||
this.plat = plat;
|
this.plat = plat;
|
||||||
this.heure = heure;
|
this.heure = heure;
|
||||||
@@ -56,6 +63,12 @@ public class Cuisson implements Serializable {
|
|||||||
&& !nomPlat.contains("|");
|
&& !nomPlat.contains("|");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean horaireValide(int heure, int minute) {
|
||||||
|
return !(heure == 0 && minute == 0)
|
||||||
|
&& heureCuissonValide(heure)
|
||||||
|
&& minuteCuissonValide(minute);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Détermine si le nombre d'heures d'une durée de cuisson est valide
|
* Détermine si le nombre d'heures d'une durée de cuisson est valide
|
||||||
* (comprise entre 0 et 9)
|
* (comprise entre 0 et 9)
|
||||||
@@ -63,7 +76,7 @@ public class Cuisson implements Serializable {
|
|||||||
* @param heureCuisson heure à tester
|
* @param heureCuisson heure à tester
|
||||||
* @return un booléen égal à vrai ssi l'heure de la durée est valide
|
* @return un booléen égal à vrai ssi l'heure de la durée est valide
|
||||||
*/
|
*/
|
||||||
public static boolean heureCuissonValide(int heureCuisson) {
|
private static boolean heureCuissonValide(int heureCuisson) {
|
||||||
return 0 <= heureCuisson && heureCuisson <= HEURE_MAX;
|
return 0 <= heureCuisson && heureCuisson <= HEURE_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,7 +88,7 @@ public class Cuisson implements Serializable {
|
|||||||
* @return un booléen égal à vrai ssi le nombre de minutes de la durée
|
* @return un booléen égal à vrai ssi le nombre de minutes de la durée
|
||||||
* est valide
|
* est valide
|
||||||
*/
|
*/
|
||||||
public static boolean minuteCuissonValide(int minuteCuisson) {
|
private static boolean minuteCuissonValide(int minuteCuisson) {
|
||||||
return 0 <= minuteCuisson && minuteCuisson <= 59;
|
return 0 <= minuteCuisson && minuteCuisson <= 59;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +103,9 @@ public class Cuisson implements Serializable {
|
|||||||
return 0 < temperature && temperature <= TEMPERATURE_MAX;
|
return 0 < temperature && temperature <= TEMPERATURE_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public String getPlat() {
|
public String getPlat() {
|
||||||
return plat;
|
return plat;
|
||||||
}
|
}
|
||||||
@@ -106,11 +122,20 @@ public class Cuisson implements Serializable {
|
|||||||
return degree;
|
return degree;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void editCuisson(String plat, int heure, int minute, int degree) {
|
||||||
|
if (!platValide(plat) || !horaireValide(heure, minute) || !temperatureValide(degree))
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
|
||||||
|
this.plat = plat;
|
||||||
|
this.heure = heure;
|
||||||
|
this.minute = minute;
|
||||||
|
this.degree = degree;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder aRenvoyer = new StringBuilder();
|
StringBuilder aRenvoyer = new StringBuilder();
|
||||||
|
|
||||||
|
|
||||||
// on insère le nom du plat
|
// on insère le nom du plat
|
||||||
aRenvoyer.append(plat);
|
aRenvoyer.append(plat);
|
||||||
aRenvoyer.append(chaineEspace(LG_MAX_PLAT - plat.length()));
|
aRenvoyer.append(chaineEspace(LG_MAX_PLAT - plat.length()));
|
||||||
@@ -161,8 +186,7 @@ public class Cuisson implements Serializable {
|
|||||||
*/
|
*/
|
||||||
public static int extraireTemperature(String source) {
|
public static int extraireTemperature(String source) {
|
||||||
int temperature; // température extraite
|
int temperature; // température extraite
|
||||||
String
|
String chaineTemperature; // température extraite en tant que chaîne
|
||||||
chaineTemperature; // température extraite en tant que chaîne
|
|
||||||
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -184,20 +208,17 @@ public class Cuisson implements Serializable {
|
|||||||
* Renvoie le thermostat correspondant à la temperature argument
|
* Renvoie le thermostat correspondant à la temperature argument
|
||||||
* (celle-ci doit être inférieure à TEMPERATURE_MAX)
|
* (celle-ci doit être inférieure à TEMPERATURE_MAX)
|
||||||
*
|
*
|
||||||
* @param temperature température à convertir
|
|
||||||
* @return l'entier égal au thermostat ou -1 si la température est invalide
|
* @return l'entier égal au thermostat ou -1 si la température est invalide
|
||||||
*/
|
*/
|
||||||
public static int thermostat(int temperature) {
|
public int getThermostat() {
|
||||||
int aRenvoyer; // valeur du thermostat à renvoyer
|
int thermostat = -1;
|
||||||
if (temperature <= 0 || temperature > TEMPERATURE_MAX) {
|
|
||||||
aRenvoyer = -1;
|
if (temperatureValide(degree)) {
|
||||||
} else {
|
thermostat = degree / 30;
|
||||||
aRenvoyer = temperature / 30;
|
if (degree % 30 > 15) thermostat++;
|
||||||
if (temperature % 30 > 15) {
|
|
||||||
aRenvoyer++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return aRenvoyer;
|
|
||||||
|
return thermostat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -209,9 +230,7 @@ public class Cuisson implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private static String chaineEspace(int nbEspace) {
|
private static String chaineEspace(int nbEspace) {
|
||||||
StringBuilder aRenvoyer = new StringBuilder();
|
StringBuilder aRenvoyer = new StringBuilder();
|
||||||
for (int i = 1; i <= nbEspace; i++) {
|
for (int i = 1; i <= nbEspace; i++) aRenvoyer.append(" ");
|
||||||
aRenvoyer.append(" ");
|
|
||||||
}
|
|
||||||
return aRenvoyer.toString();
|
return aRenvoyer.toString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,60 +1,43 @@
|
|||||||
package com.example.outilcuisson;
|
package com.example.outilcuisson;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.AdapterView;
|
|
||||||
import android.widget.ArrayAdapter;
|
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
import androidx.fragment.app.FragmentManager;
|
||||||
import androidx.viewpager2.widget.ViewPager2;
|
import androidx.viewpager2.widget.ViewPager2;
|
||||||
|
|
||||||
import com.google.android.material.tabs.TabLayout;
|
import com.google.android.material.tabs.TabLayout;
|
||||||
import com.google.android.material.tabs.TabLayoutMediator;
|
import com.google.android.material.tabs.TabLayoutMediator;
|
||||||
|
|
||||||
import java.io.BufferedOutputStream;
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.BufferedWriter;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
import java.io.OutputStreamWriter;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.List;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity implements AjouterFragment.EcouteurAjout {
|
|
||||||
|
|
||||||
|
public class MainActivity extends AppCompatActivity {
|
||||||
/**
|
/**
|
||||||
* Le nom du fichier de sauvegarde
|
* Le nom du fichier de sauvegarde
|
||||||
*/
|
*/
|
||||||
private static final String NOM_FICHIER = "cuisson.txt";
|
private static final String NOM_FICHIER = "cuisson.txt";
|
||||||
|
|
||||||
/**
|
private ArrayList<Cuisson> listeCuisson;
|
||||||
* Tag utilisé dans les messages de log. Les messages de log sont
|
|
||||||
* affichés en cas
|
|
||||||
* de problème lors de l'accès au fichier
|
|
||||||
*/
|
|
||||||
private static final String TAG = "Cuisson";
|
|
||||||
|
|
||||||
private ViewPager2 gestionnairePagination;
|
private ViewPager2 gestionnairePagination;
|
||||||
|
|
||||||
|
public boolean modeEdition = false;
|
||||||
|
public Cuisson cuissonAEditer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
@@ -73,68 +56,83 @@ public class MainActivity extends AppCompatActivity implements AjouterFragment.E
|
|||||||
new TabLayoutMediator(gestionnaireOnglet, gestionnairePagination,
|
new TabLayoutMediator(gestionnaireOnglet, gestionnairePagination,
|
||||||
(tab, position) -> tab.setText(
|
(tab, position) -> tab.setText(
|
||||||
titreOnglet[position])).attach();
|
titreOnglet[position])).attach();
|
||||||
|
|
||||||
|
/* Crée la liste des cuissons */
|
||||||
|
listeCuisson = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onStart() {
|
protected void onResume() {
|
||||||
super.onStart();
|
super.onResume();
|
||||||
readFromFile();
|
chargerFichier();
|
||||||
System.out.println("onResume : " + AfficherFragment.cuissonAffichees);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onPause() {
|
||||||
System.out.println(
|
sauvegarderFichier();
|
||||||
"Avant write : " + AfficherFragment.cuissonAffichees);
|
super.onPause();
|
||||||
writeToFile();
|
|
||||||
System.out.println(
|
|
||||||
"Après write : " + AfficherFragment.cuissonAffichees);
|
|
||||||
super.onDestroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writeToFile() {
|
/**
|
||||||
try {
|
* Ajoute une cuisson a la liste des cuissons
|
||||||
File path = getFilesDir();
|
*
|
||||||
File file = new File(path, NOM_FICHIER);
|
* @param cuisson Objet cuisson a ajouter dans la liste
|
||||||
|
*/
|
||||||
|
public void addCuisson(Cuisson cuisson) {
|
||||||
|
if (estDansCuisson(cuisson)) throw new IllegalArgumentException("Il existe deja un plat avec ce nom");
|
||||||
|
|
||||||
if (!path.exists()) {
|
listeCuisson.add(cuisson);
|
||||||
path.mkdirs();
|
|
||||||
}
|
|
||||||
|
|
||||||
FileOutputStream fos = new FileOutputStream(file);
|
/* Test affichage du contennu de la liste des cuisson */
|
||||||
ObjectOutputStream oos = new ObjectOutputStream(fos);
|
System.out.println(Arrays.asList(listeCuisson));
|
||||||
|
}
|
||||||
|
|
||||||
oos.writeObject(AfficherFragment.cuissonAffichees);
|
public ArrayList<Cuisson> getListeCuisson() {
|
||||||
|
return listeCuisson;
|
||||||
|
}
|
||||||
|
|
||||||
oos.close();
|
private boolean estDansCuisson(Cuisson aTester) {
|
||||||
fos.close();
|
for (Cuisson cuisson : listeCuisson) {
|
||||||
System.out.println("Ecriture réalisée");
|
if (cuisson.getPlat().equals(aTester.getPlat())) return true;
|
||||||
|
|
||||||
} catch (IOException e) {
|
|
||||||
Log.e(TAG, "File write failed: " + e.toString());
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readFromFile() {
|
public void editerCuisson(int index) {
|
||||||
try {
|
changeFragment(1);
|
||||||
File path = getFilesDir();
|
modeEdition = true;
|
||||||
File file = new File(path, NOM_FICHIER);
|
cuissonAEditer = listeCuisson.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
FileInputStream fis = new FileInputStream(file);
|
|
||||||
|
private void chargerFichier() {
|
||||||
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
FileInputStream fis = openFileInput(NOM_FICHIER);
|
||||||
ObjectInputStream ois = new ObjectInputStream(fis);
|
ObjectInputStream ois = new ObjectInputStream(fis);
|
||||||
|
|
||||||
AfficherFragment.cuissonAffichees
|
listeCuisson = (ArrayList<Cuisson>) ois.readObject();
|
||||||
= (ArrayList<String>) ois.readObject();
|
|
||||||
|
|
||||||
ois.close();
|
ois.close();
|
||||||
fis.close();
|
fis.close();
|
||||||
System.out.println("Lecture réalisée");
|
|
||||||
|
|
||||||
} catch (FileNotFoundException e) {
|
} catch (IOException | ClassNotFoundException e) {
|
||||||
Log.e(TAG, "File not found: " + e.toString());
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void sauvegarderFichier() {
|
||||||
|
try {
|
||||||
|
FileOutputStream fos = openFileOutput(NOM_FICHIER, MODE_PRIVATE);
|
||||||
|
ObjectOutputStream oos = new ObjectOutputStream(fos);
|
||||||
|
|
||||||
|
oos.writeObject(listeCuisson);
|
||||||
|
|
||||||
|
oos.close();
|
||||||
|
fos.close();
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Log.e(TAG, "Can not read file: " + e.toString());
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -163,37 +161,22 @@ public class MainActivity extends AppCompatActivity implements AjouterFragment.E
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void afficherAide() {
|
public void afficherAide() {
|
||||||
new AlertDialog.Builder(this).setTitle(R.string.alert_title_aide)
|
new AlertDialog.Builder(this)
|
||||||
.setMessage(R.string.alert_content_help)
|
.setTitle(R.string.alert_title_aide)
|
||||||
.setNeutralButton(
|
.setMessage(R.string.alert_content_help)
|
||||||
R.string.alert_neutral_button, null)
|
.setNeutralButton(R.string.alert_neutral_button, null)
|
||||||
.show();
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reinitData() {
|
public void reinitData() {
|
||||||
new AlertDialog.Builder(this).setTitle(R.string.alert_title_reinit)
|
new AlertDialog.Builder(this)
|
||||||
.setMessage(R.string.alert_content_reinit)
|
.setTitle(R.string.alert_title_reinit)
|
||||||
.setNeutralButton(
|
.setMessage(R.string.alert_content_reinit)
|
||||||
R.string.alert_neutral_button, null)
|
.setNeutralButton(R.string.alert_neutral_button, null)
|
||||||
.setPositiveButton(R.string.btn_valider,
|
.setPositiveButton(R.string.btn_valider, (dialogInterface, i) -> {
|
||||||
(dialogInterface, i) -> {
|
AfficherFragment.adapterCuissons.clear();
|
||||||
AfficherFragment.adapterCuissons
|
AfficherFragment.adapterCuissons.notifyDataSetChanged();})
|
||||||
.clear();
|
.show();
|
||||||
AfficherFragment.adapterCuissons
|
|
||||||
.notifyDataSetChanged();
|
|
||||||
})
|
|
||||||
.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void recevoirCuisson(Cuisson cuisson) {
|
|
||||||
AfficherFragment fragmentAModifier
|
|
||||||
= (AfficherFragment) getSupportFragmentManager().findFragmentByTag(
|
|
||||||
"f0");
|
|
||||||
|
|
||||||
if (fragmentAModifier != null) {
|
|
||||||
fragmentAModifier.addCuisson(cuisson);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeFragment(int pos) {
|
public void changeFragment(int pos) {
|
||||||
|
|||||||
@@ -1,242 +1,242 @@
|
|||||||
/* **************************************************************************** *
|
///* **************************************************************************** *
|
||||||
* IUT de Rodez - Département Informatique *
|
// * IUT de Rodez - Département Informatique *
|
||||||
* Semestre 4 - Applications mobiles *
|
// * Semestre 4 - Applications mobiles *
|
||||||
* *
|
// * *
|
||||||
* SUJET CONTROLE MARS 2019 *
|
// * SUJET CONTROLE MARS 2019 *
|
||||||
* ANNEXES *
|
// * ANNEXES *
|
||||||
* *
|
// * *
|
||||||
* **************************************************************************** */
|
// * **************************************************************************** */
|
||||||
|
//
|
||||||
|
//
|
||||||
/*
|
///*
|
||||||
* Classe avec des méthodes outils pour gérer une chaîne de caractères contenant
|
// * Classe avec des méthodes outils pour gérer une chaîne de caractères contenant
|
||||||
* les caractéristiques d'une cuisson au four
|
// * les caractéristiques d'une cuisson au four
|
||||||
* OutilCuisson.java 12/21
|
// * OutilCuisson.java 12/21
|
||||||
*/
|
// */
|
||||||
|
//
|
||||||
/* A priori de fichier ne doit pas être modifié. Vous restez libre de le modifier si
|
///* A priori de fichier ne doit pas être modifié. Vous restez libre de le modifier si
|
||||||
besoin
|
// besoin
|
||||||
*/
|
// */
|
||||||
package com.example.outilcuisson;
|
//package com.example.outilcuisson;
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* Cette classe est une classe utilitaire qui contient des méthodes outils pour gérer
|
// * Cette classe est une classe utilitaire qui contient des méthodes outils pour gérer
|
||||||
* une chaîne de caractères contenant le descriptif d'une cuisson au four.
|
// * une chaîne de caractères contenant le descriptif d'une cuisson au four.
|
||||||
* Les caractéristiques d'une cuisson sont :
|
// * Les caractéristiques d'une cuisson sont :
|
||||||
* - le nom du plat (une chaîne non vide)
|
// * - le nom du plat (une chaîne non vide)
|
||||||
* - les heures de la durée de la cuisson (un entier entre 0 et 9)
|
// * - les heures de la durée de la cuisson (un entier entre 0 et 9)
|
||||||
* - les minutes de la durée de la cuisson (un entier entre O et 50)
|
// * - les minutes de la durée de la cuisson (un entier entre O et 50)
|
||||||
* - une température (un entier strictement positif et inférieur à TEMPERATURE_MAX)
|
// * - une température (un entier strictement positif et inférieur à TEMPERATURE_MAX)
|
||||||
*
|
// *
|
||||||
* @author INFO2 Semestre 4
|
// * @author INFO2 Semestre 4
|
||||||
*/
|
// */
|
||||||
public class OutilCuisson {
|
//public class OutilCuisson {
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Valeur de la chaîne qui représente une cuisson si l'une des caractéristiques
|
// * Valeur de la chaîne qui représente une cuisson si l'une des caractéristiques
|
||||||
* de la cuisson est invalide
|
// * de la cuisson est invalide
|
||||||
*/
|
// */
|
||||||
private static final String CHAINE_DEFAUT = "Information incohérente";
|
// private static final String CHAINE_DEFAUT = "Information incohérente";
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Température maximale pour la cuisson
|
// * Température maximale pour la cuisson
|
||||||
*/
|
// */
|
||||||
public static final int TEMPERATURE_MAX = 300;
|
// public static final int TEMPERATURE_MAX = 300;
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Valeur maximale pour le nombre d'heures d'une cuisson
|
// * Valeur maximale pour le nombre d'heures d'une cuisson
|
||||||
*/
|
// */
|
||||||
public static final int HEURE_MAX = 9;
|
// public static final int HEURE_MAX = 9;
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Nombre maximum de caractères pour le nom du plat
|
// * Nombre maximum de caractères pour le nom du plat
|
||||||
*/
|
// */
|
||||||
private static final int LG_MAX_PLAT = 18;
|
// private static final int LG_MAX_PLAT = 18;
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Détermine si un nom de plat est valide (non vide, au plus 20 caractères et ne
|
// * Détermine si un nom de plat est valide (non vide, au plus 20 caractères et ne
|
||||||
* contient pas le caractère '|')
|
// * contient pas le caractère '|')
|
||||||
*
|
// *
|
||||||
* @param nomPlat chaîne à testesr
|
// * @param nomPlat chaîne à testesr
|
||||||
* @return un booléen égal à vrai ssi la chaîne à tester est valide
|
// * @return un booléen égal à vrai ssi la chaîne à tester est valide
|
||||||
*/
|
// */
|
||||||
public static boolean platValide(String nomPlat) {
|
// public static boolean platValide(String nomPlat) {
|
||||||
return nomPlat.length() > 0 && nomPlat.length() <= LG_MAX_PLAT
|
// return nomPlat.length() > 0 && nomPlat.length() <= LG_MAX_PLAT
|
||||||
&& !nomPlat.contains("|");
|
// && !nomPlat.contains("|");
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Détermine si le nombre d'heures d'une durée de cuisson est valide
|
// * Détermine si le nombre d'heures d'une durée de cuisson est valide
|
||||||
* (comprise entre 0 et 9)
|
// * (comprise entre 0 et 9)
|
||||||
*
|
// *
|
||||||
* @param heureCuisson heure à tester
|
// * @param heureCuisson heure à tester
|
||||||
* @return un booléen égal à vrai ssi l'heure de la durée est valide
|
// * @return un booléen égal à vrai ssi l'heure de la durée est valide
|
||||||
*/
|
// */
|
||||||
public static boolean heureCuissonValide(int heureCuisson) {
|
// public static boolean heureCuissonValide(int heureCuisson) {
|
||||||
return 0 <= heureCuisson && heureCuisson <= HEURE_MAX;
|
// return 0 <= heureCuisson && heureCuisson <= HEURE_MAX;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Détermine si le nombre de minutes d'une durée de cuisson est valide
|
// * Détermine si le nombre de minutes d'une durée de cuisson est valide
|
||||||
* (comprise entre 0 et 59)
|
// * (comprise entre 0 et 59)
|
||||||
*
|
// *
|
||||||
* @param minuteCuisson minute à tester
|
// * @param minuteCuisson minute à tester
|
||||||
* @return un booléen égal à vrai ssi le nombre de minutes de la durée est valide
|
// * @return un booléen égal à vrai ssi le nombre de minutes de la durée est valide
|
||||||
*/
|
// */
|
||||||
public static boolean minuteCuissonValide(int minuteCuisson) {
|
// public static boolean minuteCuissonValide(int minuteCuisson) {
|
||||||
return 0 <= minuteCuisson && minuteCuisson <= 59;
|
// return 0 <= minuteCuisson && minuteCuisson <= 59;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Détermine si une température de cuisson est valide
|
// * Détermine si une température de cuisson est valide
|
||||||
* (strictement positive et inférieure ou égale à TEMPERATURE_MAX)
|
// * (strictement positive et inférieure ou égale à TEMPERATURE_MAX)
|
||||||
*
|
// *
|
||||||
* @param temperature temperature à tester
|
// * @param temperature temperature à tester
|
||||||
* @return un booléen égal à vrai ssi la température est valide
|
// * @return un booléen égal à vrai ssi la température est valide
|
||||||
*/
|
// */
|
||||||
public static boolean temperatureValide(int temperature) {
|
// public static boolean temperatureValide(int temperature) {
|
||||||
return 0 < temperature && temperature <= TEMPERATURE_MAX;
|
// return 0 < temperature && temperature <= TEMPERATURE_MAX;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Concatène les arguments dans une chaîne de caractères. Celle-ci aura le format
|
// * Concatène les arguments dans une chaîne de caractères. Celle-ci aura le format
|
||||||
* suivant :
|
// * suivant :
|
||||||
* nom du plat | temps de cuisson en heures et minutes | température
|
// * nom du plat | temps de cuisson en heures et minutes | température
|
||||||
* Si l'un des arguments est invalide, c'est la constante CHAINE_DEFAUT qui
|
// * Si l'un des arguments est invalide, c'est la constante CHAINE_DEFAUT qui
|
||||||
* est renvoyée
|
// * est renvoyée
|
||||||
*
|
// *
|
||||||
* @param nomPlat nom du plat. Doit être non vide, avec au plus
|
// * @param nomPlat nom du plat. Doit être non vide, avec au plus
|
||||||
* LG_MAX_PLAT caractères, ne doit pas contenir |
|
// * LG_MAX_PLAT caractères, ne doit pas contenir |
|
||||||
* @param heureCuisson nombre d'heures de la durée de la cuisson
|
// * @param heureCuisson nombre d'heures de la durée de la cuisson
|
||||||
* doit être compris entre 0 et 9
|
// * doit être compris entre 0 et 9
|
||||||
* @param minuteCuisson nombre de minutes de la durée de la cuisson
|
// * @param minuteCuisson nombre de minutes de la durée de la cuisson
|
||||||
* doit être compris entre 0 et 59
|
// * doit être compris entre 0 et 59
|
||||||
* @param temperature température de la cuisson. Doit être comprise entre
|
// * @param temperature température de la cuisson. Doit être comprise entre
|
||||||
* 1 et TEMPERATURE_MAX
|
// * 1 et TEMPERATURE_MAX
|
||||||
* @return une chaîne contenant le descriptif de la cuisson si les paramètres
|
// * @return une chaîne contenant le descriptif de la cuisson si les paramètres
|
||||||
* sont valides. Sinon la chaîne CHAINE_DEFAUT
|
// * sont valides. Sinon la chaîne CHAINE_DEFAUT
|
||||||
*/
|
// */
|
||||||
public static String transformeEnChaine(String nomPlat, int heureCuisson,
|
// public static String transformeEnChaine(String nomPlat, int heureCuisson,
|
||||||
int minuteCuisson, int temperature) {
|
// int minuteCuisson, int temperature) {
|
||||||
StringBuilder aRenvoyer = new StringBuilder();
|
// StringBuilder aRenvoyer = new StringBuilder();
|
||||||
|
//
|
||||||
if (platValide(nomPlat) && heureCuissonValide(heureCuisson)
|
// if (platValide(nomPlat) && heureCuissonValide(heureCuisson)
|
||||||
&& minuteCuissonValide(minuteCuisson) && temperatureValide(temperature)) {
|
// && minuteCuissonValide(minuteCuisson) && temperatureValide(temperature)) {
|
||||||
|
//
|
||||||
// on insère le nom du plat
|
// // on insère le nom du plat
|
||||||
aRenvoyer.append(nomPlat);
|
// aRenvoyer.append(nomPlat);
|
||||||
aRenvoyer.append(chaineEspace(LG_MAX_PLAT - nomPlat.length()));
|
// aRenvoyer.append(chaineEspace(LG_MAX_PLAT - nomPlat.length()));
|
||||||
aRenvoyer.append(" | ");
|
// aRenvoyer.append(" | ");
|
||||||
|
//
|
||||||
// on insère la durée
|
// // on insère la durée
|
||||||
aRenvoyer.append(String.valueOf(heureCuisson));
|
// aRenvoyer.append(String.valueOf(heureCuisson));
|
||||||
aRenvoyer.append(" h ");
|
// aRenvoyer.append(" h ");
|
||||||
if (minuteCuisson < 10) {
|
// if (minuteCuisson < 10) {
|
||||||
aRenvoyer.append("0");
|
// aRenvoyer.append("0");
|
||||||
}
|
// }
|
||||||
aRenvoyer.append(String.valueOf(minuteCuisson));
|
// aRenvoyer.append(String.valueOf(minuteCuisson));
|
||||||
aRenvoyer.append(" | ");
|
// aRenvoyer.append(" | ");
|
||||||
|
//
|
||||||
// on insère la température
|
// // on insère la température
|
||||||
aRenvoyer.append(String.format("%3d", temperature));
|
// aRenvoyer.append(String.format("%3d", temperature));
|
||||||
} else {
|
// } else {
|
||||||
|
//
|
||||||
// l'un des arguments est invalide
|
// // l'un des arguments est invalide
|
||||||
aRenvoyer.append(CHAINE_DEFAUT);
|
// aRenvoyer.append(CHAINE_DEFAUT);
|
||||||
}
|
// }
|
||||||
return aRenvoyer.toString();
|
// return aRenvoyer.toString();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Extrait d'une chaîne le nom du plat. On suppose que la chaîne est correctement
|
// * Extrait d'une chaîne le nom du plat. On suppose que la chaîne est correctement
|
||||||
* formatée dans le format de la description d'une cuisson gérée par cette classe
|
// * formatée dans le format de la description d'une cuisson gérée par cette classe
|
||||||
* (les 20 premiers caractères de la chaîne sont extraits)
|
// * (les 20 premiers caractères de la chaîne sont extraits)
|
||||||
*
|
// *
|
||||||
* @param source chaîne source de l'extraction
|
// * @param source chaîne source de l'extraction
|
||||||
* @return une chaîne contenant le nom du plat ou CHAINE_DEFAUT si la chaîne
|
// * @return une chaîne contenant le nom du plat ou CHAINE_DEFAUT si la chaîne
|
||||||
* argument est trop courte
|
// * argument est trop courte
|
||||||
*/
|
// */
|
||||||
public static String extrairePlat(String source) {
|
// public static String extrairePlat(String source) {
|
||||||
if (source.length() < LG_MAX_PLAT) {
|
// if (source.length() < LG_MAX_PLAT) {
|
||||||
return CHAINE_DEFAUT;
|
// return CHAINE_DEFAUT;
|
||||||
} else {
|
// } else {
|
||||||
return source.substring(0, LG_MAX_PLAT);
|
// return source.substring(0, LG_MAX_PLAT);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Extrait d'une chaîne la température de cuisson. On suppose que la chaîne
|
// * Extrait d'une chaîne la température de cuisson. On suppose que la chaîne
|
||||||
* est correctement formatée dans le format de la description d'une cuisson
|
// * est correctement formatée dans le format de la description d'une cuisson
|
||||||
* gérée par cette classe (la température est présente sur les 3 derniers
|
// * gérée par cette classe (la température est présente sur les 3 derniers
|
||||||
* caractères de la chaîne)
|
// * caractères de la chaîne)
|
||||||
*
|
// *
|
||||||
* @param source chaîne source de l'extraction
|
// * @param source chaîne source de l'extraction
|
||||||
* @return un entier égal à la température extraite ou bien -1 si un
|
// * @return un entier égal à la température extraite ou bien -1 si un
|
||||||
* problème inattendu a été rencontré avec le format de la chaîne
|
// * problème inattendu a été rencontré avec le format de la chaîne
|
||||||
*/
|
// */
|
||||||
public static int extraireTemperature(String source) {
|
// public static int extraireTemperature(String source) {
|
||||||
int temperature; // température extraite
|
// int temperature; // température extraite
|
||||||
String chaineTemperature; // température extraite en tant que chaîne
|
// String chaineTemperature; // température extraite en tant que chaîne
|
||||||
|
//
|
||||||
|
//
|
||||||
try {
|
// try {
|
||||||
chaineTemperature = source.substring(source.length() - 3, source.length());
|
// chaineTemperature = source.substring(source.length() - 3, source.length());
|
||||||
temperature = Integer.parseInt(chaineTemperature);
|
// temperature = Integer.parseInt(chaineTemperature);
|
||||||
} catch (NumberFormatException | IndexOutOfBoundsException erreur) {
|
// } catch (NumberFormatException | IndexOutOfBoundsException erreur) {
|
||||||
|
//
|
||||||
/*
|
// /*
|
||||||
* erreur lors de l'extraction des 3 derniers caractère
|
// * erreur lors de l'extraction des 3 derniers caractère
|
||||||
* ou lors de la transformation en entier
|
// * ou lors de la transformation en entier
|
||||||
*/
|
// */
|
||||||
temperature = -1;
|
// temperature = -1;
|
||||||
}
|
// }
|
||||||
return temperature;
|
// return temperature;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Renvoie le thermostat correspondant à la temperature arguemnt
|
// * Renvoie le thermostat correspondant à la temperature arguemnt
|
||||||
* (celle-ci doit être inférieure à TEMPERATURE_MAX)
|
// * (celle-ci doit être inférieure à TEMPERATURE_MAX)
|
||||||
*
|
// *
|
||||||
* @param temperature température à convertir
|
// * @param temperature température à convertir
|
||||||
* @return l'entier égal au thermostat ou -1 si la température est invalide
|
// * @return l'entier égal au thermostat ou -1 si la température est invalide
|
||||||
*/
|
// */
|
||||||
public static int thermostat(int temperature) {
|
// public static int thermostat(int temperature) {
|
||||||
int aRenvoyer; // valeur du thermostat à renvoyer
|
// int aRenvoyer; // valeur du thermostat à renvoyer
|
||||||
if (temperature <= 0 || temperature > TEMPERATURE_MAX) {
|
// if (temperature <= 0 || temperature > TEMPERATURE_MAX) {
|
||||||
aRenvoyer = -1;
|
// aRenvoyer = -1;
|
||||||
} else {
|
// } else {
|
||||||
aRenvoyer = temperature / 30;
|
// aRenvoyer = temperature / 30;
|
||||||
if (temperature % 30 > 15) {
|
// if (temperature % 30 > 15) {
|
||||||
aRenvoyer++;
|
// aRenvoyer++;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return aRenvoyer;
|
// return aRenvoyer;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
/**
|
// /**
|
||||||
* Renvoie une chaîne constituée d'espaces. Le nombre d'espaces est indiqué
|
// * Renvoie une chaîne constituée d'espaces. Le nombre d'espaces est indiqué
|
||||||
* par le paramètre.
|
// * par le paramètre.
|
||||||
*
|
// *
|
||||||
* @param nbEspace nombre d'espaces à placer dans la chaîne
|
// * @param nbEspace nombre d'espaces à placer dans la chaîne
|
||||||
* @return une chaîne constituée du caractère espace
|
// * @return une chaîne constituée du caractère espace
|
||||||
*/
|
// */
|
||||||
private static String chaineEspace(int nbEspace) {
|
// private static String chaineEspace(int nbEspace) {
|
||||||
StringBuilder aRenvoyer = new StringBuilder();
|
// StringBuilder aRenvoyer = new StringBuilder();
|
||||||
for (int i = 1; i <= nbEspace; i++) {
|
// for (int i = 1; i <= nbEspace; i++) {
|
||||||
aRenvoyer.append(" ");
|
// aRenvoyer.append(" ");
|
||||||
}
|
// }
|
||||||
return aRenvoyer.toString();
|
// return aRenvoyer.toString();
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
}
|
//}
|
||||||
Reference in New Issue
Block a user