-
-
-SAVED_DIR=`pwd` #save current dir
-cd `dirname $0`/../utils_dev #change dir to place where script resides - doesn not work with sym links
-UTILS_DEV=`pwd` #this is compiere source
-cd $SAVED_DIR #back to the saved directory
-
-. $UTILS_DEV/myDevEnv.sh #call environment
-echo done
-if [ ! $COMPIERE_ENV==Y ] ; then
- echo "Can't set developemeent environemnt - check myDevEnv.sh"
- exit 1
-fi
-
-echo running Ant
-$JAVA_HOME/bin/java -Dant.home="." $ANT_PROPERTIES org.apache.tools.ant.Main
diff --git a/org.adempiere.report.jasper.webapp/WEB-INF/jboss-web.xml b/org.adempiere.report.jasper.webapp/WEB-INF/jboss-web.xml
deleted file mode 100644
index 3074a41536..0000000000
--- a/org.adempiere.report.jasper.webapp/WEB-INF/jboss-web.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ejb/compiere/MD5
- ejb/compiere/MD5
-
-
-
-
\ No newline at end of file
diff --git a/org.adempiere.report.jasper.webapp/WEB-INF/web.xml b/org.adempiere.report.jasper.webapp/WEB-INF/web.xml
deleted file mode 100644
index b6e4cd6339..0000000000
--- a/org.adempiere.report.jasper.webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
- MD5Filter
-
- org.compiere.web.MD5Filter
-
-
-
- MD5Filter
- /*
-
-
-
- GetMD5File
-
- org.compiere.web.GetMD5FileServlet
-
-
-
-
- GetMD5File
- /GetMD5File
-
-
-
-
-
-
-
-
-
-
diff --git a/org.adempiere.report.jasper.webapp/build.properties b/org.adempiere.report.jasper.webapp/build.properties
deleted file mode 100644
index dabe31b60f..0000000000
--- a/org.adempiere.report.jasper.webapp/build.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-bin.includes = META-INF/,\
- standalone.jrxml,\
- WEB-INF/,\
- .
-bin.excludes = src/**,\
- .settings/**,\
- .classpath,\
- .project,\
- build.properties
-output.. = target/classes/
-source.. = src/
diff --git a/org.adempiere.report.jasper.webapp/packaging-build.xml b/org.adempiere.report.jasper.webapp/packaging-build.xml
deleted file mode 100644
index 2a91237dc1..0000000000
--- a/org.adempiere.report.jasper.webapp/packaging-build.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/org.adempiere.report.jasper.webapp/pom.xml b/org.adempiere.report.jasper.webapp/pom.xml
deleted file mode 100644
index ada1382e02..0000000000
--- a/org.adempiere.report.jasper.webapp/pom.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
- 4.0.0
-
- org.idempiere
- org.idempiere.parent
- 7.1.0-SNAPSHOT
- ../org.idempiere.parent/pom.xml
-
- org.adempiere.report.jasper.webapp
- eclipse-plugin
-
\ No newline at end of file
diff --git a/org.adempiere.report.jasper.webapp/src/org/compiere/utils/DigestOfFile.java b/org.adempiere.report.jasper.webapp/src/org/compiere/utils/DigestOfFile.java
deleted file mode 100644
index c8b46d9b48..0000000000
--- a/org.adempiere.report.jasper.webapp/src/org/compiere/utils/DigestOfFile.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.compiere.utils;
-
-import java.security.*;
-import java.io.*;
-
-import org.apache.commons.codec.binary.Base64;
-
-/**
- * @author rlemeill
- *
- */
-public class DigestOfFile
-{
- /**
- * @param algorithm ie MD5
- * @throws Exception
- */
- public DigestOfFile(String algorithm) throws Exception
- {
- digestAgent = MessageDigest.getInstance(algorithm);
- }
-
- /**
- * @param file to hash
- * @return hash
- * @throws Exception
- */
- synchronized public byte[] digestAsByteArray(File file) throws Exception
- {
- digestAgent.reset();
- InputStream is = new BufferedInputStream(new FileInputStream(file));
- for (int bytesRead = 0; (bytesRead = is.read(buffer)) >= 0;)
- {
- digestAgent.update(buffer, 0, bytesRead);
- }
- is.close();
- byte[] digest = digestAgent.digest();
- return digest;
- }
-
- /**
- * @author rlemeill
- * @param file
- * @return hash (base64 encoded)
- * @throws Exception
- */
- synchronized public String digestAsBase64(File file) throws Exception
- {
- byte[] digest = digestAsByteArray(file);
- Base64 base64 = new Base64();
- String digestAsBase64 = new String(base64.encode(digest));
- return digestAsBase64;
- }
-
-
-
- //private static final char[] HEX_CHARS = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
-
- private MessageDigest digestAgent;
- private byte[] buffer = new byte[4096];
-
- /**
- * @author rlemeill
- * @param args file
- */
- public static void main(String[] args)
- {
- try
- {
- DigestOfFile md5DigestAgent = new DigestOfFile("MD5");
-
- for (int argIndex = 0; argIndex < args.length; argIndex++)
- {
- {
- String base64Digest = md5DigestAgent.digestAsBase64(new File(args[argIndex]));
- System.out.println("Base64 MD5 of " + args[argIndex] + " = [" + base64Digest + "]");
- }
- }
- }
- catch (Exception e)
- {
- e.printStackTrace(System.out);
- }
- }
-
-
- /**
- * @param file1 first file to compare
- * @param file2 second file to compare
- * @return true if files are identic false otherwise
- */
- public static boolean md5localHashCompare(File file1,File file2)
- {
- //compute Hash of exisiting and downloaded
- String hashFile1;
- String hashFile2;
- try{
- DigestOfFile md5DigestAgent = new DigestOfFile("MD5");
- hashFile1 = md5DigestAgent.digestAsBase64(file1);
- hashFile2 = md5DigestAgent.digestAsBase64(file2);
- return hashFile1.equals(hashFile2) ; }
- catch (Exception e)
- {
- return false; //if there is an error during comparison return files are difs
- }
- }
-
- /**
- * @param file
- * @return md5 hash null if file is not found or other error
- */
- public static String GetLocalMD5Hash(File file)
- {
- String hash;
- try{
- DigestOfFile md5DigestAgent = new DigestOfFile("MD5");
- hash = md5DigestAgent.digestAsBase64(file);
- return hash; }
- catch (Exception e)
- {
- return null; //if there is an error during comparison return files are difs
- }
- }
-}
diff --git a/org.adempiere.report.jasper.webapp/src/org/compiere/utils/MD5Impl.java b/org.adempiere.report.jasper.webapp/src/org/compiere/utils/MD5Impl.java
deleted file mode 100644
index da40f3b6b3..0000000000
--- a/org.adempiere.report.jasper.webapp/src/org/compiere/utils/MD5Impl.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Créé le 22 mars 2005
- *
- * TODO Pour changer le modčle de ce fichier généré, allez ŕ :
- * Fenętre - Préférences - Java - Style de code - Modčles de code
- */
-package org.compiere.utils;
-
-import java.net.URL;
-import java.util.logging.Level;
-
-import org.compiere.util.CLogger;
-import org.compiere.utils.DigestOfFile;
-
-public class MD5Impl {
- /**
- *
- */
- private static final CLogger log = CLogger.getCLogger(MD5Impl.class);
-
- public MD5Impl() {
- super();
- }
-
- /**
- * Business method
- * @param FileName
- * @return hash base64 encoded
- */
- public String getFileMD5(String FileName) {
- String hash = null;
- String absoluteFilename = null;
- String filepartOnly = null;
- try
- {
- //Thread.currentThread().getContextClassLoader().getResource("");
- if ( FileName.startsWith("http://") )
- {
- //extract absolute path
- String[] filePathParts = FileName.split("/");
- filepartOnly = filePathParts[filePathParts.length-1];
- URL currentFile = Thread.currentThread().getContextClassLoader().getResource(filepartOnly);
- System.out.println(filepartOnly);
- absoluteFilename = currentFile.getFile();
- if (log.isLoggable(Level.INFO)) log.info("decoded absolute path name for "+filepartOnly +" is "+absoluteFilename);
- }
- else
- {
- absoluteFilename = FileName;
- }
-
- if (absoluteFilename != null)
- {
- DigestOfFile md5DigestAgent = new DigestOfFile("MD5");
- hash = md5DigestAgent.digestAsBase64(new java.io.File(absoluteFilename));
- }
-
- }
- catch(Exception e)
- {
- log.severe(e.getMessage());
- return null;
- }
-
- return hash;
- }
-
- /**
- * Business method
- * @param Filename
- * @return AbsolutePath on server
- */
- public String getFileAsolutePath(String Filename)
- {
- java.net.URL currentFile = Thread.currentThread().getContextClassLoader().getResource(Filename);
- return currentFile.toString();
- }
-}
\ No newline at end of file
diff --git a/org.adempiere.report.jasper.webapp/src/org/compiere/web/GetMD5FileServlet.java b/org.adempiere.report.jasper.webapp/src/org/compiere/web/GetMD5FileServlet.java
deleted file mode 100644
index 6d282b9098..0000000000
--- a/org.adempiere.report.jasper.webapp/src/org/compiere/web/GetMD5FileServlet.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Créé le 22 mars 2005
- *
- * TODO Pour changer le modčle de ce fichier généré, allez ŕ :
- * Fenętre - Préférences - Java - Style de code - Modčles de code
- */
-package org.compiere.web;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.compiere.util.Util;
-import org.compiere.utils.MD5Impl;
-
-/**
- * Servlet Class
- *
- * @author Michael Judd BF [2728388] - fix potential CSS vulnerability
- */
-public class GetMD5FileServlet extends HttpServlet {
-
- /**
- *
- */
- private static final long serialVersionUID = -2625917637549702574L;
- /**
- *
- */
- private MD5Impl md5;
-
- public GetMD5FileServlet() {
- super();
- }
-
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
- md5 = new MD5Impl();
- }
-
- protected void doGet(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException,
- IOException {
- // TODO Auto-generated method stub
- String file = Util.maskHTML(req.getParameter("File"));
- String output = req.getParameter("output");
- if ("text".equalsIgnoreCase(output))
- {
- resp.setContentType("text/plain");
- PrintWriter out = resp.getWriter();
- out.print(md5.getFileMD5(file));
- }
- else
- {
- PrintWriter out = resp.getWriter();
- out.println("MD5 Hash");
- out.println("File is: "+ file + "
MD5 : "+ md5.getFileMD5(file)+"
");
- //out.println(md5.getFileAsolutePath(file));
- out.println("");
- }
- }
-
-}
\ No newline at end of file
diff --git a/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5Filter.java b/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5Filter.java
deleted file mode 100644
index 6d9445ae14..0000000000
--- a/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5Filter.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.compiere.web;
-
-import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-
-/**
- * Implementation of javax.servlet.Filter
used to compress
- * the ServletResponse if it is bigger than a threshold.
- *
- * @author Amy Roh
- * @author Dmitri Valdin
- * @version $Revision: 1.2 $, $Date: 2004/03/18 16:40:33 $
- */
-
-public class MD5Filter implements Filter{
-
- /**
- * The filter configuration object we are associated with. If this value
- * is null, this filter instance is not currently configured.
- */
- private FilterConfig config = null;
-
- /**
- /**
- * Place this filter into service.
- *
- * @param filterConfig The filter configuration object
- */
-
- public void init(FilterConfig filterConfig) {
-
- config = filterConfig;
- }
-
- /**
- * Take this filter out of service.
- */
- public void destroy() {
-
- this.config = null;
-
- }
-
- /**
- * The doFilter
method of the Filter is called by the container
- * each time a request/response pair is passed through the chain due
- * to a client request for a resource at the end of the chain.
- * The FilterChain passed into this method allows the Filter to pass on the
- * request and response to the next entity in the chain.
- * This method first examines the request to check whether the client support
- * compression.
- * It simply just pass the request and response if there is no support for
- * compression.
- * If the compression support is available, it creates a
- * CompressionServletResponseWrapper object which compresses the content and
- * modifies the header if the content length is big enough.
- * It then invokes the next entity in the chain using the FilterChain object
- * (chain.doFilter()
),
- **/
-
- public void doFilter ( ServletRequest request, ServletResponse response,
- FilterChain chain ) throws IOException, ServletException {
-
- if (request instanceof HttpServletRequest) {
- // is md5 request
- String s = ((HttpServletRequest)request).getParameter("md5");
- if (!"true".equals(s)) {
- chain.doFilter(request, response);
- return;
- }
- }
-
- if (response instanceof HttpServletResponse) {
- MD5ResponseWrapper wrappedResponse =
- new MD5ResponseWrapper((HttpServletResponse)response);
- try {
- chain.doFilter(request, wrappedResponse);
- } finally {
- wrappedResponse.finishResponse();
- }
- return;
- }
- }
-
- /**
- * Set filter config
- * This function is equivalent to init. Required by Weblogic 6.1
- *
- * @param filterConfig The filter configuration object
- */
- public void setFilterConfig(FilterConfig filterConfig) {
- init(filterConfig);
- }
-
- /**
- * Return filter config
- * Required by Weblogic 6.1
- */
- public FilterConfig getFilterConfig() {
- return config;
- }
-
-}
diff --git a/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5OutputStream.java b/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5OutputStream.java
deleted file mode 100644
index 274100ca76..0000000000
--- a/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5OutputStream.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/**
- *
- */
-package org.compiere.web;
-
-import java.io.IOException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.WriteListener;
-
-import org.apache.commons.codec.binary.Base64;
-
-/**
- * @author hengsin
- *
- */
-public class MD5OutputStream extends ServletOutputStream {
-
- private MessageDigest digestAgent;
-
- /**
- *
- */
- public MD5OutputStream() {
- try {
- digestAgent = MessageDigest.getInstance("MD5", "SUN");
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- } catch (NoSuchProviderException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * @see java.io.OutputStream#write(int)
- */
- @Override
- public void write(int b) throws IOException {
- digestAgent.update((byte) b);
- }
-
- /**
- * @return md5 hash
- */
- public String getMD5Hash() {
- byte[] digest = digestAgent.digest();
- Base64 base64 = new Base64();
- String digestAsBase64 = new String(base64.encode(digest));
- return digestAsBase64;
- }
-
- @Override
- public boolean isReady() {
- return true;
- }
-
- @Override
- public void setWriteListener(WriteListener arg0) {
- }
-}
diff --git a/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5ResponseWrapper.java b/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5ResponseWrapper.java
deleted file mode 100644
index 2f5bb1e0c3..0000000000
--- a/org.adempiere.report.jasper.webapp/src/org/compiere/web/MD5ResponseWrapper.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- *
- */
-package org.compiere.web;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpServletResponseWrapper;
-
-/**
- * @author hengsin
- *
- */
-public class MD5ResponseWrapper extends HttpServletResponseWrapper {
-
- private ServletOutputStream stream = null;
- private PrintWriter writer = null;
- private HttpServletResponse origResponse;
-
- /**
- * @param response
- */
- public MD5ResponseWrapper(HttpServletResponse response) {
- super(response);
- origResponse = response;
- }
-
- public void finishResponse() {
- if (stream != null) {
- String digest = ((MD5OutputStream)stream).getMD5Hash();
- origResponse.setContentType("text/plain");
- origResponse.setContentLength(digest.getBytes().length);
- try {
- origResponse.getOutputStream().write(digest.getBytes());
- origResponse.getOutputStream().flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- @Override
- public ServletOutputStream getOutputStream() throws IOException {
- if (writer != null)
- throw new IllegalStateException("getWriter() has already been called for this response");
-
- if (stream == null)
- stream = createOutputStream();
-
- return (stream);
- }
-
- @Override
- public PrintWriter getWriter() throws IOException {
- if (writer != null)
- return (writer);
-
- if (stream != null)
- throw new IllegalStateException("getOutputStream() has already been called for this response");
-
- stream = createOutputStream();
-
- writer = new PrintWriter(stream);
- return writer;
- }
-
- private ServletOutputStream createOutputStream() {
- stream = new MD5OutputStream();
- return stream;
- }
-
-}
diff --git a/org.adempiere.report.jasper/RUN_build.bat b/org.adempiere.report.jasper/RUN_build.bat
deleted file mode 100644
index 6500adcd27..0000000000
--- a/org.adempiere.report.jasper/RUN_build.bat
+++ /dev/null
@@ -1,15 +0,0 @@
-@CALL ..\utils_dev\myDevEnv.bat
-@IF NOT %COMPIERE_ENV%==Y GOTO NOBUILD
-
-@echo Cleanup ...
-@%JAVA_HOME%\bin\java -Dant.home="." %ANT_PROPERTIES% org.apache.tools.ant.Main clean
-
-@echo Building ...
-@%JAVA_HOME%\bin\java -Dant.home="." %ANT_PROPERTIES% org.apache.tools.ant.Main dist
-
-@pause
-@exit
-
-:NOBUILD
-@Echo Check myDevEnv.bat (copy from myDevEnvTemplate.bat)
-@Pause
diff --git a/org.adempiere.report.jasper/RUN_build.sh b/org.adempiere.report.jasper/RUN_build.sh
deleted file mode 100644
index f217faaba1..0000000000
--- a/org.adempiere.report.jasper/RUN_build.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-# Module compiling script
-# Ported from Windows script Marek Mosiewicz
-
-
-SAVED_DIR=`pwd` #save current dir
-cd `dirname $0`/../utils_dev #change dir to place where script resides - doesn not work with sym links
-UTILS_DEV=`pwd` #this is compiere source
-cd $SAVED_DIR #back to the saved directory
-
-. $UTILS_DEV/myDevEnv.sh #call environment
-echo done
-if [ ! $COMPIERE_ENV==Y ] ; then
- echo "Can't set developemeent environemnt - check myDevEnv.sh"
- exit 1
-fi
-
-echo running Ant
-$JAVA_HOME/bin/java -Dant.home="." $ANT_PROPERTIES org.apache.tools.ant.Main
diff --git a/org.adempiere.report.jasper/scripts/Makefile b/org.adempiere.report.jasper/scripts/Makefile
deleted file mode 100644
index 4d01d5bee9..0000000000
--- a/org.adempiere.report.jasper/scripts/Makefile
+++ /dev/null
@@ -1,22 +0,0 @@
-CVS=cvs
-RM=rm
-CVSROOT=:pserver:anonymous@cvs.sourceforge.net:/cvsroot/compiere
-#JAVAHOME=c:\jdk1.5.0_01
-JAVAHOME=c:\j2sdk1.4.2_06
-JAVAC=$(JAVAHOME)\bin\javac
-JAVA=$(JAVAHOME)\bin\java
-
-#usage at de top directory (containing base, client...)
-#make -f JasperReports/scripts/Makefile all
-version:
- $(JAVAC) JasperReports\scripts\Version.java -classpath lib\Compiere.jar
-
-patch: version
- $(RM) -f JasperReports/patch-$(shell $(JAVA) JasperReports.scripts.Version ).diff
- -$(CVS) -d $(CVSROOT) diff -N -u base client data db dbPort extend install interfaces jboss launch looks print serverApps serverRoot utils utils_dev tools webStore>> JasperReports/patch-$(shell $(JAVA) JasperReports.scripts.Version ).diff
-
-pack: version
- $(RM) -f compierejasper-$(shell $(JAVA) JasperReports.scripts.Version ).tar.bz2
- tar -cvjf compierejasper-$(shell $(JAVA) JasperReports.scripts.Version ).tar.bz2 --exclude=JasperReports/lib --exclude=JasperReports/build --exclude=JasperReports/needed JasperReports tools/lib/barbecue-1.1.jar tools/lib/iReport.jar tools/lib/commons-beanutils-1.7.jar tools/lib/itext-1.2.jar tools/lib/commons-collections-3.1.jar tools/lib/commons-digester-1.6.jar tools/lib/commons-logging-1.4.jar tools/lib/jasperreports-0.6.5.jar tools/lib/jfreechart-0.9.21.jar tools/lib/xercesImpl.jar tools/lib/xml-apis.jar
-
-all: patch pack
\ No newline at end of file
diff --git a/org.adempiere.report.jasper/scripts/Version.java b/org.adempiere.report.jasper/scripts/Version.java
deleted file mode 100644
index 0a847d7ae1..0000000000
--- a/org.adempiere.report.jasper/scripts/Version.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package JasperReports.scripts;
-
-import org.compiere.*;
-
-
-class Version
-{
- public static void main(String args[])
- {
- String version[];
- version = org.compiere.Compiere.MAIN_VERSION.split(" ");
- System.out.println(version[1]);
- }
-}
diff --git a/org.adempiere.report.jasper/src/org/adempiere/report/jasper/ReportStarter.java b/org.adempiere.report.jasper/src/org/adempiere/report/jasper/ReportStarter.java
index a67255d646..2e22e8a1ad 100644
--- a/org.adempiere.report.jasper/src/org/adempiere/report/jasper/ReportStarter.java
+++ b/org.adempiere.report.jasper/src/org/adempiere/report/jasper/ReportStarter.java
@@ -28,6 +28,9 @@ import java.math.BigDecimal;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardCopyOption;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
@@ -71,6 +74,7 @@ import org.compiere.util.DB;
import org.compiere.util.Env;
import org.compiere.util.Ini;
import org.compiere.util.Language;
+import org.compiere.util.Msg;
import org.compiere.util.Trx;
import org.compiere.util.Util;
import org.compiere.utils.DigestOfFile;
@@ -197,8 +201,6 @@ public class ReportStarter implements ProcessCall, ClientProcess
fout.close();
return downloadedFile;
} catch (FileNotFoundException e) {
- if(reportLocation.indexOf("Subreport") == -1 && !reportLocation.endsWith(".properties")) // Only show the warning if it is not a subreport or properties
- log.warning("404 not found: Report cannot be found on server "+ e.getMessage());
return null;
} catch (IOException e) {
throw new AdempiereException("I/O error when trying to download (sub)report from server "+ e.getLocalizedMessage());
@@ -254,78 +256,91 @@ public class ReportStarter implements ProcessCall, ClientProcess
String downloadedLocalFile = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator")+"TMP" + cleanFile;
reportFile = new File(localFile);
-
-
if (reportFile.exists())
- {
- String localMD5hash = DigestOfFile.GetLocalMD5Hash(reportFile);
- String remoteMD5Hash = getRemoteMD5(reportLocation);
- if (log.isLoggable(Level.INFO)) log.info("MD5 for local file is "+localMD5hash );
- if ( remoteMD5Hash != null)
+ {
+ String remoteMD5Hash = getRemoteMD5(reportLocation);
+ if (!Util.isEmpty(remoteMD5Hash, true))
{
- if (localMD5hash.equals(remoteMD5Hash))
+ String localMD5hash = DigestOfFile.getMD5Hash(reportFile);
+ if (log.isLoggable(Level.INFO)) log.info("MD5 for local file is "+localMD5hash );
+ if (localMD5hash.equals(remoteMD5Hash.trim()))
{
- if (log.isLoggable(Level.INFO)) log.info(" no need to download: local report is up-to-date");
+ if (log.isLoggable(Level.INFO)) log.info("MD5 match: local report file is up-to-date");
+ return reportFile;
}
else
{
- if (log.isLoggable(Level.INFO)) log.info(" report on server is different that local one, download and replace");
+ if (log.isLoggable(Level.INFO)) log.info("MD5 is different, download and replace");
downloadedFile = getRemoteFile(reportLocation, downloadedLocalFile);
- reportFile.delete();
- downloadedFile.renameTo(reportFile);
+ if (downloadedFile != null)
+ {
+ Path to = reportFile.toPath();
+ Path from = downloadedFile.toPath();
+ Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING);
+ return to.toFile();
+ }
+ else
+ {
+ return null;
+ }
}
}
else
{
- log.warning("Remote hashing is not available did you deployed webApp.ear?");
downloadedFile = getRemoteFile(reportLocation, downloadedLocalFile);
- // compare hash of existing and downloaded
- if ( DigestOfFile.md5localHashCompare(reportFile,downloadedFile) )
+ if (downloadedFile == null)
+ return null;
+
+ // compare hash of existing and downloaded
+ if ( DigestOfFile.md5HashCompare(reportFile,downloadedFile) )
{
//nothing file are identical
- if (log.isLoggable(Level.INFO)) log.info(" no need to replace your existing report");
+ if (log.isLoggable(Level.INFO)) log.info("MD5 match: local report file is up-to-date");
+ return reportFile;
}
else
{
- if (log.isLoggable(Level.INFO)) log.info(" report on server is different that local one, replacing");
- reportFile.delete();
- downloadedFile.renameTo(reportFile);
+ if (log.isLoggable(Level.INFO)) log.info("MD5 is different, replace with downloaded file");
+ Path to = reportFile.toPath();
+ Path from = downloadedFile.toPath();
+ Files.copy(from, to, StandardCopyOption.REPLACE_EXISTING);
+ return to.toFile();
}
}
}
else
{
reportFile = getRemoteFile(reportLocation,localFile);
+ return reportFile;
}
}
catch (Exception e) {
throw new AdempiereException("Unknown exception: "+ e.getLocalizedMessage());
- }
- return reportFile;
+ }
}
private String getRemoteMD5(String reportLocation) {
- try{
- String md5url = reportLocation;
- if (md5url.indexOf("?") > 0)
- md5url = md5url + "&md5=true";
- else
- md5url = md5url + "?md5=true";
+ try {
+ String md5url = reportLocation + ".md5";
URL reportURL = new URL(md5url);
- InputStream in = reportURL.openStream();
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte buf[] = new byte[1024];
- int s = 0;
- while((s = in.read(buf, 0, 1024)) > 0)
- baos.write(buf, 0, s);
-
- in.close();
- String hash = new String(baos.toByteArray());
- return hash;
+ try (InputStream in = reportURL.openStream()) {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ byte buf[] = new byte[1024];
+ int s = 0;
+ while((s = in.read(buf, 0, 1024)) > 0)
+ baos.write(buf, 0, s);
+
+ String hash = new String(baos.toByteArray());
+ int posSpace = hash.indexOf(" ");
+ if (posSpace > 0)
+ hash = hash.substring(0, posSpace);
+ return hash;
+ }
} catch (IOException e) {
- throw new AdempiereException("I/O error when trying to download (sub)report from server "+ e.getLocalizedMessage());
+ if (log.isLoggable(Level.INFO))
+ log.log(Level.INFO, "MD5 not available for " + reportLocation, e);
+ return null;
}
}
@@ -388,7 +403,8 @@ public class ReportStarter implements ProcessCall, ClientProcess
}
ReportData reportData = getReportData(pi, trxName);
if (reportData == null) {
- reportResult(AD_PInstance_ID, "Can not find report data", trxName);
+ reportResult(AD_PInstance_ID, "Failed to retrieve report data", trxName);
+ pi.setSummary("Failed to retrieve report data", true);
return false;
}
@@ -401,6 +417,7 @@ public class ReportStarter implements ProcessCall, ClientProcess
if (Util.isEmpty(reportPath, true))
{
reportResult(AD_PInstance_ID, "Can not find report", trxName);
+ pi.setSummary("Can not find report", true);
return false;
}
if (reportPath.startsWith("@#LocalHttpAddr@")) {
@@ -430,6 +447,7 @@ public class ReportStarter implements ProcessCall, ClientProcess
String tmp = "Can not find report file at path - " + reportPath;
log.severe(tmp);
reportResult(AD_PInstance_ID, tmp, trxName);
+ pi.setSummary(tmp, true);
}
if (reportFile != null)
@@ -860,6 +878,7 @@ public class ReportStarter implements ProcessCall, ClientProcess
processInfo.setRowCount(nrows);
}
reportResult( AD_PInstance_ID, null, trxName);
+ pi.setSummary(Msg.getMsg(Env.getCtx(), "Success"), false);
return true;
}
@@ -1182,7 +1201,7 @@ public class ReportStarter implements ProcessCall, ClientProcess
String downloadedLocalFile = System.getProperty("java.io.tmpdir") + System.getProperty("file.separator")+"TMP" + entry.getName();
File reportFile = new File(localFile);
if (reportFile.exists()) {
- String localMD5hash = DigestOfFile.GetLocalMD5Hash(reportFile);
+ String localMD5hash = DigestOfFile.getMD5Hash(reportFile);
String entryMD5hash = DigestOfFile.getMD5Hash(entry.getData());
if (localMD5hash.equals(entryMD5hash))
{
diff --git a/org.adempiere.report.jasper/src/org/compiere/utils/DigestOfFile.java b/org.adempiere.report.jasper/src/org/compiere/utils/DigestOfFile.java
index 724b54023c..2bf6fdb7ba 100644
--- a/org.adempiere.report.jasper/src/org/compiere/utils/DigestOfFile.java
+++ b/org.adempiere.report.jasper/src/org/compiere/utils/DigestOfFile.java
@@ -4,9 +4,11 @@ import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
+import java.security.DigestInputStream;
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.codec.binary.Hex;
/**
* @author rlemeill
@@ -32,14 +34,13 @@ public class DigestOfFile
synchronized public byte[] digestAsByteArray(File file) throws Exception
{
digestAgent.reset();
- InputStream is = new BufferedInputStream(new FileInputStream(file));
- for (int bytesRead = 0; (bytesRead = is.read(buffer)) >= 0;)
+ try (InputStream is = new BufferedInputStream(new FileInputStream(file));
+ DigestInputStream dis = new DigestInputStream(is, digestAgent))
{
- digestAgent.update(buffer, 0, bytesRead);
- }
- is.close();
- byte[] digest = digestAgent.digest();
- return digest;
+ while(dis.read() != -1){}
+ byte[] digest = digestAgent.digest();
+ return digest;
+ }
}
public synchronized byte[] digestAsByteArray(byte[] input) throws Exception
@@ -76,13 +77,31 @@ public class DigestOfFile
return digestAsBase64;
}
+ /**
+ *
+ * @param file
+ * @return hex encoded md5 string
+ * @throws Exception
+ */
+ public synchronized String digestAsHex(File file) throws Exception
+ {
+ byte[] digest = digestAsByteArray(file);
+ return Hex.encodeHexString(digest);
+ }
-
- //private static final char[] HEX_CHARS = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
-
+ /**
+ *
+ * @param input
+ * @return hex encoded md5 string
+ * @throws Exception
+ */
+ public synchronized String digestAsHex(byte[] input) throws Exception
+ {
+ byte[] digest = digestAsByteArray(input);
+ return Hex.encodeHexString(digest);
+ }
+
private MessageDigest digestAgent;
- //private Base64 base64Encoder = new Base64();
- private byte[] buffer = new byte[4096];
/**
* @author rlemeill
@@ -114,15 +133,15 @@ public class DigestOfFile
* @param file2 second file to compare
* @return true if files are identic false otherwise
*/
- public static boolean md5localHashCompare(File file1,File file2)
+ public static boolean md5HashCompare(File file1,File file2)
{
//compute Hash of exisiting and downloaded
String hashFile1;
String hashFile2;
try{
DigestOfFile md5DigestAgent = new DigestOfFile("MD5");
- hashFile1 = md5DigestAgent.digestAsBase64(file1);
- hashFile2 = md5DigestAgent.digestAsBase64(file2);
+ hashFile1 = md5DigestAgent.digestAsHex(file1);
+ hashFile2 = md5DigestAgent.digestAsHex(file2);
return hashFile1.equals(hashFile2) ; }
catch (Exception e)
{
@@ -134,13 +153,15 @@ public class DigestOfFile
* @param file
* @return md5 hash null if file is not found or other error
*/
- public static String GetLocalMD5Hash(File file)
+ public static String getMD5Hash(File file)
{
String hash;
- try{
+ try
+ {
DigestOfFile md5DigestAgent = new DigestOfFile("MD5");
- hash = md5DigestAgent.digestAsBase64(file);
- return hash; }
+ hash = md5DigestAgent.digestAsHex(file);
+ return hash;
+ }
catch (Exception e)
{
return null; //if there is an error during comparison return files are difs
@@ -155,10 +176,12 @@ public class DigestOfFile
public static String getMD5Hash(byte[] input)
{
String hash;
- try{
+ try
+ {
DigestOfFile md5DigestAgent = new DigestOfFile("MD5");
- hash = md5DigestAgent.digestAsBase64(input);
- return hash; }
+ hash = md5DigestAgent.digestAsHex(input);
+ return hash;
+ }
catch (Exception e)
{
return null; //if there is an error during comparison return files are difs
diff --git a/org.adempiere.report.jasper.webapp/standalone.jrxml b/org.adempiere.report.jasper/test/standalone.jrxml
similarity index 63%
rename from org.adempiere.report.jasper.webapp/standalone.jrxml
rename to org.adempiere.report.jasper/test/standalone.jrxml
index 324e199a68..7b509c9b61 100644
--- a/org.adempiere.report.jasper.webapp/standalone.jrxml
+++ b/org.adempiere.report.jasper/test/standalone.jrxml
@@ -28,124 +28,100 @@
The quick brown fox jumps over the lazy dog.]]>
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
-
-
-
-
-
-
-
-
-
- The quick brown fox jumps over the lazy dog.]]>
-
-
-
-
-
-
-
-
-
-
-
- The quick brown fox jumps over the lazy dog.]]>
-
-
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
-
+
-
+
- The quick brown fox jumps over the lazy dog.]]>
+ The quick brown fox jumps over the lazy dog.]]>
diff --git a/org.adempiere.server-feature/feature.xml b/org.adempiere.server-feature/feature.xml
index 986b6b3330..f2ce1c22c8 100644
--- a/org.adempiere.server-feature/feature.xml
+++ b/org.adempiere.server-feature/feature.xml
@@ -82,13 +82,6 @@
version="0.0.0"
unpack="false"/>
-
-
-
diff --git a/org.adempiere.server-feature/server.product.launch b/org.adempiere.server-feature/server.product.launch
index b8c3b6e294..b9d48921f0 100644
--- a/org.adempiere.server-feature/server.product.launch
+++ b/org.adempiere.server-feature/server.product.launch
@@ -353,7 +353,6 @@
-
diff --git a/pom.xml b/pom.xml
index e4e48dcfe6..96887af1f7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,6 @@
org.adempiere.replication.server
org.adempiere.report.jasper.library
org.adempiere.report.jasper
- org.adempiere.report.jasper.webapp
org.adempiere.server
org.adempiere.ui
org.adempiere.ui.zk