Skip to content

Commit

Permalink
Merge branch 'master' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
cpc6128 authored Apr 10, 2021
2 parents b8960bd + 5e21bb7 commit bdc1231
Show file tree
Hide file tree
Showing 31 changed files with 1,420 additions and 152 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -124,20 +124,30 @@ private static void greffonsInternesAutres() throws Exception {
LinotteFacade.creationPrototype(null, new Metronome(), "métronome");
LinotteFacade.creationPrototype(null, new Pipette(), "pipette");
LinotteFacade.creationPrototype(null, new Police(), "police");
LinotteFacade.creationPrototype(null, new Queue(), "queue");
try {
LinotteFacade.creationPrototype(null, new GreffonRobot(), "robot");
} catch (Exception e1) {
//e1.printStackTrace();
e1.printStackTrace();
}
LinotteFacade.creationPrototype(null, new Rss(), "rss");
LinotteFacade.creationPrototype(null, new SQL(), "sql");
LinotteFacade.creationPrototype(null, new Tweak(), "tweak");
LinotteFacade.creationPrototype(null, new Webonotte(), "webonotte");
LinotteFacade.creationPrototype(null, new RepertoireTube(), "répertoire");
LinotteFacade.creationPrototype(null, new PressePapier(), "pressepapier");
LinotteFacade.creationPrototype(null, new Horodatage(), "horodatage");
LinotteFacade.creationPrototype(null, new FichierTube(), "fichier");
LinotteFacade.creationPrototype(null, new PileTube(), "pile");
LinotteFacade.creationPrototype(null, new Conduit(), "conduit");


{
Map<String, Attribut> attributs = new HashMap<String, Attribut>();
attributs.put("adresse", new Attribut(TEXTE, ""));
attributs.put("état", new Attribut(NOMBRE, "0"));
attributs.put("port", new Attribut(NOMBRE, "8777"));
LinotteFacade.creationPrototype(attributs, new PontTube(), "pont");
}
{
Map<String, Attribut> attributs = new HashMap<String, Attribut>();
attributs.put("texte", new Attribut(TEXTE, "http://www.codevallee.fr"));
Expand Down Expand Up @@ -187,7 +197,7 @@ private static void greffonsInternesAutres() throws Exception {
LinotteFacade.creationPrototype(attributs, new Notification(), "notification");
} catch (Exception e) {
// Bloc sous une console Linux
//e.printStackTrace();
e.printStackTrace();
}
}
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,264 @@
package org.linotte.greffons.impl;

import org.linotte.greffons.externe.Tube;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Scanner;

/**
*
* Tube fichier
*
* @author Mounès Ronan
*
*/
public class FichierTube extends Tube {

private static final String RETOUR_CHARIOT = System.getProperty("line.separator");

private Scanner in = null;

private FileWriter out = null;

private static final String ETAT_LECTURE = "lecture";

private static final String ETAT_ECRITURE_AJOUT = "ajout";

private static final String ETAT_ECRITURE_ECRASEMENT = "écrasement";

public static final void main(String[] params) {
// Exemples d'utilisation

try {
// Création du fichier vide avec 4 acteurs
FichierTube fichierTube = new FichierTube();
fichierTube.ouvrir(ETAT_ECRITURE_ECRASEMENT, "c:/temp/tube.txt");
Acteur acteur1 = new Acteur(ROLE.TEXTE, "acteur1", "valeur 1");
fichierTube.charger(acteur1);
Acteur acteur2 = new Acteur(ROLE.TEXTE, "acteur2", "valeur 2");
fichierTube.charger(acteur2);
fichierTube.fermer();
} catch (GreffonException e) {
System.err.println(e.getMessage());
}

try {
// Création du fichier vide avec 4 acteurs
FichierTube fichierTube = new FichierTube();
fichierTube.ouvrir(ETAT_ECRITURE_AJOUT, "c:/temp/tube.txt");
Acteur acteur3 = new Acteur(ROLE.TEXTE, "acteur2", "valeur 3");
Acteur acteur4 = new Acteur(ROLE.TEXTE, "acteur2", "valeur 4");
Casier casier = new Casier(ROLE.TEXTE);
casier.add(acteur3);
casier.add(acteur4);
fichierTube.charger(casier);
fichierTube.fermer();
} catch (GreffonException e) {
System.err.println(e.getMessage());
}

try {
// Cas fichier avec 4 acteurs :
FichierTube fichierTube = new FichierTube();
fichierTube.ouvrir(ETAT_LECTURE, "c:/temp/tube.txt");
System.out.println(fichierTube.decharger(new Acteur(ROLE.TEXTE, "acteur1", null)));
System.out.println(fichierTube.decharger(new Acteur(ROLE.TEXTE, "acteur2", null)));
System.out.println(fichierTube.decharger(new Acteur(ROLE.TEXTE, "acteur3", null)));
System.out.println(fichierTube.decharger(new Acteur(ROLE.TEXTE, "acteur4", null)));
fichierTube.fermer();
} catch (GreffonException e) {
System.err.println(e.getMessage());
}

try {
// Cas fichier avec 1 casier d'acteurs :
FichierTube fichierTube = new FichierTube();
fichierTube.ouvrir(ETAT_LECTURE, "c:/temp/tube.txt");
Casier casier = new Casier(ROLE.TEXTE);
casier.add(new Acteur(ROLE.TEXTE, null, null));
System.out.println(fichierTube.decharger(casier));
fichierTube.fermer();
} catch (GreffonException e) {
System.err.println(e.getMessage());
}

try {
// Cas fichier avec 1 casier d'espèce :
FichierTube fichierTube = new FichierTube();
fichierTube.ouvrir(ETAT_LECTURE, "c:/temp/tube.txt");
Casier casier = new Casier(ROLE.TEXTE);
Espece espece = new Espece("test");
espece.add(new Acteur(ROLE.TEXTE, "attribut 1", null));
espece.add(new Acteur(ROLE.TEXTE, "attribut 2", null));
casier.add(espece);
System.out.println(fichierTube.decharger(casier));
fichierTube.fermer();
} catch (GreffonException e) {
System.err.println(e.getMessage());
}

}

public FichierTube() {
}

@Override
public boolean ouvrir(String état, String paramètres) throws GreffonException {
RessourceManager ressourceManager = getRessourceManager();
String fichier;
if (ressourceManager != null)
fichier = ressourceManager.analyserChemin(paramètres);
else
fichier = paramètres;

try {
if (ETAT_LECTURE.equals(état)) {
in = new Scanner(new FileReader(fichier));
out = null;
} else if (ETAT_ECRITURE_AJOUT.equals(état)) {
creationRepertoire(fichier);
out = new FileWriter(fichier, true);
in = null;
} else if (ETAT_ECRITURE_ECRASEMENT.equals(état)) {
creationRepertoire(fichier);
out = new FileWriter(fichier, false);
in = null;
} else {
throw new GreffonException(
"l'état doit être écriture '" + ETAT_ECRITURE_AJOUT + "', '" + ETAT_ECRITURE_ECRASEMENT + "' ou '" + ETAT_LECTURE + "' !");
}
} catch (Exception e) {
throw new GreffonException("Impossible d'ouvrir et de créer ce fichier (" + e.getMessage() + ") : " + fichier);
}
return false;
}

private void creationRepertoire(String fichier) {
try {
new File(fichier).getParentFile().mkdirs();
} catch (Exception e) {
}
}

@Override
public ObjetLinotte decharger(ObjetLinotte structure) throws GreffonException {
try {
if (in == null) {
throw new GreffonException("Le tube doit être ouvert en lecture avant d'être déchargé !");
}
if (structure instanceof Acteur) {
Acteur acteur = (Acteur) structure;
if (!in.hasNext()) {
throw new GreffonException("Le tube est vide !");
}
String valeur = in.nextLine();
if (acteur.getRole() == ROLE.NOMBRE) {
try {
acteur.setValeur(new BigDecimal(valeur.trim()));
} catch (Exception e) {
throw new GreffonException("Impossible de charger le nombre !");
}
} else
acteur.setValeur(valeur);
return acteur;
} else if (structure instanceof Casier) {
Casier casier = (Casier) structure;
Casier retour = new Casier(null);
for (ObjetLinotte element : casier) {
if (element instanceof Acteur) {
while (in.hasNext()) {
retour.add(decharger(element.clone()));
}
} else if (element instanceof Espece) {
while (in.hasNext()) {
retour.add(decharger(element.clone()));
}
} else {
throw new GreffonException("Structure incorrecte !");
}
}
return retour;
} else if (structure instanceof Espece) {
Espece espece = (Espece) structure;
for (Acteur acteur : espece) {
decharger(acteur);
}
return espece;
} else {
throw new GreffonException("Structure incorrecte !");
}
} catch (Exception e) {
throw new GreffonException("Le tube a recontré un problème : " + e.getMessage());
}
}

@Override
public ObjetLinotte decharger(String paramètres, ObjetLinotte structure) throws GreffonException {
return decharger(structure);
}

@Override
public boolean charger(ObjetLinotte structure) throws GreffonException {
try {
if (out == null) {
throw new GreffonException("Le tube doit être ouvert en écriture pour être chargé !");
}
if (structure instanceof Acteur) {
Acteur acteur = (Acteur) structure;
try {
out.write(String.valueOf(acteur.getValeur()));
out.write(RETOUR_CHARIOT);
} catch (IOException e) {
return false;
}
return true;
} else if (structure instanceof Casier) {
Casier casier = (Casier) structure;
for (ObjetLinotte objet : casier) {
charger(objet);
}
} else if (structure instanceof Espece) {
Espece espece = (Espece) structure;
for (ObjetLinotte objet : espece) {
charger(objet);
}
} else {
throw new GreffonException("Structure incorrecte !");
}
return false;
} catch (Exception e) {
throw new GreffonException("Le tube a recontré un problème : " + e.getMessage());
}
}

@Override
public boolean charger(String paramètres, ObjetLinotte valeurs) throws GreffonException {
return charger(valeurs);
}

@Override
public boolean fermer() throws GreffonException {
if (in != null) {
in.close();
return true;
} else if (out != null) {
try {
out.close();
} catch (IOException e) {
}
return true;
} else {
throw new GreffonException("Le tube doit être ouvert avant d'être fermé !");
}
}

@Override
public boolean configurer(String paramètres) throws GreffonException {
return true;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,10 @@ public boolean fireProperty(String attribut) {
return false;
}

@Override
public void modifier(String value, String attribute, String id) throws GreffonException {
}

@Slot(nom = "négatif")
public boolean negatif() throws GreffonException {
chargerImage(getAttributeAsString("image"));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.linotte.greffons.impl;

import org.linotte.greffons.externe.Tube;

import java.util.EmptyStackException;
import java.util.Stack;

public class PileTube extends Tube {

Stack<ObjetLinotte> pile = new Stack<ObjetLinotte>();

private static final String ERREUR = "Ce verbe ne s'utilise pas avec une 'pile' !";

@Override
public boolean charger(ObjetLinotte valeurs) throws GreffonException {
return pile.push(valeurs) == null;
}

@Override
public boolean charger(String paramètres, ObjetLinotte valeurs) throws GreffonException {
throw new GreffonException(ERREUR);
}

@Override
public boolean configurer(String paramètres) throws GreffonException {
throw new GreffonException(ERREUR);
}

@Override
public ObjetLinotte decharger(ObjetLinotte structure) throws GreffonException {
try {
return pile.pop();
} catch (EmptyStackException e) {
return null;
}
}

@Override
public ObjetLinotte decharger(String paramètres, ObjetLinotte structure) throws GreffonException {
throw new GreffonException(ERREUR);
}

@Override
public boolean fermer() throws GreffonException {
throw new GreffonException(ERREUR);
}

@Override
public boolean ouvrir(String état, String paramètres) throws GreffonException {
throw new GreffonException(ERREUR);
}

}
Loading

0 comments on commit bdc1231

Please sign in to comment.