diff --git a/src/JasperStarter/CHANGES b/bin/jasperstarter/CHANGES similarity index 100% rename from src/JasperStarter/CHANGES rename to bin/jasperstarter/CHANGES diff --git a/src/JasperStarter/LICENSE b/bin/jasperstarter/LICENSE similarity index 100% rename from src/JasperStarter/LICENSE rename to bin/jasperstarter/LICENSE diff --git a/src/JasperStarter/NOTICE b/bin/jasperstarter/NOTICE similarity index 100% rename from src/JasperStarter/NOTICE rename to bin/jasperstarter/NOTICE diff --git a/src/JasperStarter/README.md b/bin/jasperstarter/README.md similarity index 100% rename from src/JasperStarter/README.md rename to bin/jasperstarter/README.md diff --git a/src/JasperStarter/bin/jasperstarter b/bin/jasperstarter/bin/jasperstarter similarity index 100% rename from src/JasperStarter/bin/jasperstarter rename to bin/jasperstarter/bin/jasperstarter diff --git a/src/JasperStarter/bin/jasperstarter.exe b/bin/jasperstarter/bin/jasperstarter.exe similarity index 100% rename from src/JasperStarter/bin/jasperstarter.exe rename to bin/jasperstarter/bin/jasperstarter.exe diff --git a/src/JasperStarter/examples/Blank_A4_1.jrxml b/bin/jasperstarter/examples/Blank_A4_1.jrxml similarity index 100% rename from src/JasperStarter/examples/Blank_A4_1.jrxml rename to bin/jasperstarter/examples/Blank_A4_1.jrxml diff --git a/src/JasperStarter/examples/CancelAck.jrxml b/bin/jasperstarter/examples/CancelAck.jrxml similarity index 100% rename from src/JasperStarter/examples/CancelAck.jrxml rename to bin/jasperstarter/examples/CancelAck.jrxml diff --git a/src/JasperStarter/examples/CancelAck.xml b/bin/jasperstarter/examples/CancelAck.xml similarity index 100% rename from src/JasperStarter/examples/CancelAck.xml rename to bin/jasperstarter/examples/CancelAck.xml diff --git a/src/JasperStarter/examples/charactersetTest.jrxml b/bin/jasperstarter/examples/charactersetTest.jrxml similarity index 100% rename from src/JasperStarter/examples/charactersetTest.jrxml rename to bin/jasperstarter/examples/charactersetTest.jrxml diff --git a/src/JasperStarter/examples/charactersetTestWithStudioBuiltinFunctions.jrxml b/bin/jasperstarter/examples/charactersetTestWithStudioBuiltinFunctions.jrxml similarity index 100% rename from src/JasperStarter/examples/charactersetTestWithStudioBuiltinFunctions.jrxml rename to bin/jasperstarter/examples/charactersetTestWithStudioBuiltinFunctions.jrxml diff --git a/src/JasperStarter/examples/contacts.json b/bin/jasperstarter/examples/contacts.json similarity index 100% rename from src/JasperStarter/examples/contacts.json rename to bin/jasperstarter/examples/contacts.json diff --git a/src/JasperStarter/examples/contacts.xml b/bin/jasperstarter/examples/contacts.xml similarity index 100% rename from src/JasperStarter/examples/contacts.xml rename to bin/jasperstarter/examples/contacts.xml diff --git a/src/JasperStarter/examples/csv.jrxml b/bin/jasperstarter/examples/csv.jrxml similarity index 100% rename from src/JasperStarter/examples/csv.jrxml rename to bin/jasperstarter/examples/csv.jrxml diff --git a/src/JasperStarter/examples/csvExampleHeaders.csv b/bin/jasperstarter/examples/csvExampleHeaders.csv similarity index 100% rename from src/JasperStarter/examples/csvExampleHeaders.csv rename to bin/jasperstarter/examples/csvExampleHeaders.csv diff --git a/src/JasperStarter/examples/csvMeta.jrxml b/bin/jasperstarter/examples/csvMeta.jrxml similarity index 100% rename from src/JasperStarter/examples/csvMeta.jrxml rename to bin/jasperstarter/examples/csvMeta.jrxml diff --git a/src/JasperStarter/examples/details.jrxml b/bin/jasperstarter/examples/details.jrxml similarity index 100% rename from src/JasperStarter/examples/details.jrxml rename to bin/jasperstarter/examples/details.jrxml diff --git a/src/JasperStarter/examples/header.jrxml b/bin/jasperstarter/examples/header.jrxml similarity index 100% rename from src/JasperStarter/examples/header.jrxml rename to bin/jasperstarter/examples/header.jrxml diff --git a/src/JasperStarter/examples/i18n-bundle.properties b/bin/jasperstarter/examples/i18n-bundle.properties similarity index 100% rename from src/JasperStarter/examples/i18n-bundle.properties rename to bin/jasperstarter/examples/i18n-bundle.properties diff --git a/src/JasperStarter/examples/i18n-bundle_de.properties b/bin/jasperstarter/examples/i18n-bundle_de.properties similarity index 100% rename from src/JasperStarter/examples/i18n-bundle_de.properties rename to bin/jasperstarter/examples/i18n-bundle_de.properties diff --git a/src/JasperStarter/examples/i18n-bundle_ru.properties b/bin/jasperstarter/examples/i18n-bundle_ru.properties similarity index 100% rename from src/JasperStarter/examples/i18n-bundle_ru.properties rename to bin/jasperstarter/examples/i18n-bundle_ru.properties diff --git a/src/JasperStarter/examples/json.jrxml b/bin/jasperstarter/examples/json.jrxml similarity index 100% rename from src/JasperStarter/examples/json.jrxml rename to bin/jasperstarter/examples/json.jrxml diff --git a/src/JasperStarter/examples/main.jrxml b/bin/jasperstarter/examples/main.jrxml similarity index 100% rename from src/JasperStarter/examples/main.jrxml rename to bin/jasperstarter/examples/main.jrxml diff --git a/src/JasperStarter/examples/noDB-i18n.jrxml b/bin/jasperstarter/examples/noDB-i18n.jrxml similarity index 100% rename from src/JasperStarter/examples/noDB-i18n.jrxml rename to bin/jasperstarter/examples/noDB-i18n.jrxml diff --git a/src/JasperStarter/examples/noDB-params.jrxml b/bin/jasperstarter/examples/noDB-params.jrxml similarity index 100% rename from src/JasperStarter/examples/noDB-params.jrxml rename to bin/jasperstarter/examples/noDB-params.jrxml diff --git a/src/JasperStarter/jdbc/README b/bin/jasperstarter/jdbc/README similarity index 100% rename from src/JasperStarter/jdbc/README rename to bin/jasperstarter/jdbc/README diff --git a/src/JasperStarter/jdbc/mysql-connector-java-5.1.39-bin.jar b/bin/jasperstarter/jdbc/mysql-connector-java-5.1.39-bin.jar similarity index 100% rename from src/JasperStarter/jdbc/mysql-connector-java-5.1.39-bin.jar rename to bin/jasperstarter/jdbc/mysql-connector-java-5.1.39-bin.jar diff --git a/src/JasperStarter/jdbc/postgresql-9.4-1203.jdbc4.jar b/bin/jasperstarter/jdbc/postgresql-9.4-1203.jdbc4.jar similarity index 100% rename from src/JasperStarter/jdbc/postgresql-9.4-1203.jdbc4.jar rename to bin/jasperstarter/jdbc/postgresql-9.4-1203.jdbc4.jar diff --git a/src/JasperStarter/lib/ant-1.7.1.jar b/bin/jasperstarter/lib/ant-1.7.1.jar similarity index 100% rename from src/JasperStarter/lib/ant-1.7.1.jar rename to bin/jasperstarter/lib/ant-1.7.1.jar diff --git a/src/JasperStarter/lib/ant-launcher-1.7.1.jar b/bin/jasperstarter/lib/ant-launcher-1.7.1.jar similarity index 100% rename from src/JasperStarter/lib/ant-launcher-1.7.1.jar rename to bin/jasperstarter/lib/ant-launcher-1.7.1.jar diff --git a/src/JasperStarter/lib/aopalliance-1.0.jar b/bin/jasperstarter/lib/aopalliance-1.0.jar similarity index 100% rename from src/JasperStarter/lib/aopalliance-1.0.jar rename to bin/jasperstarter/lib/aopalliance-1.0.jar diff --git a/src/JasperStarter/lib/argparse4j-0.5.0.jar b/bin/jasperstarter/lib/argparse4j-0.5.0.jar similarity index 100% rename from src/JasperStarter/lib/argparse4j-0.5.0.jar rename to bin/jasperstarter/lib/argparse4j-0.5.0.jar diff --git a/src/JasperStarter/lib/avalon-framework-impl-4.2.0.jar b/bin/jasperstarter/lib/avalon-framework-impl-4.2.0.jar similarity index 100% rename from src/JasperStarter/lib/avalon-framework-impl-4.2.0.jar rename to bin/jasperstarter/lib/avalon-framework-impl-4.2.0.jar diff --git a/src/JasperStarter/lib/barbecue-1.5-beta1.jar b/bin/jasperstarter/lib/barbecue-1.5-beta1.jar similarity index 100% rename from src/JasperStarter/lib/barbecue-1.5-beta1.jar rename to bin/jasperstarter/lib/barbecue-1.5-beta1.jar diff --git a/src/JasperStarter/lib/barcode4j-2.1.jar b/bin/jasperstarter/lib/barcode4j-2.1.jar similarity index 100% rename from src/JasperStarter/lib/barcode4j-2.1.jar rename to bin/jasperstarter/lib/barcode4j-2.1.jar diff --git a/src/JasperStarter/lib/batik-anim-1.7.jar b/bin/jasperstarter/lib/batik-anim-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-anim-1.7.jar rename to bin/jasperstarter/lib/batik-anim-1.7.jar diff --git a/src/JasperStarter/lib/batik-awt-util-1.7.jar b/bin/jasperstarter/lib/batik-awt-util-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-awt-util-1.7.jar rename to bin/jasperstarter/lib/batik-awt-util-1.7.jar diff --git a/src/JasperStarter/lib/batik-bridge-1.7.jar b/bin/jasperstarter/lib/batik-bridge-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-bridge-1.7.jar rename to bin/jasperstarter/lib/batik-bridge-1.7.jar diff --git a/src/JasperStarter/lib/batik-css-1.7.jar b/bin/jasperstarter/lib/batik-css-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-css-1.7.jar rename to bin/jasperstarter/lib/batik-css-1.7.jar diff --git a/src/JasperStarter/lib/batik-dom-1.7.jar b/bin/jasperstarter/lib/batik-dom-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-dom-1.7.jar rename to bin/jasperstarter/lib/batik-dom-1.7.jar diff --git a/src/JasperStarter/lib/batik-ext-1.7.jar b/bin/jasperstarter/lib/batik-ext-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-ext-1.7.jar rename to bin/jasperstarter/lib/batik-ext-1.7.jar diff --git a/src/JasperStarter/lib/batik-gvt-1.7.jar b/bin/jasperstarter/lib/batik-gvt-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-gvt-1.7.jar rename to bin/jasperstarter/lib/batik-gvt-1.7.jar diff --git a/src/JasperStarter/lib/batik-js-1.7.jar b/bin/jasperstarter/lib/batik-js-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-js-1.7.jar rename to bin/jasperstarter/lib/batik-js-1.7.jar diff --git a/src/JasperStarter/lib/batik-parser-1.7.jar b/bin/jasperstarter/lib/batik-parser-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-parser-1.7.jar rename to bin/jasperstarter/lib/batik-parser-1.7.jar diff --git a/src/JasperStarter/lib/batik-script-1.7.jar b/bin/jasperstarter/lib/batik-script-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-script-1.7.jar rename to bin/jasperstarter/lib/batik-script-1.7.jar diff --git a/src/JasperStarter/lib/batik-svg-dom-1.7.jar b/bin/jasperstarter/lib/batik-svg-dom-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-svg-dom-1.7.jar rename to bin/jasperstarter/lib/batik-svg-dom-1.7.jar diff --git a/src/JasperStarter/lib/batik-svggen-1.7.jar b/bin/jasperstarter/lib/batik-svggen-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-svggen-1.7.jar rename to bin/jasperstarter/lib/batik-svggen-1.7.jar diff --git a/src/JasperStarter/lib/batik-util-1.7.jar b/bin/jasperstarter/lib/batik-util-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-util-1.7.jar rename to bin/jasperstarter/lib/batik-util-1.7.jar diff --git a/src/JasperStarter/lib/batik-xml-1.7.jar b/bin/jasperstarter/lib/batik-xml-1.7.jar similarity index 100% rename from src/JasperStarter/lib/batik-xml-1.7.jar rename to bin/jasperstarter/lib/batik-xml-1.7.jar diff --git a/src/JasperStarter/lib/bcmail-jdk14-1.38.jar b/bin/jasperstarter/lib/bcmail-jdk14-1.38.jar similarity index 100% rename from src/JasperStarter/lib/bcmail-jdk14-1.38.jar rename to bin/jasperstarter/lib/bcmail-jdk14-1.38.jar diff --git a/src/JasperStarter/lib/bcmail-jdk14-138.jar b/bin/jasperstarter/lib/bcmail-jdk14-138.jar similarity index 100% rename from src/JasperStarter/lib/bcmail-jdk14-138.jar rename to bin/jasperstarter/lib/bcmail-jdk14-138.jar diff --git a/src/JasperStarter/lib/bcprov-jdk14-1.38.jar b/bin/jasperstarter/lib/bcprov-jdk14-1.38.jar similarity index 100% rename from src/JasperStarter/lib/bcprov-jdk14-1.38.jar rename to bin/jasperstarter/lib/bcprov-jdk14-1.38.jar diff --git a/src/JasperStarter/lib/bcprov-jdk14-138.jar b/bin/jasperstarter/lib/bcprov-jdk14-138.jar similarity index 100% rename from src/JasperStarter/lib/bcprov-jdk14-138.jar rename to bin/jasperstarter/lib/bcprov-jdk14-138.jar diff --git a/src/JasperStarter/lib/bctsp-jdk14-1.38.jar b/bin/jasperstarter/lib/bctsp-jdk14-1.38.jar similarity index 100% rename from src/JasperStarter/lib/bctsp-jdk14-1.38.jar rename to bin/jasperstarter/lib/bctsp-jdk14-1.38.jar diff --git a/src/JasperStarter/lib/castor-core-1.3.3.jar b/bin/jasperstarter/lib/castor-core-1.3.3.jar similarity index 100% rename from src/JasperStarter/lib/castor-core-1.3.3.jar rename to bin/jasperstarter/lib/castor-core-1.3.3.jar diff --git a/src/JasperStarter/lib/castor-xml-1.3.3.jar b/bin/jasperstarter/lib/castor-xml-1.3.3.jar similarity index 100% rename from src/JasperStarter/lib/castor-xml-1.3.3.jar rename to bin/jasperstarter/lib/castor-xml-1.3.3.jar diff --git a/src/JasperStarter/lib/commons-beanutils-1.9.0.jar b/bin/jasperstarter/lib/commons-beanutils-1.9.0.jar similarity index 100% rename from src/JasperStarter/lib/commons-beanutils-1.9.0.jar rename to bin/jasperstarter/lib/commons-beanutils-1.9.0.jar diff --git a/src/JasperStarter/lib/commons-cli-1.0.jar b/bin/jasperstarter/lib/commons-cli-1.0.jar similarity index 100% rename from src/JasperStarter/lib/commons-cli-1.0.jar rename to bin/jasperstarter/lib/commons-cli-1.0.jar diff --git a/src/JasperStarter/lib/commons-codec-1.5.jar b/bin/jasperstarter/lib/commons-codec-1.5.jar similarity index 100% rename from src/JasperStarter/lib/commons-codec-1.5.jar rename to bin/jasperstarter/lib/commons-codec-1.5.jar diff --git a/src/JasperStarter/lib/commons-collections-3.2.1.jar b/bin/jasperstarter/lib/commons-collections-3.2.1.jar similarity index 100% rename from src/JasperStarter/lib/commons-collections-3.2.1.jar rename to bin/jasperstarter/lib/commons-collections-3.2.1.jar diff --git a/src/JasperStarter/lib/commons-digester-2.1.jar b/bin/jasperstarter/lib/commons-digester-2.1.jar similarity index 100% rename from src/JasperStarter/lib/commons-digester-2.1.jar rename to bin/jasperstarter/lib/commons-digester-2.1.jar diff --git a/src/JasperStarter/lib/commons-io-2.4.jar b/bin/jasperstarter/lib/commons-io-2.4.jar similarity index 100% rename from src/JasperStarter/lib/commons-io-2.4.jar rename to bin/jasperstarter/lib/commons-io-2.4.jar diff --git a/src/JasperStarter/lib/commons-lang-2.6.jar b/bin/jasperstarter/lib/commons-lang-2.6.jar similarity index 100% rename from src/JasperStarter/lib/commons-lang-2.6.jar rename to bin/jasperstarter/lib/commons-lang-2.6.jar diff --git a/src/JasperStarter/lib/commons-logging-1.1.1.jar b/bin/jasperstarter/lib/commons-logging-1.1.1.jar similarity index 100% rename from src/JasperStarter/lib/commons-logging-1.1.1.jar rename to bin/jasperstarter/lib/commons-logging-1.1.1.jar diff --git a/src/JasperStarter/lib/core-2.3.0.jar b/bin/jasperstarter/lib/core-2.3.0.jar similarity index 100% rename from src/JasperStarter/lib/core-2.3.0.jar rename to bin/jasperstarter/lib/core-2.3.0.jar diff --git a/src/JasperStarter/lib/ecj-4.3.1.jar b/bin/jasperstarter/lib/ecj-4.3.1.jar similarity index 100% rename from src/JasperStarter/lib/ecj-4.3.1.jar rename to bin/jasperstarter/lib/ecj-4.3.1.jar diff --git a/src/JasperStarter/lib/groovy-all-2.4.1.jar b/bin/jasperstarter/lib/groovy-all-2.4.1.jar similarity index 100% rename from src/JasperStarter/lib/groovy-all-2.4.1.jar rename to bin/jasperstarter/lib/groovy-all-2.4.1.jar diff --git a/src/JasperStarter/lib/itext-2.1.7.js2.jar b/bin/jasperstarter/lib/itext-2.1.7.js2.jar similarity index 100% rename from src/JasperStarter/lib/itext-2.1.7.js2.jar rename to bin/jasperstarter/lib/itext-2.1.7.js2.jar diff --git a/src/JasperStarter/lib/jackson-annotations-2.1.4.jar b/bin/jasperstarter/lib/jackson-annotations-2.1.4.jar similarity index 100% rename from src/JasperStarter/lib/jackson-annotations-2.1.4.jar rename to bin/jasperstarter/lib/jackson-annotations-2.1.4.jar diff --git a/src/JasperStarter/lib/jackson-core-2.1.4.jar b/bin/jasperstarter/lib/jackson-core-2.1.4.jar similarity index 100% rename from src/JasperStarter/lib/jackson-core-2.1.4.jar rename to bin/jasperstarter/lib/jackson-core-2.1.4.jar diff --git a/src/JasperStarter/lib/jackson-databind-2.1.4.jar b/bin/jasperstarter/lib/jackson-databind-2.1.4.jar similarity index 100% rename from src/JasperStarter/lib/jackson-databind-2.1.4.jar rename to bin/jasperstarter/lib/jackson-databind-2.1.4.jar diff --git a/src/JasperStarter/lib/jakarta-regexp-1.4.jar b/bin/jasperstarter/lib/jakarta-regexp-1.4.jar similarity index 100% rename from src/JasperStarter/lib/jakarta-regexp-1.4.jar rename to bin/jasperstarter/lib/jakarta-regexp-1.4.jar diff --git a/src/JasperStarter/lib/jasperreports-6.1.0.jar b/bin/jasperstarter/lib/jasperreports-6.1.0.jar similarity index 100% rename from src/JasperStarter/lib/jasperreports-6.1.0.jar rename to bin/jasperstarter/lib/jasperreports-6.1.0.jar diff --git a/src/JasperStarter/lib/jasperreports-fonts-6.0.0.jar b/bin/jasperstarter/lib/jasperreports-fonts-6.0.0.jar similarity index 100% rename from src/JasperStarter/lib/jasperreports-fonts-6.0.0.jar rename to bin/jasperstarter/lib/jasperreports-fonts-6.0.0.jar diff --git a/src/JasperStarter/lib/jasperreports-functions-6.1.0.jar b/bin/jasperstarter/lib/jasperreports-functions-6.1.0.jar similarity index 100% rename from src/JasperStarter/lib/jasperreports-functions-6.1.0.jar rename to bin/jasperstarter/lib/jasperreports-functions-6.1.0.jar diff --git a/src/JasperStarter/lib/jasperstarter.jar b/bin/jasperstarter/lib/jasperstarter.jar similarity index 100% rename from src/JasperStarter/lib/jasperstarter.jar rename to bin/jasperstarter/lib/jasperstarter.jar diff --git a/src/JasperStarter/lib/javax.inject-1.jar b/bin/jasperstarter/lib/javax.inject-1.jar similarity index 100% rename from src/JasperStarter/lib/javax.inject-1.jar rename to bin/jasperstarter/lib/javax.inject-1.jar diff --git a/src/JasperStarter/lib/jcalendar-1.4.jar b/bin/jasperstarter/lib/jcalendar-1.4.jar similarity index 100% rename from src/JasperStarter/lib/jcalendar-1.4.jar rename to bin/jasperstarter/lib/jcalendar-1.4.jar diff --git a/src/JasperStarter/lib/jcommon-1.0.15.jar b/bin/jasperstarter/lib/jcommon-1.0.15.jar similarity index 100% rename from src/JasperStarter/lib/jcommon-1.0.15.jar rename to bin/jasperstarter/lib/jcommon-1.0.15.jar diff --git a/src/JasperStarter/lib/jfreechart-1.0.12.jar b/bin/jasperstarter/lib/jfreechart-1.0.12.jar similarity index 100% rename from src/JasperStarter/lib/jfreechart-1.0.12.jar rename to bin/jasperstarter/lib/jfreechart-1.0.12.jar diff --git a/src/JasperStarter/lib/joda-time-2.0.jar b/bin/jasperstarter/lib/joda-time-2.0.jar similarity index 100% rename from src/JasperStarter/lib/joda-time-2.0.jar rename to bin/jasperstarter/lib/joda-time-2.0.jar diff --git a/src/JasperStarter/lib/log4j-1.2.17.jar b/bin/jasperstarter/lib/log4j-1.2.17.jar similarity index 100% rename from src/JasperStarter/lib/log4j-1.2.17.jar rename to bin/jasperstarter/lib/log4j-1.2.17.jar diff --git a/src/JasperStarter/lib/lucene-analyzers-common-4.5.1.jar b/bin/jasperstarter/lib/lucene-analyzers-common-4.5.1.jar similarity index 100% rename from src/JasperStarter/lib/lucene-analyzers-common-4.5.1.jar rename to bin/jasperstarter/lib/lucene-analyzers-common-4.5.1.jar diff --git a/src/JasperStarter/lib/lucene-core-4.5.1.jar b/bin/jasperstarter/lib/lucene-core-4.5.1.jar similarity index 100% rename from src/JasperStarter/lib/lucene-core-4.5.1.jar rename to bin/jasperstarter/lib/lucene-core-4.5.1.jar diff --git a/src/JasperStarter/lib/lucene-queries-4.5.1.jar b/bin/jasperstarter/lib/lucene-queries-4.5.1.jar similarity index 100% rename from src/JasperStarter/lib/lucene-queries-4.5.1.jar rename to bin/jasperstarter/lib/lucene-queries-4.5.1.jar diff --git a/src/JasperStarter/lib/lucene-queryparser-4.5.1.jar b/bin/jasperstarter/lib/lucene-queryparser-4.5.1.jar similarity index 100% rename from src/JasperStarter/lib/lucene-queryparser-4.5.1.jar rename to bin/jasperstarter/lib/lucene-queryparser-4.5.1.jar diff --git a/src/JasperStarter/lib/lucene-sandbox-4.5.1.jar b/bin/jasperstarter/lib/lucene-sandbox-4.5.1.jar similarity index 100% rename from src/JasperStarter/lib/lucene-sandbox-4.5.1.jar rename to bin/jasperstarter/lib/lucene-sandbox-4.5.1.jar diff --git a/src/JasperStarter/lib/olap4j-0.9.7.309-JS-3.jar b/bin/jasperstarter/lib/olap4j-0.9.7.309-JS-3.jar similarity index 100% rename from src/JasperStarter/lib/olap4j-0.9.7.309-JS-3.jar rename to bin/jasperstarter/lib/olap4j-0.9.7.309-JS-3.jar diff --git a/src/JasperStarter/lib/poi-3.10-FINAL.jar b/bin/jasperstarter/lib/poi-3.10-FINAL.jar similarity index 100% rename from src/JasperStarter/lib/poi-3.10-FINAL.jar rename to bin/jasperstarter/lib/poi-3.10-FINAL.jar diff --git a/src/JasperStarter/lib/servlet-api-2.5.jar b/bin/jasperstarter/lib/servlet-api-2.5.jar similarity index 100% rename from src/JasperStarter/lib/servlet-api-2.5.jar rename to bin/jasperstarter/lib/servlet-api-2.5.jar diff --git a/src/JasperStarter/lib/spring-aop-3.0.6.RELEASE.jar b/bin/jasperstarter/lib/spring-aop-3.0.6.RELEASE.jar similarity index 100% rename from src/JasperStarter/lib/spring-aop-3.0.6.RELEASE.jar rename to bin/jasperstarter/lib/spring-aop-3.0.6.RELEASE.jar diff --git a/src/JasperStarter/lib/spring-asm-3.0.6.RELEASE.jar b/bin/jasperstarter/lib/spring-asm-3.0.6.RELEASE.jar similarity index 100% rename from src/JasperStarter/lib/spring-asm-3.0.6.RELEASE.jar rename to bin/jasperstarter/lib/spring-asm-3.0.6.RELEASE.jar diff --git a/src/JasperStarter/lib/spring-beans-3.0.6.RELEASE.jar b/bin/jasperstarter/lib/spring-beans-3.0.6.RELEASE.jar similarity index 100% rename from src/JasperStarter/lib/spring-beans-3.0.6.RELEASE.jar rename to bin/jasperstarter/lib/spring-beans-3.0.6.RELEASE.jar diff --git a/src/JasperStarter/lib/spring-context-3.0.6.RELEASE.jar b/bin/jasperstarter/lib/spring-context-3.0.6.RELEASE.jar similarity index 100% rename from src/JasperStarter/lib/spring-context-3.0.6.RELEASE.jar rename to bin/jasperstarter/lib/spring-context-3.0.6.RELEASE.jar diff --git a/src/JasperStarter/lib/spring-core-3.0.6.RELEASE.jar b/bin/jasperstarter/lib/spring-core-3.0.6.RELEASE.jar similarity index 100% rename from src/JasperStarter/lib/spring-core-3.0.6.RELEASE.jar rename to bin/jasperstarter/lib/spring-core-3.0.6.RELEASE.jar diff --git a/src/JasperStarter/lib/spring-expression-3.0.6.RELEASE.jar b/bin/jasperstarter/lib/spring-expression-3.0.6.RELEASE.jar similarity index 100% rename from src/JasperStarter/lib/spring-expression-3.0.6.RELEASE.jar rename to bin/jasperstarter/lib/spring-expression-3.0.6.RELEASE.jar diff --git a/src/JasperStarter/lib/stax-1.2.0.jar b/bin/jasperstarter/lib/stax-1.2.0.jar similarity index 100% rename from src/JasperStarter/lib/stax-1.2.0.jar rename to bin/jasperstarter/lib/stax-1.2.0.jar diff --git a/src/JasperStarter/lib/stax-api-1.0-2.jar b/bin/jasperstarter/lib/stax-api-1.0-2.jar similarity index 100% rename from src/JasperStarter/lib/stax-api-1.0-2.jar rename to bin/jasperstarter/lib/stax-api-1.0-2.jar diff --git a/src/JasperStarter/lib/stax-api-1.0.1.jar b/bin/jasperstarter/lib/stax-api-1.0.1.jar similarity index 100% rename from src/JasperStarter/lib/stax-api-1.0.1.jar rename to bin/jasperstarter/lib/stax-api-1.0.1.jar diff --git a/src/JasperStarter/lib/xalan-2.6.0.jar b/bin/jasperstarter/lib/xalan-2.6.0.jar similarity index 100% rename from src/JasperStarter/lib/xalan-2.6.0.jar rename to bin/jasperstarter/lib/xalan-2.6.0.jar diff --git a/src/JasperStarter/lib/xml-apis-1.3.02.jar b/bin/jasperstarter/lib/xml-apis-1.3.02.jar similarity index 100% rename from src/JasperStarter/lib/xml-apis-1.3.02.jar rename to bin/jasperstarter/lib/xml-apis-1.3.02.jar diff --git a/src/JasperStarter/lib/xml-apis-ext-1.3.04.jar b/bin/jasperstarter/lib/xml-apis-ext-1.3.04.jar similarity index 100% rename from src/JasperStarter/lib/xml-apis-ext-1.3.04.jar rename to bin/jasperstarter/lib/xml-apis-ext-1.3.04.jar diff --git a/composer.json b/composer.json index ece0c91..b07cfc8 100755 --- a/composer.json +++ b/composer.json @@ -36,8 +36,6 @@ "phpunit/phpunit": "4.8.*" }, "autoload": { - "psr-0": { - "JasperPHP": "src/" - } + "psr-4": { "JasperPHP\\": "src/" } } } diff --git a/examples/example.php b/examples/example.php index af8da5f..d9d3593 100755 --- a/examples/example.php +++ b/examples/example.php @@ -1,6 +1,5 @@ executable = 'jasperstarter'; + $this->path_executable = __DIR__ . '/../bin/jasperstarter/bin'; + $this->windows = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' ? true : false; + } + + /** + * @param $input_file + * @param bool $output_file + * @return $this + * @throws Exception\InvalidInputFile + */ + public function compile($input_file, $output_file = false) + { + if (!$input_file) { + throw new \JasperPHP\Exception\InvalidInputFile(); + } + + $this->command = $this->windows ? $this->executable : './' . $this->executable; + $this->command .= ' compile '; + $this->command .= "\"$input_file\""; + + if ($output_file !== false) { + $this->command .= ' -o ' . "\"$output_file\""; + } + + return $this; + } + + + /** + * @param $input_file + * @param bool $output_file + * @param array $options + * @return $this + * @throws Exception\InvalidInputFile + * @throws Exception\InvalidFormat + */ + public function process($input_file, $output_file = false, $options = []) + { + $options = $this->parseProcessOptions($options); + if (!$input_file) { + throw new \JasperPHP\Exception\InvalidInputFile(); + } + $this->validateFormat($options['format']); + + $this->command = $this->windows ? $this->executable : './' . $this->executable; + if ($options['locale']) { + $this->command .= " --locale {$options['locale']}"; + } + + $this->command .= ' process '; + $this->command .= "\"$input_file\""; + if ($output_file !== false) { + $this->command .= ' -o ' . "\"$output_file\""; + } + + $this->command .= ' -f ' . join(' ', $options['format']); + if ($options['params']) { + $this->command .= ' -P '; + foreach ($options['params'] as $key => $value) { + $this->command .= " " . $key . '="' . $value . '" ' . " "; + } + } + + return $this; + } + + /** + * + * @param $options + * @return array + */ + protected function parseProcessOptions($options) + { + $defaultOptions = [ + 'format' => ['pdf'], + 'params' => [], + 'locale' => false, + 'db_connection' => [] + ]; + + return array_merge($defaultOptions, $options); + } + + /** + * @param $format + * @throws Exception\InvalidFormat + */ + protected function validateFormat($format) + { + if (!is_array($format)) { + $format = [$format]; + } + foreach ($format as $value) { + if (!in_array($value, $this->formats)) { + throw new \JasperPHP\Exception\InvalidFormat(); + } + } + } + + /** + * @param $input_file + * @return $this + * @throws \Exception + */ + public function listParameters($input_file) + { + if (!$input_file) { + throw new \JasperPHP\Exception\InvalidInputFile(); + } + + $this->command = $this->windows ? $this->executable : './' . $this->executable; + $this->command .= ' list_parameters '; + $this->command .= "\"$input_file\""; + + return $this; + } + + /** + * @param bool $user + * @return mixed + * @throws Exception\InvalidCommandExecutable + * @throws Exception\InvalidResourceDirectory + * @throws Exception\ErrorCommandExecutable + */ + public function execute($user = false) + { + $this->validateExecute(); + $this->addUserToCommand($user); + + $output = []; + $return_var = 0; + + chdir($this->path_executable); + exec($this->command, $output, $return_var); + if ($return_var !== 0) { + throw new \JasperPHP\Exception\ErrorCommandExecutable(); + } + + return $output; + } + + /** + * @return string + */ + public function output() + { + return $this->command; + } + + /** + * @param $user + */ + protected function addUserToCommand($user) + { + if ($user && !$this->windows) { + $this->command = 'su -u ' . $user . " -c \"" . $this->command . "\""; + } + } + + /** + * @throws Exception\InvalidCommandExecutable + * @throws Exception\InvalidResourceDirectory + */ + protected function validateExecute() + { + if (!$this->command) { + throw new \JasperPHP\Exception\InvalidCommandExecutable(); + } + if (!is_dir ($this->path_executable)) { + throw new \JasperPHP\Exception\InvalidResourceDirectory(); + } + + } + +} \ No newline at end of file diff --git a/src/JasperPHP/JasperPHP.php b/src/JasperPHP/JasperPHP.php deleted file mode 100755 index fc43772..0000000 --- a/src/JasperPHP/JasperPHP.php +++ /dev/null @@ -1,210 +0,0 @@ -path_executable = __DIR__ . '/../JasperStarter/bin'; //Path to executable - if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $this->windows = true; - } - - if (!$resource_dir) { - $this->resource_directory = __DIR__ . '/../../../vendor/geekcom/jasperphp/src/JasperStarter/bin'; - } else { - if (!file_exists($resource_dir)) { - throw new \Exception('Invalid resource directory.', 1); - } - - $this->resource_directory = $resource_dir; - } - } - - public static function __callStatic($method, $parameters) - { - // Create a new instance of the called class, in this case it is Post - $model = get_called_class(); - - // Call the requested method on the newly created object - return call_user_func_array(array(new $model, $method), $parameters); - } - - public function compile($input_file, $output_file = false) - { - if (is_null($input_file) || empty($input_file)) { - throw new \Exception('No input file', 1); - } - - $command = ($this->windows) ? $this->executable : './' . $this->executable; - - $command .= ' compile '; - - $command .= "\"$input_file\""; - - if ($output_file !== false) { - $command .= ' -o ' . "\"$output_file\""; - } - - $this->the_command = $command; - - return $this; - } - - public function process($input_file, $output_file = false, $format = ['pdf'], $parameters = [], $db_connection = [], $locale = false) - { - if (is_null($input_file) || empty($input_file)) { - throw new \Exception('No input file', 1); - } - - if (is_array($format)) { - foreach ($format as $key) { - if (!in_array($key, $this->formats)) { - throw new \Exception('Invalid format!', 1); - } - } - } else { - if (!in_array($format, $this->formats)) { - throw new \Exception('Invalid format!', 1); - } - } - - $command = ($this->windows) ? $this->executable : './' . $this->executable; - - $command .= ($locale) ? " --locale $locale" : ''; - - $command .= ' process '; - - $command .= "\"$input_file\""; - - if ($output_file !== false) { - $command .= ' -o ' . "\"$output_file\""; - } - - if (is_array($format)) { - $command .= ' -f ' . join(' ', $format); - } else { - $command .= ' -f ' . $format; - } - - if (count($parameters) > 0) { - $command .= ' -P '; - - foreach ($parameters as $key => $value) { - $param = $key . '="' . $value . '" '; - $command .= " " . $param . " "; - } - - } - - if (count($db_connection) > 0) { - $command .= ' -t ' . $db_connection['driver']; - - if (isset($db_connection['username'])) { - $command .= " -u " . $db_connection['username']; - } - - if (isset($db_connection['password']) && !empty($db_connection['password'])) { - $command .= ' -p ' . $db_connection['password']; - } - - if (isset($db_connection['host']) && !empty($db_connection['host'])) { - $command .= ' -H ' . $db_connection['host']; - } - - if (isset($db_connection['database']) && !empty($db_connection['database'])) { - $command .= ' -n ' . $db_connection['database']; - } - - if (isset($db_connection['port']) && !empty($db_connection['port'])) { - $command .= ' --db-port ' . $db_connection['port']; - } - - if (isset($db_connection['jdbc_driver']) && !empty($db_connection['jdbc_driver'])) { - $command .= ' --db-driver ' . $db_connection['jdbc_driver']; - } - - if (isset($db_connection['jdbc_url']) && !empty($db_connection['jdbc_url'])) { - $command .= ' --db-url ' . $db_connection['jdbc_url']; - } - - if (isset($db_connection['jdbc_dir']) && !empty($db_connection['jdbc_dir'])) { - $command .= ' --jdbc-dir ' . $db_connection['jdbc_dir']; - } - - if (isset($db_connection['db_sid']) && !empty($db_connection['db_sid'])) { - $command .= ' --db-sid ' . $db_connection['db_sid']; - } - - if (isset($db_connection['xml_xpath'])) { - $command .= ' --xml-xpath ' . $db_connection['xml_xpath']; - } - - if (isset($db_connection['data_file'])) { - $command .= ' --data-file ' . $db_connection['data_file']; - } - - if (isset($db_connection['json_query'])) { - $command .= ' --json-query ' . $db_connection['json_query']; - } - } - - $this->the_command = $command; - - return $this; - } - - public function list_parameters($input_file) - { - if (is_null($input_file) || empty($input_file)) { - throw new \Exception('No input file', 1); - } - - $command = ($this->windows) ? $this->executable : './' . $this->executable; - - $command .= ' list_parameters '; - - $command .= "\"$input_file\""; - - $this->the_command = $command; - - return $this; - } - - public function output() - { - return $this->the_command; - } - - public function execute($run_as_user = false) - { - if ($run_as_user !== false && strlen($run_as_user > 0) && !$this->windows) { - $this->the_command = 'su -u ' . $run_as_user . " -c \"" . $this->the_command . "\""; - } - - $output = []; - $return_var = 0; - - if (is_dir($this->path_executable)) { - chdir($this->path_executable); - exec($this->the_command, $output, $return_var); - } else { - throw new \Exception('Invalid resource directory.', 1); - } - - if ($return_var != 0) { - throw new \Exception('Your report has an error and couldn \'t be processed!\ Try to output the command using the function `output();` and run it manually in the console.', 1); - } - - return $output; - } -} \ No newline at end of file diff --git a/src/JasperPHP/JasperPHPServiceProvider.php b/src/Service/JasperPHPServiceProvider.php similarity index 100% rename from src/JasperPHP/JasperPHPServiceProvider.php rename to src/Service/JasperPHPServiceProvider.php diff --git a/tests/JasperPHP/JasperPHPTest.php b/tests/JasperPHP/JasperPHPTest.php index f8d9764..f601c5f 100644 --- a/tests/JasperPHP/JasperPHPTest.php +++ b/tests/JasperPHP/JasperPHPTest.php @@ -1,18 +1,121 @@ + * @package JasperPHP + */ +class JasperPHPTest extends \PHPUnit_Framework_TestCase { /** - * - */ - public function testCompileWithWrongArgs() - { + * + */ + public function testConstructor() + { + $this->assertInstanceOf(JasperPHP::class, new JasperPHP()); + } + + /** + * + */ + public function testCompileWithWrongInput() + { + $this->setExpectedException(\JasperPHP\Exception\InvalidInputFile::class); + + $jasper = new JasperPHP(); + $jasper->compile(null); + } + + /** + * + */ + public function testCompile() + { + $jasper = new JasperPHP(); + $result = $jasper->compile('hello_world.jrxml'); + + $this->assertInstanceOf(JasperPHP::class, $result); + $this->assertEquals('./jasperstarter compile "hello_world.jrxml"', $result->output()); + } + + /** + * + */ + public function testExecuteWithoutCompile() + { + $this->setExpectedException(\JasperPHP\Exception\InvalidCommandExecutable::class); + + $jasper = new JasperPHP(); + $jasper->execute(); + } + + /** + * + */ + public function testExecuteWithCompile() + { + $this->setExpectedException(\JasperPHP\Exception\ErrorCommandExecutable::class); + + $jasper = new JasperPHP(); + $jasper->compile('hello_world.jrxml')->execute(); + } + + /** + * + */ + public function testListParametersWithWrongInput() + { + $this->setExpectedException(\JasperPHP\Exception\InvalidInputFile::class); - } + $jasper = new JasperPHP(); + $jasper->listParameters(''); + } - public function testCompile() + /** + * + */ + public function testListParameters() + { + $jasper = new JasperPHP(); + $result = $jasper->listParameters('hello_world.jrxml'); + + $this->assertInstanceOf(JasperPHP::class, $result); + $this->assertEquals('./jasperstarter list_parameters "hello_world.jrxml"', $result->output()); + } + + /** + * + */ + public function testProcessWithWrongInput() + { + $this->setExpectedException(\JasperPHP\Exception\InvalidInputFile::class); + + $jasper = new JasperPHP(); + $jasper->process(0); + } + + /** + * + */ + public function testProcessWithWrongFormat() + { + $this->setExpectedException(\JasperPHP\Exception\InvalidFormat::class); + + $jasper = new JasperPHP(); + $jasper->process('hello_world.jrxml', false, [ + 'format' => 'mp3' + ]); + } + + /** + * + */ + public function testProcess() { - + $jasper = new JasperPHP(); + $this->assertInstanceOf(JasperPHP::class, $jasper->process('hello_world.jrxml')); } -} +} \ No newline at end of file