Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
126 changes: 74 additions & 52 deletions src/main/java/io/carbone/CarboneServices.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

import feign.FeignException;
import feign.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
Expand All @@ -17,11 +19,11 @@

class CarboneServices implements ICarboneServices {

int err;
private static final Logger logger = LoggerFactory.getLogger(CarboneServices.class);

private final ICarboneTemplateClient carboneTemplateClient;
private final ICarboneRenderClient carboneRenderClient;
private final ICarboneStatusClient carboneStatusClient ;
String reportName;
private final ICarboneStatusClient carboneStatusClient;

public CarboneServices(ICarboneTemplateClient carboneTemplateClient, ICarboneRenderClient carboneRenderClient, ICarboneStatusClient carboneStatusClient) {
this.carboneTemplateClient = carboneTemplateClient;
Expand All @@ -43,7 +45,7 @@ public String addTemplate(byte[] templateFile) throws CarboneException {
}

@Override
public boolean deleteTemplate(String templateId) throws CarboneException {
public boolean deleteTemplate(String templateId) throws CarboneException {
CarboneResponse carboneResponse = carboneTemplateClient.deleteTemplate(templateId);
return carboneResponse.isSuccess();
}
Expand All @@ -63,15 +65,15 @@ public String generateTemplateId(String path) {
e.printStackTrace();
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();
Expand All @@ -86,57 +88,81 @@ public String generateTemplateId(String path) {
return null;
}
}
public CarboneDocument render(String Json, String fileOrTemplateID) throws CarboneException
{
if (fileOrTemplateID.isEmpty()) {


public CarboneDocument render(String jsonData, String fileOrTemplateID) throws CarboneException {

if (fileOrTemplateID == null || fileOrTemplateID.isEmpty()) {
throw new CarboneException("Carbone SDK render error: argument is missing: file_or_template_id");
}
if (Json.isEmpty()) {
if (jsonData == null || jsonData.isEmpty()) {
throw new CarboneException("Carbone SDK render error: argument is missing: json_data");
}
CarboneResponse resp = null;

CarboneResponse renderResponse;
File file = new File(fileOrTemplateID);
if (!file.exists()) {
resp = carboneRenderClient.renderReport(Json, fileOrTemplateID);
}
else {
try {

try {
if (!file.exists()) {
renderResponse = carboneRenderClient.renderReport(jsonData, fileOrTemplateID);
} else {
String templateId = generateTemplateId(fileOrTemplateID);
resp = carboneRenderClient.renderReport(Json, templateId);
} catch (CarboneException e) {
if(e.getHttpStatus() == 404)
{
try {
Path filePath = Paths.get(fileOrTemplateID);
CarboneResponse respAddTemplate = carboneTemplateClient.addTemplate(Files.readAllBytes(filePath));
if (respAddTemplate.isSuccess()) {
resp = carboneRenderClient.renderReport(Json, respAddTemplate.getData().templateId);
} else {
throw new CarboneException("Carbone SDK render error: failed to add template");
if (templateId == null) {
throw new CarboneException("Carbone SDK render error: failed to generate template ID");
}

try {
renderResponse = carboneRenderClient.renderReport(jsonData, templateId);
} catch (CarboneException e) {
if (e.getHttpStatus() == 404) {
try {
Path filePath = Paths.get(fileOrTemplateID);
byte[] fileBytes = Files.readAllBytes(filePath);
CarboneResponse addTemplateResponse = carboneTemplateClient.addTemplate(fileBytes);

if (addTemplateResponse.isSuccess()) {
renderResponse = carboneRenderClient.renderReport(jsonData, addTemplateResponse.getData().getTemplateId());
} else {
throw new CarboneException("Carbone SDK render error: failed to add template: " +
(addTemplateResponse.getError() != null ? addTemplateResponse.getError() : "unknown error"));
}
} catch (IOException ioErr) {
throw new CarboneException("Carbone SDK render error: failed to read template file: " + ioErr.getMessage());
}
} catch (IOException err) {
throw new CarboneException("Carbone SDK render error: failed to read template file");
} else if (e.getHttpStatus() == 401) {
throw new CarboneException("Carbone error: invalid token");
} else {
throw new CarboneException("Carbone SDK render error: " + e.getMessage());
}
}
else{
throw new CarboneException("Carbone SDK render error: failed to generate the template id");
}
}

if (renderResponse == null) {
throw new CarboneException("Carbone SDK render error: no response from render service");
}

if (!renderResponse.isSuccess()) {
throw new CarboneException("Carbone SDK render error: " +
(renderResponse.getError() != null ? renderResponse.getError() : "render_id empty"));
}

if (renderResponse.getData() == null || renderResponse.getData().getRenderId() == null || renderResponse.getData().getRenderId().isEmpty()) {
throw new CarboneException("Carbone SDK render error: render_id empty or invalid");
}

return getReport(renderResponse.getData().getRenderId());

} catch (CarboneException e) {
throw e;
} catch (Exception e) {
throw new CarboneException("Carbone SDK render error: unexpected error: " + e.getMessage());
}
if (resp == null) {
throw new CarboneException("Carbone SDK render error: something went wrong");
}
if (!resp.isSuccess()) {
throw new CarboneException("Carbone SDK render error: render_id empty");
}
return getReport(resp.getData().getRenderId());
}


@Override
public String renderReport(String renderData, String templateId) throws CarboneException {
if(checkPathIsAbsolute(templateId))
{
if (checkPathIsAbsolute(templateId)) {
String newTemplateId = generateTemplateId(templateId);
CarboneResponse carboneResponse = carboneRenderClient.renderReport(renderData, newTemplateId);
return carboneResponse.getData().getRenderId();
Expand All @@ -148,36 +174,32 @@ public String renderReport(String renderData, String templateId) throws CarboneE

@Override
public CarboneDocument getReport(String renderId) throws CarboneException {
CarboneDocument response = carboneRenderClient.getReport(renderId);
return response;
}
return carboneRenderClient.getReport(renderId);
}

@Override
public byte[] getTemplate(String templateId) throws CarboneException
{
public byte[] getTemplate(String templateId) throws CarboneException {
CarboneFileResponse response = carboneTemplateClient.getTemplate(templateId);
return response.getFileContent();
}

@Override
public String getStatus() throws CarboneException
{
public String getStatus() throws CarboneException {
Response response = null;
try {
response = carboneStatusClient.getStatus();
InputStream bodyIs = response.body().asInputStream();
String body = new String(bodyIs.readAllBytes(), StandardCharsets.UTF_8);
return body;
return new String(bodyIs.readAllBytes(), StandardCharsets.UTF_8);
} catch (IOException e) {
throw new CarboneException("Error reading response body");
} catch (FeignException e) {
throw new CarboneException("Feign exception occurred");
throw new CarboneException("Carbone server error: " + e);
} finally {
if (response != null && response.body() != null) {
try {
response.body().close();
} catch (IOException e) {
e.printStackTrace();
logger.error("Failed to close response body", e);
}
}
}
Expand Down
Loading