feat(qr): merge into interface
This commit is contained in:
parent
753970cfc1
commit
afe0320d6b
4 changed files with 58 additions and 72 deletions
|
@ -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 !");
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue