diff --git a/src/main/java/xyz/ineanto/qodos/controller/MainController.java b/src/main/java/xyz/ineanto/qodos/controller/MainController.java index 5ef18ab..04c9078 100644 --- a/src/main/java/xyz/ineanto/qodos/controller/MainController.java +++ b/src/main/java/xyz/ineanto/qodos/controller/MainController.java @@ -6,12 +6,16 @@ import javafx.scene.layout.AnchorPane; import javafx.stage.FileChooser; import org.apache.commons.io.FilenameUtils; import xyz.ineanto.qodos.alert.AlertDisplay; +import xyz.ineanto.qodos.generator.QRCodeUtils; +import xyz.ineanto.qodos.generator.QRGenerator; import xyz.ineanto.qodos.generator.QRURLGenerator; import xyz.ineanto.qodos.generator.QRVCardGenerator; import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.util.List; public class MainController { // NODES @@ -75,9 +79,9 @@ public class MainController { @FXML public void initialize() { exitButton.setOnAction(_ -> System.exit(0)); - - aboutButton.setOnAction(_ -> AlertDisplay.info("Qodos", "Générateur de QR Code (URL, VCard)\n" + - "Version 0.0.2")); + aboutButton.setOnAction(_ -> AlertDisplay.info("Qodos", + "Générateur de QR Code (URL, VCard, Carte Bleue)\n" + + "Version 0.1.0")); genderWomenButton.setToggleGroup(toggleGroup); genderMenButton.setToggleGroup(toggleGroup); @@ -93,11 +97,12 @@ public class MainController { @FXML protected void onGenerateButtonClicked() { try { + QRGenerator generator; + if (tabPane.getSelectionModel().getSelectedIndex() == 0) { - new QRURLGenerator(urlTextField.getText(), logoFile == null ? null : ImageIO.read(logoFile)) - .generate(rootPane); + generator = new QRURLGenerator(urlTextField.getText(), logoFile == null ? null : ImageIO.read(logoFile)); } else { - new QRVCardGenerator( + generator = new QRVCardGenerator( toggleGroup.getToggles().indexOf(toggleGroup.getSelectedToggle()), familyField.getText(), nameField.getText(), @@ -106,8 +111,32 @@ public class MainController { addressField.getText().isBlank() ? null : addressField.getText(), mailField.getText().isBlank() ? null : mailField.getText(), logoFile == null ? null : ImageIO.read(logoFile) - ).generate(rootPane); + ); } + + final BufferedImage image = generator.generate(rootPane); + if (image == null) { return; } + + try { + final FileChooser chooser = new FileChooser(); + chooser.setTitle("Sélectionner la destination..."); + chooser.setInitialFileName("qr"); + chooser.setSelectedExtensionFilter( + new FileChooser.ExtensionFilter("Image Files", + List.of("*.png", "*.jpeg", "*.jpg") + ) + ); + final File file = chooser.showSaveDialog(rootPane.getScene().getWindow()); + + if (file != null) { + QRCodeUtils.writePNG(image, file.getPath()); + } else { + AlertDisplay.error("Veuillez sélectionner un emplacement valide !"); + } + } catch (IOException e) { + AlertDisplay.error("Oops! Une erreur est survenue : " + e.getMessage()); + } + } catch (IOException e) { AlertDisplay.error("Impossible de générer le QR Code avec ce logo !"); } @@ -126,8 +155,6 @@ public class MainController { toggleGroup.getToggles().forEach(toggle -> toggle.setSelected(false)); logoFile = null; - - AlertDisplay.info("Information", "Champs et logo réinitialisés."); } @FXML @@ -142,11 +169,10 @@ public class MainController { extension.equals("jpg") || extension.equals("jpeg")) { logoFile = file; - AlertDisplay.success("Logo défini !"); return; } - AlertDisplay.error("Hmm... ce fichier n'est pas valide (.png/.jpg/.jpeg uniquement acceptés)."); + AlertDisplay.error("Ce type de fichier n'est pas valide (.png/.jpg/.jpeg uniquement acceptés)."); logoFile = null; } else { AlertDisplay.error("Veuillez sélectionner un fichier !"); diff --git a/src/main/java/xyz/ineanto/qodos/generator/QRGenerator.java b/src/main/java/xyz/ineanto/qodos/generator/QRGenerator.java new file mode 100644 index 0000000..f7db1a9 --- /dev/null +++ b/src/main/java/xyz/ineanto/qodos/generator/QRGenerator.java @@ -0,0 +1,9 @@ +package xyz.ineanto.qodos.generator; + +import javafx.scene.Node; + +import java.awt.image.BufferedImage; + +public interface QRGenerator { + BufferedImage generate(Node node); +} diff --git a/src/main/java/xyz/ineanto/qodos/generator/QRURLGenerator.java b/src/main/java/xyz/ineanto/qodos/generator/QRURLGenerator.java index 180edfd..9727593 100644 --- a/src/main/java/xyz/ineanto/qodos/generator/QRURLGenerator.java +++ b/src/main/java/xyz/ineanto/qodos/generator/QRURLGenerator.java @@ -2,34 +2,31 @@ package xyz.ineanto.qodos.generator; import io.github.simonscholz.qrcode.*; import javafx.scene.Node; -import javafx.stage.FileChooser; import xyz.ineanto.qodos.alert.AlertDisplay; import xyz.ineanto.qodos.url.URLValidator; import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.List; +import java.nio.Buffer; public record QRURLGenerator( String url, BufferedImage logo -) { - public void generate(Node node) { +) implements QRGenerator { + public BufferedImage generate(Node node) { System.out.println("Generating QR Code for URL..."); if (url.isBlank()) { AlertDisplay.error("Veuillez spécifier une URL."); - return; + return null; } if (!URLValidator.isValid(url)) { AlertDisplay.error("URL invalide."); - return; + return null; } final QrCodeApi api = QrCodeFactory.createQrCodeApi(); - final BufferedImage image = api.createQrCodeImage( + return api.createQrCodeImage( logo == null ? new QrCodeConfig( url, @@ -40,26 +37,5 @@ public record QRURLGenerator( new QrLogoConfig(logo) ) ); - - try { - final FileChooser chooser = new FileChooser(); - chooser.setInitialFileName("qr"); - chooser.setSelectedExtensionFilter( - new FileChooser.ExtensionFilter("Image Files", - List.of("*.png", "*.jpeg", "*.jpg") - ) - ); - chooser.setTitle("Sélectionner la destination..."); - final File file = chooser.showSaveDialog(node.getScene().getWindow()); - - if (file != null) { - QRCodeUtils.writePNG(image, file.getPath()); - AlertDisplay.success("QR Code généré sous " + file.getAbsolutePath() + "."); - } else { - AlertDisplay.error("Veuillez sélectionner un emplacement valide !"); - } - } catch (IOException e) { - throw new RuntimeException(e); - } } } diff --git a/src/main/java/xyz/ineanto/qodos/generator/QRVCardGenerator.java b/src/main/java/xyz/ineanto/qodos/generator/QRVCardGenerator.java index 09adc24..6b8ca06 100644 --- a/src/main/java/xyz/ineanto/qodos/generator/QRVCardGenerator.java +++ b/src/main/java/xyz/ineanto/qodos/generator/QRVCardGenerator.java @@ -3,14 +3,10 @@ package xyz.ineanto.qodos.generator; import io.github.simonscholz.qrcode.*; import io.github.simonscholz.qrcode.types.VCard; import javafx.scene.Node; -import javafx.stage.FileChooser; import xyz.ineanto.qodos.alert.AlertDisplay; import xyz.ineanto.qodos.url.URLValidator; import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.List; public record QRVCardGenerator( int gender, @@ -21,18 +17,18 @@ public record QRVCardGenerator( String address, String email, BufferedImage logo -) { - public void generate(Node node) { +) implements QRGenerator { + public BufferedImage generate(Node node) { System.out.println("Generating QR Code for VCard..."); if (family.isBlank() || name.isBlank()) { AlertDisplay.error("Veuillez spécifier un prénom et un nom."); - return; + return null; } if (gender == -1) { AlertDisplay.error("Veuillez sélectionner un genre."); - return; + return null; } final String[] genders = new String[]{"Mme.", "Mr.", ""}; @@ -42,7 +38,7 @@ public record QRVCardGenerator( if (url != null && !url.isBlank()) { if (!URLValidator.isValid(url)) { AlertDisplay.error("URL invalide !"); - return; + return null; } vCard.website(url); @@ -53,7 +49,7 @@ public record QRVCardGenerator( if (email != null) { vCard.email(email); } final QrCodeApi api = QrCodeFactory.createQrCodeApi(); - final BufferedImage image = api.createQrCodeImage( + return api.createQrCodeImage( logo == null ? new QrCodeConfig( vCard.toVCardQrCodeText(), @@ -64,26 +60,5 @@ public record QRVCardGenerator( new QrLogoConfig(logo) ) ); - - try { - final FileChooser chooser = new FileChooser(); - chooser.setTitle("Sélectionner la destination..."); - chooser.setInitialFileName("qr"); - chooser.setSelectedExtensionFilter( - new FileChooser.ExtensionFilter("Image Files", - List.of("*.png", "*.jpeg", "*.jpg") - ) - ); - final File file = chooser.showSaveDialog(node.getScene().getWindow()); - - if (file != null) { - QRCodeUtils.writePNG(image, file.getPath()); - AlertDisplay.success("VCard générée sous " + file.getAbsolutePath() + "."); - } else { - AlertDisplay.error("Veuillez sélectionner un emplacement valide !"); - } - } catch (IOException e) { - AlertDisplay.error("Oops! Une erreur est survenue : " + e.getMessage()); - } } }