DESCRIPTION
This file contains information about libraries that are supported
by code in OFBiz but that are left out of SVN because of licensing issues.
What is below is a list of jar files and where to put them, and the file(s)
to change to include them in the OFBiz build and/or run-time configuration.

NOTE: While these aren't included in the main SVN repository they are available
on the old Undersun SVN server in the specialized/libraries component directory.

-=- Scripting: ________________________________________________________________________________________________________________________________________________

-JavaScript/Rhino (NPL 1.1):
  http://www.mozilla.org/js
  TO BUILD comment out exclude: base/build.xml:org/ofbiz/base/util/OfbizJsBsfEngine.java

-applets (Netscape javascript plugin : Sun Binary Code License Agreement - BCLA)
  Developpers : http://wp.netscape.com/eng/mozilla/3.0/handbook/javascript/packages.htm
  This link is also interesting : http://forum.java.sun.com/thread.jspa?threadID=516303&tstart=225
  NOTE: applications/product/src/ShipmentScaleApplet.java needs  netscape.javascript.JSObject
     If you're using the Sun JDK/JRE 1.4 or greater, the jar is located under jre/lib and it's called plugin.jar.
     You may also find it in the old Undersun SVN server in the specialized/libraries component directory.
  TO BUILD: Copy plugin.jar in framework/base/lib. This seems only needed under Windows.


-=- Reporting: ________________________________________________________________________________________________________________________________________________

-JasperReports (LGPL):
  http://sourceforge.net/projects/jasperreports
  TO BUILD comment out excludes:
    framework/webapp/build.xml:org/ofbiz/webapp/view/JasperReportsPdfViewHandler.java,org/ofbiz/webapp/view/JasperReportsXmlViewHandler.java
    applications/content/build.xml:org/ofbiz/content/report/JREntityListIteratorDataSource.java,org/ofbiz/content/report/JRMapCollectionDataSource.java

- JIMI (used by FOP ):
  http://java.sun.com/products/jimi
    FOP may require a library called JIMI to print certain graphical formats such as GIFs.  Jimi is a Sun library which cannot
    be included in OFBIZ due to licensing incompatibility, but you can download it yourself at: http://java.sun.com/products/jimi/
    and rename the ZIP file that comes with it as jimi-xxx.jar, then copy it into the same directory as fop.jar, which at this time
    is ${ofbiz.home}/framework/webapp/lib/

-=- POS _______________________________________________________________________________________________________________________________________________________

-GTK Swing (LGPL):
  http://sourceforge.net/projects/gtkswing/
  TO DEPLOY: base/config/pos-containers.xml:org.gtk.java.swing.plaf.gtk.GtkLookAndFeel for look and feel
-JavaPOS hardware drivers
  TO DEPLOY: specialpurpose/pos/lib/

  Epson Printer TM-T88III (Proprietay licence) needs jpos18-controls.jar (version specific)
  https://www.epson-pos.com/cgi-bin/sdssm/main/td_login.jsp
     epsonJposService180.jar
     epsonJposServiceCommon.jar

 Star (Proprietay licence)
 http://www.star-micronics.co.jp/service/s_print/starjavapos_win32-linux-macosx_yyyymmdd.zip.htm
     starjavapos.jar


-=- Office (Word, etc) File Handling __________________________________________________________________________________________________________________________

-OpenOffice UNO (LGPL)
  http://udk.openoffice.org/
  applications/content/lib/uno:
    XFlatXml.jar
    XMergeBridge.jar
    XSLTFilter.jar
    XSLTValidate.jar
    htmlsoff.jar
    java_uno.jar
    java_uno_accessbridge.jar
    juh.jar
    jurt.jar
    jut.jar
    officebean.jar
    ridl.jar
    unoil.jar
  TO BUILD comment out exclude: applications/content/build.xml:org/ofbiz/content/openoffice/*

-=- Accounting: Payment Processing ____________________________________________________________________________________________________________________________

-CyberSource
  applications/accounting/lib/cybersource:
    cybsclients.jar
    cybssecurity.jar
  TO BUILD comment out exclude: applications/accounting/build.xml:org/ofbiz/accounting/thirdparty/cybersource/**

-Securepay
  applications/accounting/lib/cybersource:
  Base64.jar
  securepayxmlapi_obf.jar
  xercesImpl-2.4.0.jar
  xmlParserAPIs-2.4.0.jar
  TO BUILD comment out exclude: applications/accounting/build.xml:org/ofbiz/accounting/thirdparty/securepay/**

-WorldPay
  applications/accounting/lib/worldpay:
    config
    config/currency.properties
    config/keystore
    config/keystore/wcc
    config/keystore/wcc/public-1.key
    config/keystore/wcc/revision
    cryptix-lib
    cryptix-lib/Cryptix.properties
    cryptix.jar
    ijce-lib
    ijce-lib/IJCE.properties
    ijce-lib/java.security.fallback
    ijce-lib/TargetHelp.html
    readme.txt
    select.jar
    select.properties
  TO BUILD comment out exclude: applications/accounting/build.xml:org/ofbiz/accounting/thirdparty/worldpay/**
