From cf87e78e057820ee05c52a3f01a5843fe2e5096b Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Wed, 28 Aug 2013 17:34:39 +0800 Subject: [PATCH] IDEMPIERE-1309 Improve JasperReport support for loading of resources (image, text file, etc ) --- .../org/compiere/report/ReportStarter.java | 36 ++++++++++++------- .../org/adempiere/webui/AdempiereWebUI.java | 8 ++++- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java b/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java index b5743c2af7..942768c997 100644 --- a/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java +++ b/org.adempiere.report.jasper/src/org/compiere/report/ReportStarter.java @@ -376,6 +376,12 @@ public class ReportStarter implements ProcessCall, ClientProcess reportResult(AD_PInstance_ID, "Can not find report", trxName); return false; } + if (reportPath.startsWith("@#LocalHttpAddr@")) { + String localaddr = Env.getContext(Env.getCtx(), "#LocalHttpAddr"); + if (!Util.isEmpty(localaddr)) { + reportPath = reportPath.replace("@#LocalHttpAddr@", localaddr); + } + } JasperData data = null; File reportFile = null; @@ -420,9 +426,15 @@ public class ReportStarter implements ProcessCall, ClientProcess { resourcePath = resourcePath + "/"; } - params.put("SUBREPORT_DIR", resourcePath); - params.put("RESOURCE_DIR", resourcePath); - + params.put("SUBREPORT_DIR", resourcePath); + if (reportPath.startsWith("http://") || reportPath.startsWith("https://")) { + int i = reportPath.lastIndexOf("/"); + String httpPath = reportPath.substring(0, i+1); + params.put("RESOURCE_DIR", httpPath); + } else { + params.put("RESOURCE_DIR", resourcePath); + } + if (jasperReport != null && pi.getTable_ID() > 0 && Record_ID <= 0 && pi.getRecord_IDs() != null && pi.getRecord_IDs().length > 0) { try @@ -576,7 +588,7 @@ public class ReportStarter implements ProcessCall, ClientProcess if (reportPath.startsWith("attachment:") && attachment != null) { resFile = getAttachmentResourceFile(jasperName, currLang); } else if (reportPath.startsWith("resource:")) { - resFile = getResourcesForResourceFile(jasperName, currLang); + resFile = getResourcesForResourceFile(jasperName, currLang); } else { resFile = new File(jasperName+"_"+currLang.getLocale().getLanguage()+".properties"); if (!resFile.exists()) { @@ -826,17 +838,15 @@ public class ReportStarter implements ProcessCall, ClientProcess MAttachmentEntry[] entries = attachment.getEntries(); for(int i = 0; i < entries.length; i++) { // @Trifon - if (!entries[i].getName().equals(name) - && (entries[i].getName().toLowerCase().endsWith(".jrxml") - || entries[i].getName().toLowerCase().endsWith(".jasper") - || entries[i].getName().toLowerCase().endsWith(".jpg") - || entries[i].getName().toLowerCase().endsWith(".png") - ) - ) + if (!entries[i].getName().equals(name)) { File reportFile = getAttachmentEntryFile(entries[i]); - if (reportFile != null) - subreports.add(reportFile); + if (reportFile != null) { + if (entries[i].getName().toLowerCase().endsWith(".jrxml") + || entries[i].getName().toLowerCase().endsWith(".jasper")) { + subreports.add(reportFile); + } + } } } File[] subreportsTemp = new File[0]; diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java index 5d628a1f47..3fd0ecc6e8 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java @@ -359,7 +359,13 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb } Env.setContext(ctx, "#UIClient", "zk"); - + StringBuilder localHttpAddr = new StringBuilder(Executions.getCurrent().getScheme()); + localHttpAddr.append("://").append(Executions.getCurrent().getLocalAddr()); + int port = Executions.getCurrent().getLocalPort(); + if (port > 0 && port != 80) { + localHttpAddr.append(":").append(port); + } + Env.setContext(ctx, "#LocalHttpAddr", localHttpAddr.toString()); Clients.response(new AuScript("zAu.cmd0.clearBusy()")); }