Skip to content

Commit

Permalink
Refactor package structure, remove unused files, and add dark theme s…
Browse files Browse the repository at this point in the history
…tyles
  • Loading branch information
iKaueMatos committed Dec 27, 2024
1 parent ee67ccc commit fc5b81d
Show file tree
Hide file tree
Showing 18 changed files with 602 additions and 549 deletions.
12 changes: 0 additions & 12 deletions src/main/java/com/zpl/zpl/ZplApplication.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
package com.zpl.zpl;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.io.IOException;

import com.zpl.zpl.infrastructure.database.DatabaseInitializer;
import com.zpl.zpl.ui.StageInitializer;

Expand All @@ -20,12 +16,4 @@ public void start(@SuppressWarnings("exports") Stage primaryStage) throws Except
public static void main(String[] args) {
launch(args);
}

public void openVisualizeZplView() throws IOException {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/VisualizeZplView.fxml"));
Stage stage = new Stage();
stage.setScene(new Scene(loader.load()));
stage.setTitle("Visualize ZPL");
stage.show();
}
}
22 changes: 0 additions & 22 deletions src/main/java/com/zpl/zpl/application/ZplFileGenerator.java

This file was deleted.

22 changes: 22 additions & 0 deletions src/main/java/com/zpl/zpl/application/usecase/LabelGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.zpl.zpl.application.usecase;

import com.zpl.zpl.domain.service.ZplFormatService;
import com.zpl.zpl.domain.service.ZplValidationService;

import java.util.List;
import java.util.Map;

public class LabelGenerator {
private final ZplFormatService zplFormatService;
private final ZplValidationService zplValidationService;

public LabelGenerator() {
this.zplFormatService = new ZplFormatService();
this.zplValidationService = new ZplValidationService();
}

public String generateZpl(List<Map<String, Object>> eansAndSkus, String labelFormat, String labelType, int labelWidth, int labelHeight, int columns, int rows) {
zplValidationService.validateData(eansAndSkus);
return zplFormatService.generateZpl(eansAndSkus, labelFormat, labelType, labelWidth, labelHeight, columns, rows);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.zpl.zpl.usecase;
package com.zpl.zpl.application.usecase;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
Expand Down
48 changes: 7 additions & 41 deletions src/main/java/com/zpl/zpl/domain/service/PrinterService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,22 @@
import javax.print.*;
import javax.print.attribute.*;
import javax.print.attribute.standard.PrinterName;
import javax.usb.*;

import java.util.Scanner;

public class PrinterService {
private PrintService selectedPrinter;
private String printerIp;
private int printerPort;
private List<PrintService> availablePrinters;

public PrinterService() {
detectPrinters();
}

public void detectPrinters() {
try {
List<PrintService> availablePrinters = new ArrayList<>();
availablePrinters = new ArrayList<>();
DocFlavor df = DocFlavor.BYTE_ARRAY.AUTOSENSE;

PrintService[] printServices = PrintServiceLookup.lookupPrintServices(df, null);
Expand All @@ -35,51 +35,18 @@ public void detectPrinters() {
}
}
}

UsbServices services = UsbHostManager.getUsbServices();
UsbHub rootHub = services.getRootUsbHub();
detectUsbPrinters(rootHub);

selectPrinterFromList(availablePrinters);

} catch (Exception e) {
e.printStackTrace();
}
}

private void detectUsbPrinters(UsbHub hub) throws UsbException {
for (UsbDevice device : (List<UsbDevice>) hub.getAttachedUsbDevices()) {
if (device.isUsbHub()) {
detectUsbPrinters((UsbHub) device);
} else {
UsbDeviceDescriptor descriptor = device.getUsbDeviceDescriptor();
if (descriptor.idVendor() == 0x0A5F) { // Zebra vendor ID
System.out.println("Impressora Zebra USB detectada: " + device);
selectedPrinter = null;
printerIp = null;
printerPort = -1;
}
}
}
public List<PrintService> getAvailablePrinters() {
return availablePrinters;
}

private void selectPrinterFromList(List<PrintService> availablePrinters) {
if (availablePrinters.isEmpty()) {
System.out.println("Nenhuma impressora encontrada.");
return;
}

System.out.println("Selecione uma impressora:");
for (int i = 0; i < availablePrinters.size(); i++) {
PrintService printService = availablePrinters.get(i);
String printerName = getPrinterName(printService);
System.out.println((i + 1) + ". " + printerName);
}

Scanner scanner = new Scanner(System.in);
int selection = scanner.nextInt() - 1;
if (selection >= 0 && selection < availablePrinters.size()) {
selectedPrinter = availablePrinters.get(selection);
public void selectPrinter(int index) {
if (index >= 0 && index < availablePrinters.size()) {
selectedPrinter = availablePrinters.get(index);
String selectedPrinterName = getPrinterName(selectedPrinter);
System.out.println("Impressora selecionada: " + selectedPrinterName);
} else {
Expand Down Expand Up @@ -147,7 +114,6 @@ public synchronized boolean printDocument(byte[] bytes) {
}
}

// Imprime um documento ZPL para impressoras Zebra
public synchronized boolean printZplDocument(String zplContent) {
if (printerIp != null && printerPort > 0) {
try (Socket socket = new Socket(printerIp, printerPort)) {
Expand Down
116 changes: 116 additions & 0 deletions src/main/java/com/zpl/zpl/domain/service/ZplFormatService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package com.zpl.zpl.domain.service;

import java.util.List;
import java.util.Map;

public class ZplFormatService {

public String generateZpl(List<Map<String, Object>> eansAndSkus, String labelFormat, String labelType, int labelWidth, int labelHeight, int columns, int rows) {
switch (labelFormat) {
case "2-Colunas":
return generateZpl2Columns(eansAndSkus, labelType, labelWidth, labelHeight, columns);
case "1-Coluna":
return generateZpl1Column(eansAndSkus, labelType, labelWidth, labelHeight);
case "4-etiquetas por página":
return generateZpl4LabelsPerPage(eansAndSkus, labelType, labelWidth, labelHeight, columns, rows);
default:
throw new IllegalArgumentException("Formato de etiqueta desconhecido.");
}
}

private String generateZpl2Columns(List<Map<String, Object>> eansAndSkus, String labelType, int labelWidth, int labelHeight, int columns) {
StringBuilder zpl = new StringBuilder("^XA^CI28\n");
int xOffset = 0;
int yOffset = 0;
int columnCount = 0;

for (Map<String, Object> item : eansAndSkus) {
String ean = item.get("EAN").toString();
String sku = item.get("SKU").toString();
int quantity = Integer.parseInt(item.get("Quantidade").toString());
for (int i = 0; i < quantity; i++) {
zpl.append(generateLabelContent(labelType, xOffset, yOffset, ean, sku));
columnCount++;
xOffset += labelWidth;

if (columnCount == columns) {
xOffset = 0;
yOffset += labelHeight;
columnCount = 0;
}
}
}

zpl.append("^XZ");
return zpl.toString();
}

private String generateZpl1Column(List<Map<String, Object>> eansAndSkus, String labelType, int labelWidth, int labelHeight) {
StringBuilder zpl = new StringBuilder("^XA^CI28\n");
int yOffset = 0;

for (Map<String, Object> item : eansAndSkus) {
String ean = item.get("EAN").toString();
String sku = item.get("SKU").toString();
int quantity = Integer.parseInt(item.get("Quantidade").toString());
for (int i = 0; i < quantity; i++) {
zpl.append(generateLabelContent(labelType, 0, yOffset, ean, sku));
yOffset += labelHeight;
}
}

zpl.append("^XZ");
return zpl.toString();
}

private String generateZpl4LabelsPerPage(List<Map<String, Object>> eansAndSkus, String labelType, int labelWidth, int labelHeight, int columns, int rows) {
StringBuilder zpl = new StringBuilder("^XA^CI28\n");
int xOffset = 0;
int yOffset = 0;
int columnCount = 0;
int rowCount = 0;

for (Map<String, Object> item : eansAndSkus) {
String ean = item.get("EAN").toString();
String sku = item.get("SKU").toString();
int quantity = Integer.parseInt(item.get("Quantidade").toString());
for (int i = 0; i < quantity; i++) {
zpl.append(generateLabelContent(labelType, xOffset, yOffset, ean, sku));
columnCount++;
xOffset += labelWidth;

if (columnCount == columns) {
xOffset = 0;
yOffset += labelHeight;
columnCount = 0;
rowCount++;
}

if (rowCount == rows) {
xOffset = 0;
yOffset = 0;
rowCount = 0;
}
}
}

zpl.append("^XZ");
return zpl.toString();
}

private String generateLabelContent(String labelType, int xOffset, int yOffset, String ean, String sku) {
switch (labelType) {
case "Code128":
return String.format(
"^LH%d,%d\n^FO65,18^BY2,,0^BCN,54,N,N^FD%s^FS\n^FO145,80^A0N,20,25^FH^FD%s^FS\n^FO146,80^A0N,20,25^FH^FD%s^FS\n",
xOffset, yOffset, ean, sku, sku
);
case "QRCode":
return String.format(
"^LH%d,%d\n^FO50,50^BQN,2,10^FDQA,%s^FS\n", xOffset, yOffset, ean
);
default:
throw new IllegalArgumentException("Tipo de etiqueta desconhecido.");
}
}
}
23 changes: 23 additions & 0 deletions src/main/java/com/zpl/zpl/domain/service/ZplValidationService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.zpl.zpl.domain.service;

import java.util.List;
import java.util.Map;

public class ZplValidationService {

public void validateData(List<Map<String, Object>> eansAndSkus) {
for (Map<String, Object> item : eansAndSkus) {
if (!item.containsKey("EAN") || !item.containsKey("SKU") || !item.containsKey("Quantidade")) {
throw new IllegalArgumentException("Dados inválidos: EAN, SKU e Quantidade são obrigatórios.");
}
if (!item.get("EAN").toString().matches("\\d+")) {
throw new IllegalArgumentException("EAN deve conter apenas números.");
}
try {
Integer.parseInt(item.get("Quantidade").toString());
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Quantidade deve ser um número inteiro.");
}
}
}
}
22 changes: 4 additions & 18 deletions src/main/java/com/zpl/zpl/ui/StageInitializer.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import org.kordamp.bootstrapfx.BootstrapFX;
Expand All @@ -15,26 +15,12 @@ public static void initialize(Stage primaryStage) throws IOException {
VBox root = loader.load();
Scene scene = new Scene(root, 1024, 768);
scene.getStylesheets().add(BootstrapFX.bootstrapFXStylesheet());

Button visualizeButton = new Button("Visualize ZPL");
visualizeButton.setOnAction(event -> {
try {
FXMLLoader visualizeLoader = new FXMLLoader(StageInitializer.class.getResource("/view/VisualizeZplView.fxml"));
VBox visualizeRoot = visualizeLoader.load();
Scene visualizeScene = new Scene(visualizeRoot, 1024, 768);
Stage visualizeStage = new Stage();
visualizeStage.setScene(visualizeScene);
visualizeStage.setTitle("Visualize ZPL");
visualizeStage.show();
} catch (IOException e) {
e.printStackTrace();
}
});
root.getChildren().add(visualizeButton);
scene.getStylesheets().add(StageInitializer.class.getResource("/css/dark-theme.css").toExternalForm());

primaryStage.setScene(scene);
primaryStage.setTitle("ZPL Label Generator");
primaryStage.setMaximized(true);
primaryStage.setFullScreen(true);
primaryStage.getIcons().add(new Image(StageInitializer.class.getResourceAsStream("/assets/icon/nova-software-logo.jpg")));
primaryStage.show();
}
}
Loading

0 comments on commit fc5b81d

Please # to comment.