SAE21_2022/PreEcriture.java

101 lines
3.9 KiB
Java
Raw Normal View History

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;
public class PreEcriture {
private int cetteTaille;
private String path;
private int ceCompteur;
private int octetRemaining;
private boolean[][] cetteGrille;
private Cellules[][] grilleCellules;
private int[] resultat;
private String[] tabTemp;
private byte[] resultatByte;
private byte[] resultatOffsetByte;
public PreEcriture(boolean[][] uneGrille, Cellules[][] uneGrilleCell , int uneTaille){
this.cetteTaille = uneTaille;
this.cetteGrille = uneGrille;
this.grilleCellules = uneGrilleCell;
/* ======================================== Confection du header ============================================== */
this.resultat = new int[5];
this.resultatByte = new byte[5];
int[] tabEntrortie = new int[4];
tabEntrortie=outils.ParcoursCell(this.grilleCellules, this.cetteTaille);
this.resultat[0]=this.cetteTaille;
this.resultat[1]=tabEntrortie[0];
this.resultat[2]=tabEntrortie[1];
this.resultat[3]=tabEntrortie[2];
this.resultat[4]=tabEntrortie[3];
this.resultatByte = outils.ConvertToByte(this.resultat);
/* ====================================== Confection de l'Offset ============================================ */
if((this.cetteTaille*this.cetteTaille)%8 == 0){ //définit les tailles s'il y a besoin d'un octet en plus ou pas
this.tabTemp = new String[(this.cetteTaille*this.cetteTaille)/8];
this.ceCompteur = (this.cetteTaille*this.cetteTaille)/8;
this.octetRemaining = this.cetteTaille*this.cetteTaille;
} else if((this.cetteTaille*this.cetteTaille)%8 > 0){
this.tabTemp = new String[(this.cetteTaille*this.cetteTaille)/8+1];
this.ceCompteur = ((this.cetteTaille*this.cetteTaille)/8)+1;
this.octetRemaining = (this.cetteTaille*this.cetteTaille)+(this.cetteTaille*this.cetteTaille)%8;
}
String tempString = "";
boolean[] tabHorizontal = new boolean[this.cetteTaille*this.cetteTaille];
tabHorizontal = outils.PutToVertical(this.cetteGrille, this.cetteTaille);
outils.printBool(tabHorizontal, this.cetteTaille);
// Transformation du tableau de boolean en un tableau de chaine de String qui stock des nombre sous formes de byte
int compteur1=0;
for(boolean cetteIteration : tabHorizontal){
if(cetteIteration==true){
tempString = tempString + "0";
} else if(cetteIteration==false){
tempString = tempString + "1";
}
if(tempString.length()==8 || this.octetRemaining<8){
tabTemp[compteur1] = tempString;
tempString="";
compteur1++;
this.octetRemaining = this.octetRemaining - 8;
}
}
this.path = this.CreateFichier();
Ecriture stylo = new Ecriture(this.resultatByte, this.tabTemp, this.path);
}
public String CreateFichier() {
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("Fichiers .lab", "lab");
chooser.setFileFilter(filter);
int returnVal = chooser.showSaveDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
String nomFichier = chooser.getSelectedFile().getName();
if(!nomFichier.endsWith(".lab")) {
nomFichier += ".lab";
}
String contenu = "Contenu du fichier .lab";
File fichier = chooser.getSelectedFile();
return fichier.getAbsolutePath();
}
return null;
}
}