From 2b3fbddb0ae8bc19925be0b4c663c75407777aa3 Mon Sep 17 00:00:00 2001 From: regine Date: Tue, 20 May 2025 10:11:56 +0200 Subject: [PATCH] ## - allow users to pre calculate template id from bytearray, relevant for templates packaged in jars etc. --- src/main/java/io/carbone/CarboneServices.java | 39 +++++++++++-------- .../java/io/carbone/ICarboneServices.java | 7 ++++ src/test/java/io/carbone/CarboneTest.java | 12 ++++++ 3 files changed, 41 insertions(+), 17 deletions(-) diff --git a/src/main/java/io/carbone/CarboneServices.java b/src/main/java/io/carbone/CarboneServices.java index 30828b6..b4bdc2a 100644 --- a/src/main/java/io/carbone/CarboneServices.java +++ b/src/main/java/io/carbone/CarboneServices.java @@ -53,6 +53,27 @@ public boolean checkPathIsAbsolute(String path) { return p.isAbsolute(); } + @Override + public String generateTemplateId(byte[] fileBytes) { + MessageDigest digest; + try { + digest = MessageDigest.getInstance("SHA-256"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return null; + } + + digest.update(fileBytes); + byte[] hashByte = digest.digest(); + StringBuilder hexString = new StringBuilder(); + for (byte b : hashByte) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) hexString.append(0); + hexString.append(hex); + } + return hexString.toString(); + } + public String generateTemplateId(String path) { try { File file = new File(path); @@ -64,23 +85,7 @@ public String generateTemplateId(String path) { return null; } - MessageDigest digest; - try { - digest = MessageDigest.getInstance("SHA-256"); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - return null; - } - - digest.update(fileBytes); - byte[] hashByte = digest.digest(); - StringBuilder hexString = new StringBuilder(); - for (byte b : hashByte) { - String hex = Integer.toHexString(0xff & b); - if (hex.length() == 1) hexString.append(0); - hexString.append(hex); - } - return hexString.toString(); + return generateTemplateId(fileBytes); } catch (Exception e) { e.printStackTrace(); return null; diff --git a/src/main/java/io/carbone/ICarboneServices.java b/src/main/java/io/carbone/ICarboneServices.java index 91fd522..f1d79af 100644 --- a/src/main/java/io/carbone/ICarboneServices.java +++ b/src/main/java/io/carbone/ICarboneServices.java @@ -77,5 +77,12 @@ public interface ICarboneServices { * @return give a precalculates templateId */ String generateTemplateId(String path); + + /** + * precalculates the template id + * @param fileBytes byte content of the template file + * @return give a precalculates templateId + */ + String generateTemplateId(byte[] fileBytes); } diff --git a/src/test/java/io/carbone/CarboneTest.java b/src/test/java/io/carbone/CarboneTest.java index ee81644..fa6287d 100644 --- a/src/test/java/io/carbone/CarboneTest.java +++ b/src/test/java/io/carbone/CarboneTest.java @@ -483,4 +483,16 @@ public void Test_Carbon_Service_Fectory_With_No_Argument() throws CarboneExcepti String status = carboneService.getStatus(); assertEquals(status.contains("\"success\":true,\"code\":200"), true); } + + @Test + public void Test_Generate_Template_Id_From_Byte_Array() throws CarboneException, IOException + { + String filename = "/src/test/java/io/carbone/template3.odt"; + Path filePath = Paths.get(directory, filename); + byte[] fileBytes = Files.readAllBytes(filePath); + + String templateId = carboneServices.generateTemplateId(fileBytes); + + assertEquals(templateId, "fb9241ea2218ffd8f974110e539386384620244618c2efbf182b7bd47242987a"); + } }