pax_global_header00006660000000000000000000000064115212503330014505gustar00rootroot0000000000000052 comment=d2e0da329a2c11a2baa4bcf3785d2906da245d2f jodreports-2.4.0/000077500000000000000000000000001152125033300137035ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/000077500000000000000000000000001152125033300166435ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/LICENSE.txt000066400000000000000000000635001152125033300204720ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! jodreports-2.4.0/jodreports-cli/README.txt000066400000000000000000000031701152125033300203420ustar00rootroot00000000000000This is JODReports command-line interface version 2.4.0, released on 2011-01-28 Please see http://sourceforge.net/projects/jodreports/ for the latest and up to date documentation. Requirements ============ JODReports requires Java 1.4 or later (although with minor modifications it can be made to work with 1.3 as well). To create documents in formats other than OpenDocument Text (odt) please use JODConverter library See http://www.artofsolving.com/opensource/jodconverter for more info. Licenses ======== The JODReports library is distributed under the terms of the LGPL. This basically means that you are free to use it in both open source and commercial projects. If you modify the library itself you are required to contribute your changes back, so JODReports can be improved. (You are free to modify the sample webapp as a starting point for your own webapp without restrictions.) JODReports includes the following third-party libraries so you must agree to their respective licenses as well * FreeMarker - http://www.freemarker.org BSD-style * Jakarta Commons - IO and FileUpload - http://jakarta.apache.org/commons/ Apache License 2.0 * XOM - http://xom.nu GNU LGPL * slf4j - http://slf4j.org MIT License In compliance to some of the above licenses I also need to state here that JODReports includes software developed by * the Visigoth Software Society (FreeMarker - http://www.visigoths.org/) * the Apache Software Foundation (http://www.apache.org) * the Spring Framework project (http://www.springframework.org) -- Mirko Nasato (mirko at artofsolving.com) -- Terry Liang (terry at poloniouslive.com) jodreports-2.4.0/jodreports-cli/pom.xml000066400000000000000000000050601152125033300201610ustar00rootroot00000000000000 4.0.0 net.sf.jodreports jodreports-cli jar JODReports CLI 2.4.0 JODReports command-line interface. http://jodreports.sourceforge.net/ GNU Lesser General Public License, Version 2.1 http://www.gnu.org/licenses/lgpl.html http://jodreports.svn.sourceforge.net scm:svn:https://jodreports.svn.sourceforge.net/svnroot/jodreports/trunk/jodreports-cli mnasato Mirko Nasato mirko@artofsolving.com terryliang Yongtai Liang terry@polonious.com.au net.sf.jodreports jodreports ${project.version} org.slf4j slf4j-jdk14 1.6.1 maven-compiler-plugin 1.4 1.4 maven-assembly-plugin 2.2 jar-with-dependencies net.sf.jodreports.cli.CreateDocument true make-assembly package single UTF-8 jodreports-2.4.0/jodreports-cli/src/000077500000000000000000000000001152125033300174325ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/src/main/000077500000000000000000000000001152125033300203565ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/src/main/java/000077500000000000000000000000001152125033300212775ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/src/main/java/net/000077500000000000000000000000001152125033300220655ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/src/main/java/net/sf/000077500000000000000000000000001152125033300224755ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/src/main/java/net/sf/jodreports/000077500000000000000000000000001152125033300246705ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/src/main/java/net/sf/jodreports/cli/000077500000000000000000000000001152125033300254375ustar00rootroot00000000000000jodreports-2.4.0/jodreports-cli/src/main/java/net/sf/jodreports/cli/CreateDocument.java000066400000000000000000000046301152125033300312070ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jodreports.cli; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Properties; import net.sf.jooreports.templates.DocumentTemplate; import net.sf.jooreports.templates.DocumentTemplateFactory; import org.apache.commons.io.FilenameUtils; import freemarker.ext.dom.NodeModel; /** * Command line tool to create an ODT document from a template and a data file. *

* The data file can be in XML format or a simple .properties file. */ public class CreateDocument { public static void main(String[] args) throws Exception { if (args.length < 3) { System.err.println("USAGE: "+ CreateDocument.class.getName() +" "); System.exit(0); } File templateFile = new File(args[0]); File dataFile = new File(args[1]); File outputFile = new File(args[2]); DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory(); DocumentTemplate template = documentTemplateFactory.getTemplate(templateFile); Object model = null; String dataFileExtension = FilenameUtils.getExtension(dataFile.getName()); if (dataFileExtension.equals("xml")) { model = NodeModel.parse(dataFile); } else if (dataFileExtension.equals("properties")) { Properties properties = new Properties(); properties.load(new FileInputStream(dataFile)); model = properties; } else { throw new IllegalArgumentException("data file must be 'xml' or 'properties'; unsupported type: " + dataFileExtension); } template.createDocument(model, new FileOutputStream(outputFile)); } } jodreports-2.4.0/jodreports-webapp/000077500000000000000000000000001152125033300173525ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/README.txt000066400000000000000000000031531152125033300210520ustar00rootroot00000000000000This is JODReports sample webapp version 2.4.0, released on 2011-01-28 Please see http://sourceforge.net/projects/jodreports/ for the latest and up to date documentation. Requirements ============ To run the webapp a servlet 2.3 container such as Apache Tomcat 4.1 or later is also required. Licenses ======== The JODReports library is distributed under the terms of the LGPL. This basically means that you are free to use it in both open source and commercial projects. If you modify the library itself you are required to contribute your changes back, so JODReports can be improved. (You are free to modify the sample webapp as a starting point for your own webapp without restrictions.) JODReports sample webapp includes the following third-party libraries so you must agree to their respective licenses as well * FreeMarker - http://www.freemarker.org BSD-style * Jakarta Commons - IO and FileUpload - http://jakarta.apache.org/commons/ Apache License 2.0 * XOM - http://xom.nu GNU LGPL * slf4j - http://slf4j.org MIT License * Spring Framework - http://www.springframework.org Apache License 2.0 * JFreeChart - http://www.jfree.org/jfreechart/ optional (used by report sample) - GNU LGPL In compliance to some of the above licenses I also need to state here that JODReports includes software developed by * the Visigoth Software Society (FreeMarker - http://www.visigoths.org/) * the Apache Software Foundation (http://www.apache.org) * the Spring Framework project (http://www.springframework.org) -- Mirko Nasato (mirko at artofsolving.com) -- Terry Liang (terry at poloniouslive.com) jodreports-2.4.0/jodreports-webapp/pom.xml000066400000000000000000000042201152125033300206650ustar00rootroot00000000000000 4.0.0 net.sf.jodreports jodreports-webapp 2.4.0 war JODReports Sample Web Application http://jodreports.sourceforge.net/ mnasato Mirko Nasato mirko@artofsolving.com terryliang Yongtai Liang terry@poloniouslive.com net.sf.jodreports jodreports ${project.version} org.slf4j slf4j-jdk14 1.6.1 com.artofsolving jodconverter 2.2.1 org.springframework spring 1.2.8 compile javax.servlet servlet-api 2.3 provided jfree jfreechart 1.0.12 compile junit junit 3.8.2 test org.apache.maven.plugins maven-compiler-plugin 1.4 1.4 UTF-8 jodreports-2.4.0/jodreports-webapp/src/000077500000000000000000000000001152125033300201415ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/000077500000000000000000000000001152125033300210655ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/000077500000000000000000000000001152125033300220065ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/000077500000000000000000000000001152125033300225745ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/000077500000000000000000000000001152125033300232045ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/000077500000000000000000000000001152125033300254125ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/000077500000000000000000000000001152125033300261675ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/samples/000077500000000000000000000000001152125033300276335ustar00rootroot00000000000000LetterFormController.java000066400000000000000000000012271152125033300345500ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/samplespackage net.sf.jooreports.web.samples; import java.util.Date; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController; /** * A Spring MVC form controller for the Letter example. */ public class LetterFormController extends SimpleFormController { public LetterFormController() { setCommandClass(Recipient.class); } protected ModelAndView onSubmit(Object command) throws Exception { Recipient recipient = (Recipient) command; ModelAndView modelAndView = new ModelAndView(getSuccessView(), "recipient", recipient); modelAndView.addObject("date", new Date()); return modelAndView; } } jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/samples/Recipient.java000066400000000000000000000012411152125033300324160ustar00rootroot00000000000000package net.sf.jooreports.web.samples; /** * POJO used by the Letter example. */ public class Recipient { private String name; private String address; private String postCode; private String city; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPostCode() { return postCode; } public void setPostCode(String postCode) { this.postCode = postCode; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } } SalesReportGenerator.java000066400000000000000000000102271152125033300345330ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/samples// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.web.samples; import java.awt.Color; import java.awt.GradientPaint; import java.awt.image.BufferedImage; import java.awt.image.RenderedImage; import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import net.sf.jooreports.templates.image.RenderedImageSource; import net.sf.jooreports.templates.image.ImageSource; import net.sf.jooreports.web.spring.controller.AbstractDocumentGenerator; import org.apache.commons.io.output.ByteArrayOutputStream; import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.data.category.DefaultCategoryDataset; public class SalesReportGenerator extends AbstractDocumentGenerator { public static class ReportLine { private String month; private int value; public ReportLine(String month, int value) { this.month = month; this.value = value; } public String getMonth() { return month; } public int getValue() { return value; } } protected Object getModel(HttpServletRequest request) { List lines = new ArrayList(); DateFormat monthFormat = new SimpleDateFormat("MMM"); Calendar calendar = Calendar.getInstance(); for (int month = 1; month <= 6; month++) { String value = request.getParameter("month_"+ month); calendar.set(Calendar.MONTH, month - 1); lines.add(new ReportLine(monthFormat.format(calendar.getTime()), Integer.parseInt(value))); } Map model = new HashMap(); model.put("lines", lines); model.put("chart", getImageProvider(model)); return model; } protected ImageSource getImageProvider(Object model) { RenderedImageSource imageProvider = new RenderedImageSource(createChart(model)); return imageProvider; } private RenderedImage createChart(Object model) { List lines = (List) ((Map) model).get("lines"); DefaultCategoryDataset dataset = new DefaultCategoryDataset(); for (Iterator it = lines.iterator(); it.hasNext();) { ReportLine line = (ReportLine) it.next(); dataset.addValue(line.getValue(), "sales", line.getMonth()); } JFreeChart chart = ChartFactory.createBarChart("Monthly Sales", "Month", "Sales", dataset, PlotOrientation.VERTICAL, false, false, false); chart.setTitle((String)null); chart.setBackgroundPaint(Color.white); CategoryPlot plot = chart.getCategoryPlot(); BarRenderer renderer = (BarRenderer) plot.getRenderer(); GradientPaint paint = new GradientPaint( 0.0f, 0.0f, Color.blue, 0.0f, 0.0f, new Color(0, 0, 64) ); renderer.setSeriesPaint(0, paint); BufferedImage image = chart.createBufferedImage(400, 300); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { ImageIO.write(image, "png", outputStream); } catch (IOException ioException) { throw new RuntimeException("should never happen: " + ioException.getMessage()); } return image; } } jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/spring/000077500000000000000000000000001152125033300274715ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/spring/controller/000077500000000000000000000000001152125033300316545ustar00rootroot00000000000000AbstractDocumentGenerator.java000066400000000000000000000116001152125033300375470ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/spring/controller// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.web.spring.controller; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.artofsolving.jodconverter.DocumentConverter; import com.artofsolving.jodconverter.DocumentFormat; import com.artofsolving.jodconverter.DocumentFormatRegistry; import net.sf.jooreports.templates.DocumentTemplate; import net.sf.jooreports.templates.DocumentTemplateException; import net.sf.jooreports.templates.DocumentTemplateFactory; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.output.ByteArrayOutputStream; import org.springframework.core.io.Resource; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; /** * Base class for predefined document generators. * * Predefined generators load a template with the same name as the request URI, * build a model from the request and generate the response document. */ public abstract class AbstractDocumentGenerator extends AbstractController { protected abstract Object getModel(HttpServletRequest request) throws Exception; protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { request.setCharacterEncoding("UTF-8"); renderDocument(getModel(request), request, response); return null; } private Resource getTemplateDirectory(String documentName) throws IOException { String directoryName = "WEB-INF/templates/"+ documentName +"-template"; return getApplicationContext().getResource(directoryName); } private Resource getTemplateFile(String documentName) throws IOException { String templateName = "WEB-INF/templates/"+ documentName +"-template.odt"; return getApplicationContext().getResource(templateName); } private void renderDocument(Object model, HttpServletRequest request, HttpServletResponse response) throws Exception { DocumentConverter converter = (DocumentConverter) getApplicationContext().getBean("documentConverter"); DocumentFormatRegistry formatRegistry = (DocumentFormatRegistry) getApplicationContext().getBean("documentFormatRegistry"); String outputExtension = FilenameUtils.getExtension(request.getRequestURI()); DocumentFormat outputFormat = formatRegistry.getFormatByFileExtension(outputExtension); if (outputFormat == null) { throw new ServletException("unsupported output format: "+ outputExtension); } File templateFile = null; String documentName = FilenameUtils.getBaseName(request.getRequestURI()); Resource templateDirectory = getTemplateDirectory(documentName); if (templateDirectory.exists()) { templateFile = templateDirectory.getFile(); } else { templateFile = getTemplateFile(documentName).getFile(); if (!templateFile.exists()) { throw new ServletException("template not found: "+ documentName); } } DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory(); DocumentTemplate template = documentTemplateFactory.getTemplate(templateFile); ByteArrayOutputStream odtOutputStream = new ByteArrayOutputStream(); try { template.createDocument(model, odtOutputStream); } catch (DocumentTemplateException exception) { throw new ServletException(exception); } response.setContentType(outputFormat.getMimeType()); response.setHeader("Content-Disposition", "inline; filename="+ documentName +"."+ outputFormat.getFileExtension()); if ("odt".equals(outputFormat.getFileExtension())) { // no need to convert response.getOutputStream().write(odtOutputStream.toByteArray()); } else { ByteArrayInputStream odtInputStream = new ByteArrayInputStream(odtOutputStream.toByteArray()); DocumentFormat inputFormat = formatRegistry.getFormatByFileExtension("odt"); converter.convert(odtInputStream, inputFormat, response.getOutputStream(), outputFormat); } } } HttpParametersDocumentGenerator.java000066400000000000000000000022361152125033300407540ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/spring/controller// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.web.spring.controller; import javax.servlet.http.HttpServletRequest; import freemarker.ext.servlet.HttpRequestParametersHashModel; /** * A predefined document generator that build the model from the passed HTTP parameters. */ public class HttpParametersDocumentGenerator extends AbstractDocumentGenerator { protected Object getModel(HttpServletRequest request) throws Exception { return new HttpRequestParametersHashModel(request); } } XmlDocumentGenerator.java000066400000000000000000000030251152125033300365460ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/java/net/sf/jooreports/web/spring/controller// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.web.spring.controller; import java.io.StringReader; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.xml.sax.InputSource; import freemarker.ext.dom.NodeModel; /** * A predefined document generator that builds the model from XML data passed * in the HTTP parameter named "model". */ public class XmlDocumentGenerator extends AbstractDocumentGenerator { public static final String HTTP_PARAMETER_NAME = "model"; protected Object getModel(HttpServletRequest request) throws Exception { String xmlData = request.getParameter(HTTP_PARAMETER_NAME); if (xmlData == null) { throw new ServletException("missing required parameter: "+ HTTP_PARAMETER_NAME); } return NodeModel.parse(new InputSource(new StringReader(xmlData))); } } jodreports-2.4.0/jodreports-webapp/src/main/resources/000077500000000000000000000000001152125033300230775ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/resources/views.properties000066400000000000000000000004261152125033300263540ustar00rootroot00000000000000letterFormView.(class)=org.springframework.web.servlet.view.InternalResourceView letterFormView.url=/WEB-INF/jsp/letterForm.jsp letterView.(class)=net.sf.jooreports.web.spring.view.DocumentView letterView.url=/WEB-INF/templates/letter-spring-template.odt letterView.format=odt jodreports-2.4.0/jodreports-webapp/src/main/webapp/000077500000000000000000000000001152125033300223435ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/000077500000000000000000000000001152125033300233725ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/DynamicDocument-servlet.xml000066400000000000000000000040541152125033300306640ustar00rootroot00000000000000 letterFormController httpParametersDocumentGenerator xmlDocumentGenerator salesReportGenerator httpParametersDocumentGenerator xmlDocumentGenerator jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/applicationContext.xml000066400000000000000000000016271152125033300277720ustar00rootroot00000000000000 localhost 8100 jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/jsp/000077500000000000000000000000001152125033300241665ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/jsp/letterForm.jsp000066400000000000000000000017711152125033300270350ustar00rootroot00000000000000 JOOReports - Letter Sample

JOOReports - Letter Example

Please fill in the form to generate your letter

Full Name:
Address:
Post Code:
City:

This JOOReports example uses the HTTP parameters as the data model for the template.

jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/templates/000077500000000000000000000000001152125033300253705ustar00rootroot00000000000000jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/templates/letter-spring-template.odt000066400000000000000000000211471152125033300325150ustar00rootroot00000000000000PK7v=^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK7v= content.xmlXo4篈rO^;v ޫ!g;;N sl'i5kX7qCOzqEfp%trGLE\nJ*8a)U̙ QIuZ nRsfRKRU0p]tucb4w-رw5{pj\evXj=Sc7F$<^Y[UU5N'J/yjk0iqEGQ`NA5؜Y<>$ѡ?ʪY/GWz9ztmxp?t|zOi7v53t DՂr^h7˯jMu AoPx'< 'X6*4M ve `@n#Y08X,w. ~4+m`5k ji&^B:97mq&nM4wX%/!H;ܡxj1M̠ #0a eDE8 Ύy|We:A\l;s-V[c|ޱ*Irpwpᰧ8%3q]{i?L19Vm*nѪtcls@j4̙ V/W0>@B#aNl9SbMCN{-iI vjzU#u*~@n9\1Um%J(.&|ຄ+>Ho]]}T΋RUpjHN֯ wng[羅';4=YFe:e_KY'a;FrSMTi}h,kbC@=9d!`Hh0Ffr'ŕDZBކ;eoϡ SC|sY >)ŗiFxaL8S1~XF{ /p=ΥϺv(=G>eXс&]ܮt>z c6Gǡn `1]Fq},}cmUfX..~ZX>6.ůl3d/&/԰f4 Y Ҝ{صU{Cv#G:Z_~PKPrT:PK7v= styles.xmlZ[~ϯ0o${.ggE`k@KF*Z[;ig0w? 3Nhu$8X*/nyG{mFӦĕ8/@[MVm)o+TbָB[{Llb~s%,ͷ}錡v{:Wឆ)-k$HsA\zEm.CEnX4x,X$jf]D?fga5iP̧]gû||"&=\`\[U)#mjn_RJ] *"nϲ<,{ycN$?4LnzRupMp@xgd{'_* T| H|,L*xtOQ x+-/o>rZ`n9JR=B'\B=!Fd 8b#nAS5b㯨^<10#sf߀dקMpj,(R>M؟II8G.pIt#z4U)f] e)`b5HꜤ5ÚA2A 9 A?"|elY9yBu:h\vR=sJ88,X縂ٌVa Pa* -?3JE@ q9lꫤxyuJ4/kfW/H/nkK22|S\M*guO)KDP6Vy~*LL#hLm{aWtc\=L%þA?Cded##8_+^!Cu'P*mG5 e\v < #F8ٱ=M1?oE1jvTyf-Q5쥒| / v9J hё_4̫ ,zGe] { NҠJ߯Ɠp,V/ |/gf6upp.T_c!qkRsUaw-&`Gl~f ժZe}vGX/>f_;A:_Sǩ9TQTs]< "DGr}u}OX6;.,oN/-Τ=zpoªX!ZN `focO4LhtepZl%|GT8MWQtIs+\FՀ|C}ДǨZaU{foSAs(aDYy7ſ$v^2>mZMXWoۄu6aݾMX mJ9Ss8F=94L=+,!4؞R!Nĥ}PHPf ۓ/48%ONrG*HZ#13C~0W!1- 9Tv}!Pںr$$ -ajzSin= F.!R ߧX w/ԃ:B!.`SQ|Ynn @r$t0V r8  =DçSĐ&Sk4Ďh+8,ѳۢ| >5ȸ(^mY=+apPLCbL&.]FzA3W`;K@}N͚ܲӷ#pa OpenOffice.org/3.1$Unix OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2005-06-02T15:38:26 2010-11-22T11:25:46 en-GB 26 PT00H27M27S PK7v=Thumbnails/thumbnail.png sb``p [8؀XY=]C*漽{;ov+NOZ9M|̦׺%xY\>|r<~'M-_y1K&prVovAu; ]q'oﻏoϴ[g߾ϟsWgQaoϠm|:?{m:פo^^#KǽyOuRoJ[;x^nwĸUXҝZ"O0]bY̏<7eaMb_ɈIɄXxv֞nέq?lkƯ74 m o'I/o?nllwsW1Eߖ ^}賶SDno֛޷-{nݰlcW{_8Ex ݐ Jx'8 u?SYx<b[ׇ=ŋv]/3=\N\Z3['d7uOOߟ!ey௚_U(WݏV0|W+Ksu9*qjsk˿}~OfpM۶".gPK7v='Configurations2/accelerator/current.xmlPKPK7v=Configurations2/progressbar/PK7v=Configurations2/floater/PK7v=Configurations2/popupmenu/PK7v=Configurations2/menubar/PK7v=Configurations2/toolbar/PK7v=Configurations2/images/Bitmaps/PK7v=Configurations2/statusbar/PK7v= settings.xmlYs8 ~wʏLN0@۹}3_+c;BĐؒ,$9_6x9;y.@rfڵ-.7 ru֟OOW@H9K{:F%PN@v5<`EL"׸ aᡳ'X|6[CY{׭uyEHiK3|.zb+v*uRB`,]4BOhFmʜEHCP$uUһ/}Tmo6JZ?S0ÏR:' 8^Nbc03f1h &a̵łl+,(ghHai̜TTlu2gHʼnh(ɪ Ӈԍ>!3gx" h3 \2'pR eLjr6QLH*oF:J`}eI3I4Lv*yP=bqS:8wAI&, )\Eb1yk2ÔBz \t}PX$C`o_^G>yE3DZ>iP̰-7xΦ .l!a`TnNMҺJK&QCd8Ȝ*"!xwe@Bhm[]@/QnQb!f <{JQ?-|͙'20* D}S5Ju.}y"׋>w~PKGbPK7v=META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPK7v=^2 ''mimetypePK7v=PrT: Mcontent.xmlPK7v= Al"& Istyles.xmlPK7v=9˄Z meta.xmlPK7v=A=>Thumbnails/thumbnail.pngPK7v='Configurations2/accelerator/current.xmlPK7v=!Configurations2/progressbar/PK7v=[Configurations2/floater/PK7v=Configurations2/popupmenu/PK7v=Configurations2/menubar/PK7v=Configurations2/toolbar/PK7v=5Configurations2/images/Bitmaps/PK7v=rConfigurations2/statusbar/PK7v=Gb settings.xmlPK7v=`3fEaMETA-INF/manifest.xmlPKcjodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/templates/letter-template.odt000066400000000000000000000210221152125033300312050ustar00rootroot00000000000000PKv=^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKv= content.xmlX]o6}߯aO;haŰI[=2eH, .IIVh<2W7Ti&U`|Bh]2O=%'R w][,8V/uAX5z~JT-n +GvThRu\0HiKaʪ̱KU vsgNq}9D9?UA=ҍPl %Op3>ڰ49pj)sqct-W>%Oz8,Xgv|sQqG VIx̨zeM폫o:j! 2r%zFp. =[kh徵Pj_]ٟ#&8~!P`[/a$,z^&Uauܷ0nTܲS tSfCJ2Nɺג$l-%LW,s aCpsh b'vtNq!oEpk9ajw&ޠ~s')W_~jH$j h~B#6xY4꜀9E{Czrg6rq!dav`TV&x1ynFl(ɩf=aƍ3ϻ; Ƚ.;n s#3ԛpPKUkQ0PKv= styles.xmlZ[~ϯ0o${.ggE`k@KF*Z[;ig0w? 3Nhu$8X*/nyG{mFӦĕ8/@[MVm)o+TbָB[{Llb~s%,ͷ}錡v{:Wឆ)-k$HsA\zEm.CEnX4x,X$jf]D?fga5iP̧]gû||"&=\`\[U)#mjn_RJ] *"nϲ<,{ycN$?4LnzRupMp@xgd{'_* T| H|,L*xtOQ x+-/o>rZ`n9JR=B'\B=!Fd 8b#nAS5b㯨^<10#sf߀dקMpj,(R>M؟II8G.pIt#z4U)f] e)`b5HꜤ5ÚA2A 9 A?"|elY9yBu:h\vR=sJ88,X縂ٌVa Pa* -?3JE@ q9lꫤxyuJ4/kfW/H/nkK22|S\M*guO)KDP6Vy~*LL#hLm{aWtc\=L%þA?Cded##8_+^!Cu'P*mG5 e\v < #F8ٱ=M1?oE1jvTyf-Q5쥒| / v9J hё_4̫ ,zGe] { NҠJ߯Ɠp,V/ |/gf6upp.T_c!qkRsUaw-&`Gl~f ժZe}vGX/>f_;A:_Sǩ9TQTs]< "DGr}u}OX6;.,oN/-Τ=zpoªX!ZN `focO4LhtepZl%|GT8MWQtIs+\FՀ|C}ДǨZaU{foSAs(aDYy7ſ$v^2>mZMXWoۄu6aݾMX mJ9Ss8F=94L=+,!4؞R!Nĥ}PHPf ۓ/48%ONrG*HZ#13C~0W!1- 9Tv}!Pںr$$ -ajzSin= F.!R ߧX w/ԃ:B!.`SQ|Ynn @r$t0V r8  =DçSĐ&Sk4Ďh+8,ѳۢ| >5ȸ(^mY=+apPLCbL&.]FzA3W`;K@}N͚ܲӷ#pa OpenOffice.org/3.1$Unix OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2005-06-02T15:38:26 2010-11-22T11:29:14 en-GB 23 PT00H23M34S PKv=Thumbnails/thumbnail.png sb``p [8؀Xy8Ty{vln~2-S+*?ȼlIڵ_äX~I,YE.}+N Zb~\{ܹg۟WWޥϟse׽",}"nҪ_ig:]^w]*5stȲ.]/]MyoSϯo۵ETsVLJbiKq/8yP[B-13l͖{/ï- E_ySwy&زyUn߾ivsq睿Vώwo~v%7k=O~_]'gMj({O:*~OP ^Tl΋apf[ߥhF Wη^_S)\+j?.sxj1+dnޜ+tfY5u^g[][nZ~bmv<ݿ|!y.׽|~mS{߾-|{mj7]};[u_>S'~aɛ!3Ѻ?1ٔ't>g"q Y|-bq6:x{j{ឩ(nms|( ssyEHi5.+U걒٩I!DYh F+ьD' 9lH"骤w_+_,0l~ 0=(aɥuWPm_wdjOD@˰+|U|bu\icO3 ʒf hiSTz 7*/tq2LXZAS(Ĭc4fe)@ H&_|3DZ>kP̰-7 #]B,ܜ9ugڗMʉ5$ 'Jq9UDBˀER۴q>L^ݢBN1QAx-|͙'20* D}S5JuMr >< l>8+ԃT,^r? Wa@ޙÁ{|BcI+#i[WuVv 6;Pjf$5s<"pՓS1WM/\N,=l7}ʔr-BB:uu=&+Id=o1}tXmbkC_Y=20U^3 $!ʭ4ƞ~˲mizXp"\hbDX*h dZ.5#SSt꺮`p'An( i0t6wKa YxWYGt?ŸcۡrY|o Ӈ>'_ ߐE_;PKcPKv=META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPKv=^2 ''mimetypePKv=UkQ0 Mcontent.xmlPKv= Al"& Bstyles.xmlPKv=S meta.xmlPKv= 44Thumbnails/thumbnail.pngPKv='wConfigurations2/accelerator/current.xmlPKv=Configurations2/progressbar/PKv=Configurations2/floater/PKv=>Configurations2/popupmenu/PKv=vConfigurations2/menubar/PKv=Configurations2/toolbar/PKv=Configurations2/images/Bitmaps/PKv=Configurations2/statusbar/PKv=c Wsettings.xmlPKv=`3fEaMETA-INF/manifest.xmlPKjodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/templates/order-template.odt000066400000000000000000000250021152125033300310230ustar00rootroot00000000000000PKBv=^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKBv= content.xml[o6=Y&t v]00mD츇dJKRK {|qdM1&l ' I2>rãWt4"4b'o >s;cɀ"N A1 hBk`J/MbVW¦袻24k,eTS}D*Q@=N (#~nOH;:^럝[ri"%.t]㻅lj5CJ ʧ17@Lk]J^>ԍ4xnQ ,nKV I[SK2T' yǮ~6gkg `xDƫ@9 Oe/ ]WKa6w7h!LvHJ0ƑtN)%0 -#TIQ|\93]4 s>ŌHE91QB6i:0uѵJ%a+3BvBD|Jlgǹ. H8Jo[0 DskXY1JV J)[MNmbZ;c@P,H`O#rx( VTЛ]|?ߙu#lBĐis]b2r6{"wi:t ,AG)ֶ4@.ԓL(qMPN'3@ qGBjx~(@`Y8ţa[0T>#nѺ?F|v~Âޞ#aݸy^@1C`AAelJ)t~uZ5>f\5XExuUKYU/p|異r*%MLyzs@w#P"}XK1|aFakZ R@^;yɓAb+Dt෮\E9 A$b$X=b'M) 8UNVaŀ]f*z {K]\-&MN/"kS s>ExEpO%X<\e7**pi/ْct*)013|FIէ*W?IFe,)  2| 8 o9)A2 P1)YRu4V2h(7u CQ$M"*)|fL2%93"&Yvjr5[Jq~m ;% 9㎆AjwX,kņ/fi4wB̡2R4BAB{臊GAeHbnYl}TD3jV1W뗥U{x;և' Xk$f0S3w!ok>7l#)^`juz9TL* W'Ok`sE~A;1i)5dH<؇]<,Xy   y|T?o;I|$ }M].RE&M[>vE5(ݹzPrS7E9#a_U]Y50,v3sj @,>U$?'DX t~t ɿ;D1?Pn)lcZ4UdծaOk4/7-t.uqǐY޵7%ad1xÇ~y.,v%qK~zt/؆(=CcfЧz^|YC#t7Q4WÀ:$}ǖs0QuuZmgߛOm}=Q/BVަI[9q+@SPK7;j<x<PKBv= styles.xmlk۶{vPuow6nt:;HHCN]H%Ng><'bw/."v }aiRBϟno~m6$%U n 'e7m([IBkG%咀C;x%2}}mL{>\5#Q(c@/a4.t{CTr8Ξ,2³|8Һ5e@ ?Bd I13(/3h9#BKQW`)ly$- 4*{?؜By̸5wJ`PU3Q$n0# z-Gt[-,aVQ+IԾDnKpmK~ا?P}56*kEϔuuPKv(3Lc4QbiYCşSeEY{ 8tY@Qd1[^5!3dz={{)S՗sAͳ;w#@׷8.*՝-{He%A>?wW> 208GJ\gsXD߯d[,3u:gh|#Jx&g A4Qӧ ,Yzp[!"#,a:DRVJ@cVD][3)U-n/ThxB(9g*C|gՉS^AJ^{']6)VVh<ըJa'9$pfw`Mq_tM5dz TPM{LxtX# U0Lm>>NF&[1pɉ4|Wa^,5zjE!app/ ND&#MSC &p8u4۹O8Gif13IN*(2SD]hy>y:Ę+dKkd>WB!Re50CS4wZN\W6ߡR^q U!c:=RvL4ŏ/helf*)֕yK+QDk4,5@k teORa ˩ MÇwk,[vG]h]=V}pkjfFGWnx ZeeUsf@mv3lFu4*2[nBu4OGA2Jpς 0vs1ZN.^XS)uu:ź{bŋ.W Kp V\ْh==$wl2CynnU?{Lޏ=:t 1M$:J#ClFk\7* u O[q81تv=d  "ΚȰ?\} a7"6 W䮨@U|cv39"h7qehAzF@Ba3$3ͳpӮ- װݹ2vm݁Oæ3MCYIů+a[OP QMaVvGA(^x}S"^`z(;h[ehq&a1i Yhr5}']Z%rְ>JoBU 38!@|M pAD@S}`P5mCx0SOw;PKKa) >0PKBv=meta.xml OpenOffice.org/3.1$Unix OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2006-08-03T17:11:53 2010-11-22T11:34:05 en-GB 90 PT02H37M35S PKBv=Thumbnails/thumbnail.pngoP qڮDst57Z\o,#b :nmY8a'd@3m f{񚹗wswս}f3];qHl$ٞE ق%eX0O;ou4Oũ))op?T(nU %moyR&In}p-뫷 )  ^NCh6;EUARD.z6rH5\>"NY}+NP<.tAַC_^%>FFN. Dq#XV䜡 ء;H^˦]xG16/mftWh>~,YfTW鿡 CMM죞ۂ'$3/#~w]&n>vp Z7^N:ۋ _g&*|R8%aJF`clU L'sԷ<  }WOpF_W_AOU`4j$wP< Qh QkmSsFc{YYu#*RYOo @qݴ1+Ovr%yN( y\R@NN(0[]m}VN7¨lY'eѾ}Ps%I#Ʉ"'J//u:Ux̎2$Zy l76la4+%.R%ηnBgh 䌃"[>9qGbнdhL>x-TɧN(uJ|I'Hs3HP{h ~*D) +l 2ٍ#Ch?`n7L 8ӞowicQb޳rEŝM{\Pޛx>Gphx+q5b.7sfE=V]4m_Qk4~O9U#qQK. \f].+7{:hlg,WƿNXxTow<uWt}ژ<ND$"Tty$ihF uȁY(\X{ZĴ=SK҃;wwIV>?&ȝEQu~oniT Fz77NyS h0@*!UW\`DtVKqN o ~rNw W !䖜*]fy2~'ҶJ>=?h/M1o&7k_E/vsBkAihD$[ g0U @7nZG\  JQ0a' W89Pw\{)rRf Ή>˰r-hb!x%縲n#&e"^ cP͹|h;*7&T5'&R;؛f5aYp4Tv& s1g1߲ -׌KMScS%<ИJf:o&Ý4L'HLQ.CYHLE \e7z?9!{[a,>wCwoPK7PKBv=META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPKBv=^2 ''mimetypePKBv=7;j<x< Mcontent.xmlPKBv=Ka) >0 styles.xmlPKBv=#meta.xmlPKBv=pUThumbnails/thumbnail.pngPKBv='iConfigurations2/accelerator/current.xmlPKBv=Configurations2/progressbar/PKBv=Configurations2/floater/PKBv=0Configurations2/popupmenu/PKBv=hConfigurations2/menubar/PKBv=Configurations2/toolbar/PKBv=Configurations2/images/Bitmaps/PKBv=Configurations2/statusbar/PKBv=7 Isettings.xmlPKBv=`3fEav$META-INF/manifest.xmlPK%jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/templates/report-template.odt000066400000000000000000000242201152125033300312240ustar00rootroot00000000000000PK9v=^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK9v=3 g^}}-Pictures/10000000000001900000012CE726F0DB.pngPNG  IHDR,br pHYs  tIME$'tEXtCommentCreated with The GIMPd%nIDATxAAп(9$ 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0,0, 0, 0,0, 0, 0, 0, 0,0, 0, 0,0, 0,0, 0, lh^oaqSIENDB`PK9v= content.xmlZo6=nC Ll'Nk%nC k0-Q67ԑpIIe+f}{OuhAx^!"S6~y¿򾚜=IB#2yTd)?L_L-+s,39VјUZcWzl|YTvW].vl]XeWe- IuU^~!YmDqR7W*r-=.fA:0:ਖ 8 HJ3{͈]ӲnHȦDtN Vxr1댈Ŭ%50›;] yKMW4_^ F"AӴҮ>U+jy`ǎA񥠊GA[%J:.@7vFydWiG2#?(Ғ4w9.{B`3:һ iFDXI/FsP!b?"#HƑG/Xp? s 9m@Rp$Q!S#92ΈKV<=JE3Ygq-GGO;&_$?O˃OOfikα3y0j`b(rOnZm4s!J0Wm&оc)/'tkxiJ 8o6m h .v7^S鴿G&J秢-Ӕq{J)Z{:-ڵ^xTIL!d0:yLlR;:!Å:`=7kKk4\o<}ԉvZ3wٳ[$b+Z^=PYuUJ,.(ps ydĜ !;ܦz_hëL6Q!(7!e_gwcxL_ہK~!TI!O՟,v,vSVߎYl[m}㈪jvLzcS2<^kNd"s2<]1pxi^H߂%6RLe RFW\hd@a 4@@0p7ՅiVpoKSV]оM^c()[Wyi @gX5m滼yۼѳm7Wҽۆ wMi}rixXy â*7kK&5]ޤ8N8 挥,/T}Q`8#oe/֭VF Y?.|ݘٯOR*% _=գw} -L }X`$""أ5J7L>|/2 Oo6 eA߽@AhB i 10ӈz{vu3 ,IN`~{4& V#ҥxs'M3 ؾ0q=מ !<+hT.vY.wqq~IWik#o5ݠg@Vrsr0ޤx\oR)pՍ*-WdhL2Ko ycHLv 5,u?;#^T M1?7E,[QscrAUsm!oUm:X^JBEWzMw}~T0sZe54R 4p+TZ*oPuk p@Pڊ5X )|,|:y t'hHR|p./7|N>ӃhL/O!^د7;.~MbƟh-|ng=Lq~3[9(OG{өHuwѦ_\3fvˎvhn\k<ѨN:D HumZIž{Xb.FAVco'(G%Qo@cmX@Ӈi&4s- v.UϜj}\LpT_ RҢ`X,ωيgT݈4Naߐ']HRp>FVۧ]W]=6Ͽ6PmȔ>kM)KzBSJrAp8 y>c}|E{F܀JglT4 9QZc~aq`VE c51r|, ]%RPU$WRGW,h;`q$ SrJwݱLjnRl2\Ό7˛ۻ}S xs4}W~y>N\D\%:taKTC뚊^h,/!W/{?*-X%jzr=hs;}yPKf:#PK9v=(Zҳmeta.xml OpenOffice.org/3.1$Unix OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2005-10-15T20:13:39 2010-11-22T11:33:50 en-US 24 PT01H46M26S PK9v=Thumbnails/thumbnail.png sb``p [8؀Xx8Ty{77ovōW3RܳZ#ss_5~~ܐ.ljHʓY2\|VfnfNx%lyqXvHQ>?+w=pcU.n`׮ܳϞ)NmջSx%e.nz39r݆}~qM%۸iMnu [Ԗ4~M~Ϊc.>=>W\ XȤX;B=ǽ_׸q|y󷅷*󥨪+Ӳ[׋]Oo`0ٞ^'z-uq7uxs=_FvRݙ M Ϸm1`ȯ[)׶ָ suMFo19^&-oi֑o~yq`֒VR/lto~3 \tA{/7`kI\k~Տ{YN?!?5e>V~|yd>y=Q6cewVXvOzM>^,z]߻i1{^OtW?fKZy+[:Q,YݷEN9g:&PKl=PK9v='Configurations2/accelerator/current.xmlPKPK9v=Configurations2/progressbar/PK9v=Configurations2/floater/PK9v=Configurations2/popupmenu/PK9v=Configurations2/menubar/PK9v=Configurations2/toolbar/PK9v=Configurations2/images/Bitmaps/PK9v=Configurations2/statusbar/PK9v= settings.xmlYQs8 ~_;seZv]IX)WvBd CbK}YP{H,iQ4k %ꌶ ^{-d*R-bP-0eeO<oRUV9Enn(XUϪCِc5..,7k^{wioƴ{T#X}x;{~z_bmMBo8׾8^څ(˃oo./ODaU9%RAwԎ"&)+OB9h%HpY!hq.;*-#lˍ,̽fyS^lRfY*q+VlȶRDž!^ܞ$Zc\OIn-Qh6.4Jz2P% p4=IJ~gr)zTكT2M1dOb<a|N֓4sb1'~` Tf815w.YUaї$dP5btPUPAz &7^Y@T;7E k荣֋4},9g`D]$8̼QyA8|Ǚ J0ahu qB([t)Z wuMa ~y36'BOyQ f[(Y ᫤7q^MӢy紿lK. )XЕA})F\ ikU *RɸL^O|?oC'❴.Rm*7xvCr=$ = [oh&x^|Z4qڭqKZQ3M{Ea76ض+8-0h?POaxR`>8 26f@l5Oy?PKvZCq*PK9v=^2 ''mimetypePK9v=3 g^}}-MPictures/10000000000001900000012CE726F0DB.pngPK9v=y o~c$ content.xmlPK9v=f:# styles.xmlPK9v=(Zҳmeta.xmlPK9v=l=9Thumbnails/thumbnail.pngPK9v='oConfigurations2/accelerator/current.xmlPK9v=Configurations2/progressbar/PK9v=Configurations2/floater/PK9v=6Configurations2/popupmenu/PK9v=nConfigurations2/menubar/PK9v=Configurations2/toolbar/PK9v=Configurations2/images/Bitmaps/PK9v=Configurations2/statusbar/PK9v=̠ Osettings.xmlPK9v=vZCq*}"META-INF/manifest.xmlPKI1$jodreports-2.4.0/jodreports-webapp/src/main/webapp/WEB-INF/web.xml000066400000000000000000000030361152125033300246730ustar00rootroot00000000000000 contextConfigLocation /WEB-INF/applicationContext.xml context org.springframework.web.context.ContextLoaderServlet 1 DynamicDocument org.springframework.web.servlet.DispatcherServlet 2 DynamicDocument *.pdf DynamicDocument *.odt DynamicDocument *.doc DynamicDocument *.rtf DynamicDocument /spring/* jodreports-2.4.0/jodreports-webapp/src/main/webapp/index.html000066400000000000000000000007131152125033300243410ustar00rootroot00000000000000 JOOReports - Examples

JOOReports Examples

jodreports-2.4.0/jodreports-webapp/src/main/webapp/letter.html000066400000000000000000000032561152125033300245360ustar00rootroot00000000000000 JOOReports - Letter Sample

JOOReports - Letter Example

Please fill in the form to generate your letter

Full Name:
Address:
Post Code:
City:
Preferred Format:

This JOOReports example uses the HTTP parameters as the data model for the template.

jodreports-2.4.0/jodreports-webapp/src/main/webapp/order.html000066400000000000000000000145561152125033300243570ustar00rootroot00000000000000 JOOReports - Order Example

JOOReports - Order Example

Welcome to the Open Source Software Store.

This store is a buyers' dream come true. You can buy as many items as you want and the total price always stays zero!
Additionally you can see how much you save compared to similar commercial products*.

Pick an Item:
Product Quantity Price ($) Savings ($)
Totals 0.00 0.00
Format:

This JOOReports example contains quite a bit of JavaScript on the client side and passes the order data as XML (sort of AJAX if you like) to one of the ready-made document generators.

*Disclaimer: Of course this has no pretense whatsoever of being an accurate or even meaningful comparison between commercial and open source software products.

jodreports-2.4.0/jodreports-webapp/src/main/webapp/report.html000066400000000000000000000047201152125033300245470ustar00rootroot00000000000000 JOOReports - Sales Report Example

JOOReports - Sales Report Example

This example generates a report for some hypothetical monthly sales data, including a dynamically generated chart.

Month Sales
January
February
March
April
May
June

Format:


Data is passed as HTTP parameters and used by a custom web controller on the server to generate the dynamic chart (using JFreeChart).

jodreports-2.4.0/jodreports-webapp/src/main/webapp/style.css000066400000000000000000000001051152125033300242110ustar00rootroot00000000000000body { font-family: sans-serif; } .small { font-size: small; } jodreports-2.4.0/jodreports/000077500000000000000000000000001152125033300160765ustar00rootroot00000000000000jodreports-2.4.0/jodreports/ChangeLog.txt000066400000000000000000000065431152125033300204760ustar00rootroot000000000000002.4.0 --- Improvement * Replaced commons-logging with slf4j * Split CLI into separate module * Support more attribute NamespaceURI in tag attribute replacement. (Available Namespaces: draw, script, table, text, style, xlink) 2.3.0 --- * implement configuration feature Introduce two configurable settings: process_jooscript_only check_image_exist (both setting default to Boolean.TRUE) * support changing tag attribute in JOOScript Syntax: @#location attributeName=value * support script replacement in preceding elements when node is not exist in ancestor elements * optimize the code for solving XML escaping and script output in JOOScript. 2.2.2 --- * fix default locale bug in unit test * fix compress method bug in mimetype entry of output ODF files 2.2.1 --- * fixed resize problem with dynamic images while using element as fileName * fixed XML escape problem with script output in JOOScript 2.2 --- * fixed problem with script output in JOOScript * support custom Open Document Settings 2.1 --- * fixed problem with dynamic images while using element as fileName 2.1 release candidate --------------------- * introduce DocumentTemplateFactory * support custom FreeMarker configuration * input fields with description "JOOScript" can now be used to insert FreeMarker variables or directives * support dynamic images in a draw:frame with a name "JOOScript.image($variable)" 2.0.1 ----- * fixed problem with XML escaping in JOOScript * fixed double-hyphen escaping problem in JOOScript * FreeMarker directive "Comment" in JOOScript MUST start at the beginning of the line and finish at the end. 2.0.0 ----- * fixed problem with character encoding on platforms where UTF-8 is not the default 2.0 release candidate 2 ----------------------- * scripts (of type "JOOScript") can now be used to insert FreeMarker directives directly in Writer - no need to edit XML by hand anymore! * input fields can now be used instead of ${..} notation for FreeMarker expressions * converter module split into the separate project "JOOConverter" and included as a dependency * replaced DocumentTemplate.setImage() with a more flexible ImageProvider interface that can be passed to an overloaded createDocument() * images are now specified by their name (Pictures... / Options / Name), not by their internal OOo filename * re-introduced DocumentTemplate.setContentWrapper() by user request * new method DocumentTemplate.setXmlEntries() allows users to customise which entries are processed 2.0 release candidate 1 ----------------------- Templates * FreeMarker 2.3.4 alternative syntax ([#if] instead of <#if>) is now the default * a global jooreports.properties can be used to customize default FreeMarker directives Tests * PDFBox is now used to extract text from PDFs 2.0 beta 3 ---------- Converter * auto-reconnect in AbstractOpenOfficeConnection#getService() Templates * report sample embedding dynamic image 2.0 beta 2 ----------- Templates * embedded images support - DocumentTemplate#addImage() * support for non-Western charsets fixing UTF-8 bug (thanks to Youval Bronicki) * DocumentTemplate#setContentWrapper() for custom FreeMarker directives (e.g. rendering "\n" as "" as requested by Youval Bronicki) * DocumentTemplate#createDocument() now throws DocumentTemplateException jodreports-2.4.0/jodreports/LICENSE.txt000066400000000000000000000635001152125033300177250ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! jodreports-2.4.0/jodreports/README.txt000066400000000000000000000033001152125033300175700ustar00rootroot00000000000000This is JODReports version 2.4.0, released on 2011-01-28 Please see http://sourceforge.net/projects/jodreports/ for the latest and up to date documentation. Requirements ============ JODReports requires Java 1.4 or later (although with minor modifications it can be made to work with 1.3 as well). To create documents in formats other than OpenDocument Text (odt) please use JODConverter library See http://www.artofsolving.com/opensource/jodconverter for more info. To run the webapp a servlet 2.3 container such as Apache Tomcat 4.1 or later is also required. Licenses ======== The JODReports library is distributed under the terms of the LGPL. This basically means that you are free to use it in both open source and commercial projects. If you modify the library itself you are required to contribute your changes back, so JODReports can be improved. (You are free to modify the sample webapp as a starting point for your own webapp without restrictions.) JODReports includes the following third-party libraries so you must agree to their respective licenses as well * FreeMarker - http://www.freemarker.org BSD-style * Jakarta Commons - IO and FileUpload - http://jakarta.apache.org/commons/ Apache License 2.0 * XOM - http://xom.nu GNU LGPL * slf4j - http://slf4j.org MIT License In compliance to some of the above licenses I also need to state here that JODReports includes software developed by * the Visigoth Software Society (FreeMarker - http://www.visigoths.org/) * the Apache Software Foundation (http://www.apache.org) * the Spring Framework project (http://www.springframework.org) -- Mirko Nasato (mirko at artofsolving.com) -- Terry Liang (terry at poloniouslive.com) jodreports-2.4.0/jodreports/pom.xml000066400000000000000000000065641152125033300174260ustar00rootroot00000000000000 4.0.0 net.sf.jodreports jodreports jar JODReports 2.4.0 JODReports generates dynamic documents and reports based on the OpenDocument Format and FreeMarker. http://jodreports.sourceforge.net/ GNU Lesser General Public License, Version 2.1 http://www.gnu.org/licenses/lgpl.html http://jodreports.svn.sourceforge.net scm:svn:https://jodreports.svn.sourceforge.net/svnroot/jodreports/trunk/jodreports mnasato Mirko Nasato mirko@artofsolving.com terryliang Yongtai Liang terry@poloniouslive.com org.slf4j slf4j-api 1.6.1 compile commons-io commons-io 1.4 compile org.freemarker freemarker 2.3.16 compile xom xom 1.2.5 compile xalan xalan xerces xercesImpl xml-apis xml-apis junit junit 3.8.2 test org.slf4j slf4j-jdk14 1.6.1 test org.apache.maven.plugins maven-compiler-plugin 1.4 1.4 org.apache.maven.plugins maven-javadoc-plugin org.apache.maven.plugins maven-surefire-report-plugin UTF-8 jodreports-2.4.0/jodreports/src/000077500000000000000000000000001152125033300166655ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/000077500000000000000000000000001152125033300176115ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/000077500000000000000000000000001152125033300205325ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/000077500000000000000000000000001152125033300213205ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/000077500000000000000000000000001152125033300217305ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/000077500000000000000000000000001152125033300241365ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/opendocument/000077500000000000000000000000001152125033300266365ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/opendocument/ManifestSubDocument.java000066400000000000000000000026021152125033300334200ustar00rootroot00000000000000package net.sf.jooreports.opendocument; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import nu.xom.Attribute; import nu.xom.Builder; import nu.xom.Document; import nu.xom.Element; import nu.xom.ParsingException; import nu.xom.Serializer; /** * Represents the META-INF/manifest.xml subdocument */ public class ManifestSubDocument { private Document document; public ManifestSubDocument(InputStream inputStream) throws IOException { Builder builder = new Builder(); try { document = builder.build(inputStream); } catch (ParsingException parsingException) { throw new IllegalArgumentException("inputStream contains invalid XML: " + parsingException.getMessage()); } } public void addFileEntry(String mediaType, String fullPath) { Element manifest = document.getRootElement(); Element fileEntry = new Element("manifest:file-entry", OpenDocumentNamespaces.URI_MANIFEST); fileEntry.addAttribute(new Attribute("manifest:media-type", OpenDocumentNamespaces.URI_MANIFEST, mediaType)); fileEntry.addAttribute(new Attribute("manifest:full-path", OpenDocumentNamespaces.URI_MANIFEST, fullPath)); manifest.appendChild(fileEntry); } public void save(OutputStream outputStream) throws IOException { Serializer serializer = new Serializer(outputStream, OpenDocumentIO.UTF_8.name()); serializer.setIndent(1); serializer.write(document); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/opendocument/OpenDocumentArchive.java000066400000000000000000000045631152125033300334130ustar00rootroot00000000000000package net.sf.jooreports.opendocument; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; import org.apache.commons.io.output.ByteArrayOutputStream; public class OpenDocumentArchive { public static final String ENTRY_CONTENT = "content.xml"; public static final String ENTRY_MANIFEST = "META-INF/manifest.xml"; public static final String ENTRY_SETTINGS = "settings.xml"; private Map/**/ entries = new LinkedHashMap(); /** * A {@link ByteArrayOutputStream} that updates the entry data when it get close()d */ private class EntryByteArrayOutputStream extends ByteArrayOutputStream { private String entryName; public EntryByteArrayOutputStream(String entryName) { this.entryName = entryName; } public void close() throws IOException { entries.put(entryName, toByteArray()); } } public Set getEntryNames() { return entries.keySet(); } public InputStream getEntryInputStream(String entryName) { return new ByteArrayInputStream((byte[]) entries.get(entryName)); } public Reader getEntryReader(String entryName) { return OpenDocumentIO.toUtf8Reader(getEntryInputStream(entryName)); } /** * Returns an {@link OutputStream} for writing the content of the given entry * * @param entryName * @return an {@link OutputStream} */ public OutputStream getEntryOutputStream(String entryName) { return new EntryByteArrayOutputStream(entryName); } /** * Returns a {@link Writer} for writing the content of the given entry * * @param entryName * @return a {@link Writer} */ public Writer getEntryWriter(String entryName) { return OpenDocumentIO.toUtf8Writer(getEntryOutputStream(entryName)); } public OpenDocumentArchive createCopy() { OpenDocumentArchive archiveCopy = new OpenDocumentArchive(); for (Iterator it = entries.entrySet().iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); String name = (String) entry.getKey(); byte[] entryData = (byte[]) entry.getValue(); byte[] entryDataCopy = new byte[entryData.length]; System.arraycopy(entryData, 0, entryDataCopy, 0, entryData.length); archiveCopy.entries.put(name, entryDataCopy); } return archiveCopy; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/opendocument/OpenDocumentIO.java000066400000000000000000000075761152125033300323500ustar00rootroot00000000000000package net.sf.jooreports.opendocument; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.util.Iterator; import java.util.Set; import java.util.zip.CRC32; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import org.apache.commons.io.IOUtils; public class OpenDocumentIO { public static final Charset UTF_8 = Charset.forName("UTF-8"); public static InputStreamReader toUtf8Reader(InputStream inputStream) { return new InputStreamReader(inputStream, UTF_8); } public static OutputStreamWriter toUtf8Writer(OutputStream outputStream) { return new OutputStreamWriter(outputStream, UTF_8); } public static OpenDocumentArchive readZip(InputStream inputStream) throws IOException { OpenDocumentArchive archive = new OpenDocumentArchive(); ZipInputStream zipInputStream = new ZipInputStream(inputStream); while (true) { ZipEntry zipEntry = zipInputStream.getNextEntry(); if (zipEntry == null) { break; } OutputStream entryOutputStream = archive.getEntryOutputStream(zipEntry.getName()); IOUtils.copy(zipInputStream, entryOutputStream); entryOutputStream.close(); zipInputStream.closeEntry(); } zipInputStream.close(); return archive; } public static OpenDocumentArchive readDirectory(File directory) throws IOException { if (!(directory.isDirectory() && directory.canRead())) { throw new IllegalArgumentException("not a readable directory: " + directory); } OpenDocumentArchive archive = new OpenDocumentArchive(); readSubDirectory(directory, "", archive); return archive; } private static void readSubDirectory(File subDirectory, String parentName, OpenDocumentArchive archive) throws IOException { String[] fileNames = subDirectory.list(); for (int i = 0; i < fileNames.length; i++) { File file = new File(subDirectory, fileNames[i]); String relativeName = parentName + fileNames[i]; if (file.isDirectory()) { readSubDirectory(file, relativeName + "/", archive); } else { InputStream fileInputStream = new FileInputStream(file); OutputStream entryOutputStream = archive.getEntryOutputStream(relativeName); IOUtils.copy(fileInputStream, entryOutputStream); entryOutputStream.close(); fileInputStream.close(); } } } public static void writeZip(OpenDocumentArchive archive, OutputStream outputStream) throws IOException { ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream); Set entryNames = archive.getEntryNames(); // OpenDocument spec requires 'mimetype' to be the first entry writeZipEntry(zipOutputStream, archive, "mimetype", ZipEntry.STORED); for (Iterator it = entryNames.iterator(); it.hasNext();) { String entryName = (String) it.next(); if (!"mimetype".equals(entryName)) { writeZipEntry(zipOutputStream, archive, entryName, ZipEntry.DEFLATED); } } zipOutputStream.close(); } private static void writeZipEntry(ZipOutputStream zipOutputStream, OpenDocumentArchive archive, String entryName, int method) throws IOException { ZipEntry zipEntry = new ZipEntry(entryName); InputStream entryInputStream = archive.getEntryInputStream(entryName); zipEntry.setMethod(method); if (method == ZipEntry.STORED) { byte[] inputBytes = IOUtils.toByteArray(entryInputStream); CRC32 crc = new CRC32(); crc.update(inputBytes); zipEntry.setCrc(crc.getValue()); zipEntry.setSize(inputBytes.length); zipEntry.setCompressedSize(inputBytes.length); zipOutputStream.putNextEntry(zipEntry); IOUtils.write(inputBytes, zipOutputStream); } else { zipOutputStream.putNextEntry(zipEntry); IOUtils.copy(entryInputStream, zipOutputStream); } IOUtils.closeQuietly(entryInputStream); zipOutputStream.closeEntry(); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/opendocument/OpenDocumentNamespaces.java000066400000000000000000000024731152125033300341070ustar00rootroot00000000000000package net.sf.jooreports.opendocument; import nu.xom.XPathContext; public abstract class OpenDocumentNamespaces { public static final String URI_DRAW = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; public static final String URI_MANIFEST = "urn:oasis:names:tc:opendocument:xmlns:manifest:1.0"; public static final String URI_CONFIG = "urn:oasis:names:tc:opendocument:xmlns:config:1.0"; public static final String URI_SCRIPT = "urn:oasis:names:tc:opendocument:xmlns:script:1.0"; public static final String URI_TABLE = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"; public static final String URI_TEXT = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"; public static final String URI_SVG = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"; public static final String URI_XLINK = "http://www.w3.org/1999/xlink"; public static final XPathContext XPATH_CONTEXT = new XPathContext(); static { XPATH_CONTEXT.addNamespace("draw", URI_DRAW); XPATH_CONTEXT.addNamespace("manifest", URI_MANIFEST); XPATH_CONTEXT.addNamespace("config", URI_CONFIG); XPATH_CONTEXT.addNamespace("script", URI_SCRIPT); XPATH_CONTEXT.addNamespace("table", URI_TABLE); XPATH_CONTEXT.addNamespace("text", URI_TEXT); XPATH_CONTEXT.addNamespace("svg", URI_SVG); XPATH_CONTEXT.addNamespace("xlink", URI_XLINK); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/opendocument/SettingsSubDocument.java000066400000000000000000000031741152125033300334570ustar00rootroot00000000000000package net.sf.jooreports.opendocument; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Iterator; import java.util.Map; import nu.xom.Builder; import nu.xom.Document; import nu.xom.Element; import nu.xom.Nodes; import nu.xom.ParsingException; import nu.xom.Serializer; import nu.xom.Text; /** * Represents the settings.xml subdocument */ public class SettingsSubDocument { private Document document; public SettingsSubDocument(InputStream inputStream) throws IOException { Builder builder = new Builder(); try { document = builder.build(inputStream); } catch (ParsingException parsingException) { throw new IllegalArgumentException("inputStream contains invalid XML: " + parsingException.getMessage()); } } public void changeSettings(Map openDocumentSettings) { Iterator settings = openDocumentSettings.entrySet().iterator(); while(settings.hasNext()){ Map.Entry setting = (Map.Entry) settings.next(); Nodes configNodes = document.query("//config:config-item[@config:name='" + setting.getKey() + "']", OpenDocumentNamespaces.XPATH_CONTEXT); for (int nodeIndex = 0; nodeIndex < configNodes.size(); nodeIndex++) { Element configElement = (Element) configNodes.get(nodeIndex); configElement.removeChildren(); if (setting.getValue()!=null) { configElement.appendChild(new Text((String)setting.getValue())); } } } } public void save(OutputStream outputStream) throws IOException { Serializer serializer = new Serializer(outputStream, OpenDocumentIO.UTF_8.name()); serializer.setIndent(1); serializer.write(document); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/000077500000000000000000000000001152125033300261345ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/AbstractDocumentTemplate.java000066400000000000000000000064701152125033300337440ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import net.sf.jooreports.opendocument.OpenDocumentArchive; import net.sf.jooreports.opendocument.OpenDocumentIO; import freemarker.template.Configuration; public abstract class AbstractDocumentTemplate implements DocumentTemplate { private static final Configuration DEFAULT_FREEMARKER_CONFIGURATION = new Configuration(); private static final ContentWrapper DEFAULT_CONTENT_WRAPPER = new ContentWrapper() { public String wrapContent(String content) { return "[#ftl]\n" + "[#escape any as any?xml?replace(\"\\n\",\"\")]\n" + content + "[/#escape]"; } }; private final Configuration freemarkerConfiguration; private ContentWrapper contentWrapper = DEFAULT_CONTENT_WRAPPER; private String[] xmlEntries = new String[] { "content.xml", "styles.xml" }; private OpenDocumentArchive preProcessedTemplate; private Map openDocumentSettings = new HashMap(); private Map configurations = new HashMap(); public AbstractDocumentTemplate() { this(DEFAULT_FREEMARKER_CONFIGURATION); } public AbstractDocumentTemplate(Configuration freemarkerConfiguration) { this.freemarkerConfiguration = freemarkerConfiguration; } public void setXmlEntries(String[] xmlEntries) { this.xmlEntries = xmlEntries; Arrays.sort(this.xmlEntries); } public void setContentWrapper(ContentWrapper contentWrapper) { this.contentWrapper = contentWrapper; } protected abstract OpenDocumentArchive getOpenDocumentArchive(); public void setOpenDocumentSettings(Map openDocumentSettings) { this.openDocumentSettings = openDocumentSettings; } public void createDocument(Object model, OutputStream output) throws IOException, DocumentTemplateException { if (preProcessedTemplate == null) { preProcess(); } OpenDocumentArchive outputArchive = preProcessedTemplate.createCopy(); TemplateAndModelMerger templateAndModelMerger = new TemplateAndModelMerger(freemarkerConfiguration, xmlEntries, openDocumentSettings, configurations); templateAndModelMerger.process(outputArchive, model); OpenDocumentIO.writeZip(outputArchive, output); } private void preProcess() throws IOException, DocumentTemplateException { preProcessedTemplate = getOpenDocumentArchive(); TemplatePreProcessor templatePreProcessor = new TemplatePreProcessor(xmlEntries, contentWrapper, configurations); templatePreProcessor.process(preProcessedTemplate); } public Map getConfigurations() { return configurations; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/Configuration.java000066400000000000000000000010221152125033300316010ustar00rootroot00000000000000package net.sf.jooreports.templates; import java.util.Map; public class Configuration { public static final String SETTING_CHECK_IMAGE_EXIST = "check_image_exist"; public static final String SETTING_PROCESS_JOOSCRIPT_ONLY = "process_jooscript_only"; public static Boolean getConfiguration(String name, Map configurations){ Boolean value = null; Object configuration = configurations.get(name); if(configuration!=null & configuration instanceof Boolean){ value = (Boolean) configuration; } return value; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/DocumentTemplate.java000066400000000000000000000041211152125033300322470ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.IOException; import java.io.OutputStream; import java.util.Map; public interface DocumentTemplate { public interface ContentWrapper { public String wrapContent(String content); } /** * Set which XML entries in the ODT template can contain templating instructions. *

* By default they are content.xml and styles.xml. *

* To add all possible XML entries use *

	 * template.setXmlEntries(new String[] {
	 *     "content.xml",
	 *     "meta.xml",
	 *     "settings.xml",
	 *     "styles.xml"
	 * });
	 * 
* * @param xmlEntries */ public void setXmlEntries(String[] xmlEntries); /** * Hook to set custom FreeMarker directives on each XML entry. *

* The default implementation escapes XML entities and converts * newline characters into line-break tags. * * @param contentWrapper */ public void setContentWrapper(ContentWrapper contentWrapper); public void setOpenDocumentSettings(Map openDocumentSettings); public Map getConfigurations(); /** * Merge the data model into this template and create the output document. * * @param model * @param output * @throws IOException * @throws DocumentTemplateException */ public void createDocument(Object model, OutputStream output) throws IOException, DocumentTemplateException; } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/DocumentTemplateException.java000066400000000000000000000021461152125033300341330ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; public class DocumentTemplateException extends Exception { private static final long serialVersionUID = 1L; public DocumentTemplateException(String message) { super(message); } public DocumentTemplateException(Throwable cause) { super(cause); } public DocumentTemplateException(String message, Throwable cause) { super(message, cause); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/DocumentTemplateFactory.java000066400000000000000000000032001152125033300335740ustar00rootroot00000000000000package net.sf.jooreports.templates; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import net.sf.jooreports.opendocument.OpenDocumentIO; import freemarker.template.Configuration; public class DocumentTemplateFactory { private final Configuration freemarkerConfiguration; public DocumentTemplateFactory() { freemarkerConfiguration = new Configuration(); freemarkerConfiguration.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX); freemarkerConfiguration.setDefaultEncoding(OpenDocumentIO.UTF_8.name()); freemarkerConfiguration.setOutputEncoding(OpenDocumentIO.UTF_8.name()); } /** * Retrieves the FreeMarker {@link Configuration} for this factory. *

* You can use this method to set custom FreeMarker options on the returned * {@link Configuration}, and they will apply to all templates returned by * this factory. *

* Any such customizations should be used carefully. * Only use this method if you know what you are doing. * Limitation: Do not change the default square-bracket Tag Syntax. * * * @return the FreeMarker {@link Configuration} */ public Configuration getFreemarkerConfiguration() { return freemarkerConfiguration; } public DocumentTemplate getTemplate(File file) throws IOException { if (file.isDirectory()) { return new UnzippedDocumentTemplate(file, freemarkerConfiguration); } else { return getTemplate(new FileInputStream(file)); } } public DocumentTemplate getTemplate(InputStream inputStream) throws IOException { return new ZippedDocumentTemplate(inputStream, freemarkerConfiguration); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/TemplateAndModelMerger.java000066400000000000000000000110671152125033300333250ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.util.Arrays; import java.util.Iterator; import java.util.Map; import net.sf.jooreports.opendocument.ManifestSubDocument; import net.sf.jooreports.opendocument.OpenDocumentArchive; import net.sf.jooreports.opendocument.SettingsSubDocument; import net.sf.jooreports.templates.image.ImageSource; import org.apache.commons.io.IOUtils; import freemarker.core.Environment; import freemarker.ext.beans.BeansWrapper; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; /** * Merges a pre-processed template with the data model to * produce the output document. */ class TemplateAndModelMerger { private final Configuration freemarkerConfiguration; private final String[] xmlEntries; private final Map openDocumentSettings; private final Map configurations; public TemplateAndModelMerger(Configuration freemarkerConfiguration, String[] xmlEntries, Map openDocumentSettings, Map configurations) { this.freemarkerConfiguration = freemarkerConfiguration; this.xmlEntries = xmlEntries; this.openDocumentSettings = openDocumentSettings; this.configurations = configurations; } public void process(OpenDocumentArchive archive, Object model) throws IOException, DocumentTemplateException { TemplateFreemarkerNamespace predefinedNamespace = new TemplateFreemarkerNamespace(configurations); for (Iterator it = archive.getEntryNames().iterator(); it.hasNext();) { String entryName = (String) it.next(); if (Arrays.binarySearch(xmlEntries, entryName) >= 0) { Reader reader = archive.getEntryReader(entryName); Writer writer = archive.getEntryWriter(entryName); Template template = new Template(entryName, reader, freemarkerConfiguration); BeansWrapper beansWrapper = new BeansWrapper(); try { Environment environment = template.createProcessingEnvironment(model, writer); environment.setGlobalVariable(TemplateFreemarkerNamespace.NAME, beansWrapper.wrap(predefinedNamespace)); environment.process(); } catch (TemplateException templateException) { throw new DocumentTemplateException(templateException); } finally { IOUtils.closeQuietly(reader); IOUtils.closeQuietly(writer); } } } if (!predefinedNamespace.getImages().isEmpty()) { addRequiredImages(archive, predefinedNamespace.getImages()); } if (openDocumentSettings.size()>0) { changeOpenDocumentSettings(archive); } } private void addRequiredImages(OpenDocumentArchive archive, Map images) throws IOException { InputStream inputStream = archive.getEntryInputStream(OpenDocumentArchive.ENTRY_MANIFEST); ManifestSubDocument manifest = new ManifestSubDocument(inputStream); inputStream.close(); for (Iterator it = images.keySet().iterator(); it.hasNext();) { ImageSource imageWriter = (ImageSource) it.next(); String imageHref = (String) images.get(imageWriter); OutputStream imageOutputStream = archive.getEntryOutputStream(imageHref); imageWriter.write(imageOutputStream); IOUtils.closeQuietly(imageOutputStream); manifest.addFileEntry("image/png", imageHref); } OutputStream outputStream = archive.getEntryOutputStream(OpenDocumentArchive.ENTRY_MANIFEST); manifest.save(outputStream); outputStream.close(); } private void changeOpenDocumentSettings(OpenDocumentArchive archive) throws IOException{ InputStream inputStream = archive.getEntryInputStream(OpenDocumentArchive.ENTRY_SETTINGS); SettingsSubDocument settings = new SettingsSubDocument(inputStream); inputStream.close(); settings.changeSettings(openDocumentSettings); OutputStream outputStream = archive.getEntryOutputStream(OpenDocumentArchive.ENTRY_SETTINGS); settings.save(outputStream); outputStream.close(); } } TemplateFreemarkerNamespace.java000066400000000000000000000137071152125033300343240ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templatespackage net.sf.jooreports.templates; import java.io.File; import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import net.sf.jooreports.templates.image.FileImageSource; import net.sf.jooreports.templates.image.ImageSource; /** * Contains utility methods that can be invoked in the template from FreeMarker. *

* An instance of this class is automatically made available to the template * as a predefined FreeMarker variable named "JOOScript". */ public class TemplateFreemarkerNamespace { public static final String NAME = "jooscript"; private static final Logger log = LoggerFactory.getLogger(TemplateFreemarkerNamespace.class); private final Map configurations; private int imageIndex = 0; private Map/**/ images = new HashMap(); public TemplateFreemarkerNamespace(Map configurations) { this.configurations = configurations; } public String getDoubleHyphen() { return "--"; } public String image(ImageSource imageWriter) { if (images.containsKey(imageWriter)) { return (String) images.get(imageWriter); } else { ++imageIndex; String imageHref = "Pictures/dynamic-image-" + imageIndex + ".png"; images.put(imageWriter, imageHref); return imageHref; } } public Map/**/ getImages() { return images; } public String image(String defaultImageName, ImageSource imageWriter) { return image(imageWriter); } public String image(String defaultImageName, String fileName){ if (new File(fileName).exists() || !isCheckImageExist()) { defaultImageName = image(new FileImageSource(fileName)); } return defaultImageName; } public String image(String defaultImageName, Object object){ if (object instanceof String) { defaultImageName = image(defaultImageName, (String)object); } else if (object instanceof ImageSource) { defaultImageName = image((ImageSource)object); } else if (object instanceof Element) { defaultImageName = image(defaultImageName, ((Element)object).getTextContent()); } return defaultImageName; } public String imageWidth(ImageSource imageSource, String maxWidthStr, String maxHeightStr, String format){ return getRatioDimension(imageSource.getWidth(), imageSource.getHeight(), maxWidthStr, maxHeightStr, true, format); } public String imageWidth(String defaultImageName,ImageSource imageSource, String maxWidth, String maxHeight, String format){ return imageWidth(imageSource, maxWidth, maxHeight, format); } public String imageWidth(String defaultImageName, String fileName, String maxWidth, String maxHeight, String format){ String result = maxWidth; if (new File(fileName).exists() || !isCheckImageExist()) { result = imageWidth(new FileImageSource(fileName), maxWidth, maxHeight, format); } return result; } public String imageWidth(String defaultImageName, Object object, String maxWidth, String maxHeight, String format){ String result = maxWidth; if (object instanceof String) { result = imageWidth(new FileImageSource((String)object), maxWidth, maxHeight, format); } else if (object instanceof ImageSource) { result = imageWidth((ImageSource)object, maxWidth, maxHeight, format); } else if (object instanceof Element) { result = imageWidth(new FileImageSource(((Element)object).getTextContent()), maxWidth, maxHeight, format); } return result; } public String imageHeight(ImageSource imageSource, String maxWidthStr, String maxHeightStr, String format){ return getRatioDimension(imageSource.getHeight(), imageSource.getWidth(), maxHeightStr, maxWidthStr, false, format); } public String imageHeight(String defaultImageName,ImageSource imageSource, String maxWidth, String maxHeight, String format){ return imageHeight(imageSource, maxWidth, maxHeight, format); } public String imageHeight(String defaultImageName, String fileName, String maxWidth, String maxHeight, String format){ String result = maxHeight; if (new File(fileName).exists() || !isCheckImageExist()) { result = imageHeight(new FileImageSource(fileName), maxWidth, maxHeight, format); } return result; } public String imageHeight(String defaultImageName, Object object, String maxWidth, String maxHeight, String format){ String result = maxHeight; if (object instanceof String) { result = imageHeight(new FileImageSource((String)object), maxWidth, maxHeight, format); } else if (object instanceof ImageSource) { result = imageHeight((ImageSource)object, maxWidth, maxHeight, format); } else if (object instanceof Element) { result = imageHeight(new FileImageSource(((Element)object).getTextContent()), maxWidth, maxHeight, format); } return result; } private String getRatioDimension(int dimX, int dimY, String maxDimXStr, String maxDimYStr, boolean isWidth, String format){ String result = maxDimXStr; if (dimX>0 && dimY>0 && maxDimXStr.length()>2 && maxDimYStr.length()>2) { String unit = maxDimXStr.substring(maxDimXStr.length()-2); try { double maxDimX=Double.parseDouble(maxDimXStr.substring(0, maxDimXStr.length()-2)); double maxDimY=Double.parseDouble(maxDimYStr.substring(0, maxDimYStr.length()-2)); double maxRatio = (double) maxDimX / maxDimY; double ratio = (double) dimX / dimY; if (ratio!=0 && (format.equalsIgnoreCase("Max"+(isWidth?"Height":"Width"))) || (format.equalsIgnoreCase("fit") && ratio // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.Iterator; import java.util.Map; import net.sf.jooreports.opendocument.OpenDocumentArchive; import net.sf.jooreports.templates.DocumentTemplate.ContentWrapper; import net.sf.jooreports.templates.xmlfilters.DynamicImageFilter; import net.sf.jooreports.templates.xmlfilters.ScriptTagFilter; import net.sf.jooreports.templates.xmlfilters.TextInputTagFilter; import nu.xom.Builder; import nu.xom.Document; import nu.xom.ParsingException; import nu.xom.Serializer; import org.apache.commons.io.output.ByteArrayOutputStream; class TemplatePreProcessor { private static final String UTF_8 = "UTF-8"; private String[] xmlEntries; private ContentWrapper contentWrapper; private final Map configurations; private final TextInputTagFilter textInputTagFilter = new TextInputTagFilter(); private final ScriptTagFilter scriptTagFilter = new ScriptTagFilter(); private final DynamicImageFilter dynamicImageFilter = new DynamicImageFilter(); public TemplatePreProcessor(String[] xmlEntries, ContentWrapper contentWrapper, Map configurations) { this.xmlEntries = xmlEntries; this.contentWrapper = contentWrapper; this.configurations = configurations; } public void process(OpenDocumentArchive archive) throws DocumentTemplateException, IOException { for (Iterator it = archive.getEntryNames().iterator(); it.hasNext();) { String entryName = (String) it.next(); if (Arrays.binarySearch(xmlEntries, entryName) >= 0) { InputStream inputStream = archive.getEntryInputStream(entryName); OutputStream outputStream = archive.getEntryOutputStream(entryName); applyXmlFilters(inputStream, outputStream); inputStream.close(); outputStream.close(); } } } // public void handleEntry(String entryName, InputStream input, Object model, OutputStream output) throws IOException, DocumentTemplateException { // if (Arrays.binarySearch(xmlEntries, entryName) >= 0) { // ByteArrayOutputStream filteredOutput = new ByteArrayOutputStream(); // applyXmlFilters(input, filteredOutput); // String filteredContent = new String(filteredOutput.toByteArray(), UTF_8); // String wrappedContent = contentWrapper.wrapContent(filteredContent); // output.write(wrappedContent.getBytes(UTF_8)); // } else { // IOUtils.copy(input, output); // } // } private void applyXmlFilters(InputStream input, OutputStream output) throws DocumentTemplateException, IOException { Builder builder = new Builder(); Document document = null; try { document = builder.build(input); } catch (ParsingException parsingException) { throw new DocumentTemplateException(parsingException); } Boolean setting = Configuration.getConfiguration(Configuration.SETTING_PROCESS_JOOSCRIPT_ONLY, configurations); if(setting!=null){ textInputTagFilter.setProcessJooScriptOnly(setting.booleanValue()); } textInputTagFilter.doFilter(document); scriptTagFilter.doFilter(document); dynamicImageFilter.doFilter(document); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); Serializer serializer = new Serializer(byteArrayOutputStream, UTF_8); serializer.write(document); output.write(contentWrapper.wrapContent(byteArrayOutputStream.toString(UTF_8)).getBytes(UTF_8)); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/UnzippedDocumentTemplate.java000066400000000000000000000037251152125033300337770ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.File; import java.io.IOException; import freemarker.template.Configuration; import net.sf.jooreports.opendocument.OpenDocumentArchive; import net.sf.jooreports.opendocument.OpenDocumentIO; /** * Same as {@link ZippedDocumentTemplate} but in unzipped form. */ public class UnzippedDocumentTemplate extends AbstractDocumentTemplate { private final OpenDocumentArchive archive; public UnzippedDocumentTemplate(File directory, Configuration freemarkerConfiguration) throws IOException { super(freemarkerConfiguration); if (!(directory.isDirectory() && directory.canRead())) { throw new IllegalArgumentException("not a readable directory: "+ directory); } archive = OpenDocumentIO.readDirectory(directory); } /** * @deprecated since 2.1 use {@link DocumentTemplateFactory#getTemplate(File)} */ public UnzippedDocumentTemplate(File directory) throws IOException { if (!(directory.isDirectory() && directory.canRead())) { throw new IllegalArgumentException("not a readable directory: "+ directory); } archive = OpenDocumentIO.readDirectory(directory); } protected OpenDocumentArchive getOpenDocumentArchive() { return archive; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/ZippedDocumentTemplate.java000066400000000000000000000041311152125033300334240ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import freemarker.template.Configuration; import net.sf.jooreports.opendocument.OpenDocumentArchive; import net.sf.jooreports.opendocument.OpenDocumentIO; /** * Class for generating OpenDocument documents from a template and a data model. *

* The template is an "almost regular" OpenDocument file, except that the content.xml * and styles.xml entries may contain FreeMarker variables and directives. */ public class ZippedDocumentTemplate extends AbstractDocumentTemplate { private final OpenDocumentArchive archive; public ZippedDocumentTemplate(InputStream inputStream, Configuration freemarkerConfiguration) throws IOException { super(freemarkerConfiguration); archive = OpenDocumentIO.readZip(inputStream); } /** * @deprecated use {@link DocumentTemplateFactory#getTemplate(File)} */ public ZippedDocumentTemplate(File file) throws IOException { this(new FileInputStream(file)); } /** * @deprecated use {@link DocumentTemplateFactory#getTemplate(InputStream)} */ public ZippedDocumentTemplate(InputStream inputStream) throws IOException { archive = OpenDocumentIO.readZip(inputStream); } protected OpenDocumentArchive getOpenDocumentArchive() { return archive; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/image/000077500000000000000000000000001152125033300272165ustar00rootroot00000000000000AbstractInputStreamImageSource.java000066400000000000000000000015371152125033300360730ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/imagepackage net.sf.jooreports.templates.image; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.imageio.ImageIO; import org.apache.commons.io.IOUtils; public abstract class AbstractInputStreamImageSource implements ImageSource { protected abstract InputStream getInputStream() throws IOException; public void write(OutputStream outputStream) throws IOException { InputStream inputStream = null; try { inputStream = getInputStream(); IOUtils.copy(inputStream, outputStream); } finally { IOUtils.closeQuietly(inputStream); } } public int getWidth() { try { return ImageIO.read(getInputStream()).getWidth(); } catch (IOException e) {} return 0; } public int getHeight() { try { return ImageIO.read(getInputStream()).getHeight(); } catch (IOException e) {} return 0; } }ClasspathImageSource.java000066400000000000000000000017601152125033300340540ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/imagepackage net.sf.jooreports.templates.image; import java.io.IOException; import java.io.InputStream; public class ClasspathImageSource extends AbstractInputStreamImageSource { private String resourceName; public ClasspathImageSource(String resourceName) { this.resourceName = resourceName; } protected InputStream getInputStream() throws IOException { return getClass().getClassLoader().getResourceAsStream(resourceName); } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((resourceName == null) ? 0 : resourceName.hashCode()); return result; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; ClasspathImageSource other = (ClasspathImageSource) obj; if (resourceName == null) { if (other.resourceName != null) return false; } else if (!resourceName.equals(other.resourceName)) return false; return true; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/image/FileImageSource.java000066400000000000000000000017401152125033300330660ustar00rootroot00000000000000package net.sf.jooreports.templates.image; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class FileImageSource extends AbstractInputStreamImageSource { private File file; public FileImageSource(String fileName) { this(new File(fileName)); } public FileImageSource(File file) { this.file = file; } protected InputStream getInputStream() throws IOException { return new FileInputStream(file); } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((file == null) ? 0 : file.hashCode()); return result; } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; FileImageSource other = (FileImageSource) obj; if (file == null) { if (other.file != null) return false; } else if (!file.equals(other.file)) return false; return true; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/image/ImageSource.java000066400000000000000000000003731152125033300322670ustar00rootroot00000000000000package net.sf.jooreports.templates.image; import java.io.IOException; import java.io.OutputStream; public interface ImageSource { public void write(OutputStream outputStream) throws IOException; public int getWidth(); public int getHeight(); } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/image/RenderedImageSource.java000066400000000000000000000010771152125033300337420ustar00rootroot00000000000000package net.sf.jooreports.templates.image; import java.awt.image.RenderedImage; import java.io.IOException; import java.io.OutputStream; import javax.imageio.ImageIO; public class RenderedImageSource implements ImageSource { private final RenderedImage image; public RenderedImageSource(RenderedImage image) { this.image = image; } public void write(OutputStream outputStream) throws IOException { ImageIO.write(image, "png", outputStream); } public int getWidth(){ return image.getWidth(); } public int getHeight(){ return image.getHeight(); } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/xmlfilters/000077500000000000000000000000001152125033300303255ustar00rootroot00000000000000AbstractInsertTag.java000066400000000000000000000030571152125033300345020ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/xmlfilterspackage net.sf.jooreports.templates.xmlfilters; import net.sf.jooreports.opendocument.OpenDocumentNamespaces; import net.sf.jooreports.templates.xmlfilters.tags.JooScriptTag; import nu.xom.Element; import nu.xom.Node; import nu.xom.Nodes; import nu.xom.ParentNode; public abstract class AbstractInsertTag implements JooScriptTag { public abstract void process(Element scriptElement, Element tagElement); protected void insertBefore(Element scriptElement, Element tagElement, Node node) { String tag = tagElement.getAttributeValue("element"); Element targetElement = findEnclosingElement(scriptElement, tag); ParentNode parentNode = targetElement.getParent(); int parentIndex = parentNode.indexOf(targetElement); parentNode.insertChild(node, parentIndex); } protected void insertAfter(Element scriptElement, Element tagElement, Node node) { String tag = tagElement.getAttributeValue("element"); Element targetElement = findEnclosingElement(scriptElement, tag); ParentNode parentNode = targetElement.getParent(); int parentIndex = parentNode.indexOf(targetElement); parentNode.insertChild(node, parentIndex + 1); } private Element findEnclosingElement(Element element, String enclosingTagName) { Nodes ancestors = element.query("ancestor::" + enclosingTagName, OpenDocumentNamespaces.XPATH_CONTEXT); if (ancestors.size() == 0) { return null; } return (Element) ancestors.get(ancestors.size() - 1); } protected static Node newNode(String script){ return XmlEntryFilter.newNode(script); } } DynamicImageFilter.java000066400000000000000000000057271152125033300346210ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/xmlfilterspackage net.sf.jooreports.templates.xmlfilters; import net.sf.jooreports.opendocument.OpenDocumentNamespaces; import net.sf.jooreports.templates.TemplateFreemarkerNamespace; import nu.xom.Attribute; import nu.xom.Document; import nu.xom.Element; import nu.xom.Nodes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Processes content.xml for dynamic images

* Only images enclosed in a draw:frame with a name starting with {@link #IMAGE_NAME_PREFIX} and ending with {@link #IMAGE_NAME_SUFFIX} will be processed */ public class DynamicImageFilter extends XmlEntryFilter { /** * Only images enclosed in a draw:frame with a name starting with * this prefix will be processed */ public static final String IMAGE_NAME_PREFIX = TemplateFreemarkerNamespace.NAME + ".image("; /** * Only images enclosed in a draw:frame with a name ending with * this suffix will be processed */ public static final String IMAGE_NAME_SUFFIX = ")"; private static final String IMAGE_WIDTH_PREFIX = TemplateFreemarkerNamespace.NAME + ".imageWidth("; private static final String IMAGE_HEIGHT_PREFIX = TemplateFreemarkerNamespace.NAME + ".imageHeight("; private static final Logger log = LoggerFactory.getLogger(DynamicImageFilter.class); public void doFilter(Document document) { Nodes nodes = document.query("//draw:image", OpenDocumentNamespaces.XPATH_CONTEXT); for (int nodeIndex = 0; nodeIndex < nodes.size(); nodeIndex++) { Element imageElement = (Element) nodes.get(nodeIndex); Element frameElement = (Element) imageElement.getParent(); if (!"draw:frame".equals(frameElement.getQualifiedName())) { log.warn("draw:image not inside a draw:frame? skipping"); continue; } String frameName = frameElement.getAttributeValue("name", OpenDocumentNamespaces.URI_DRAW); if (frameName != null && frameName.toLowerCase().startsWith(IMAGE_NAME_PREFIX) && frameName.endsWith(IMAGE_NAME_SUFFIX)) { Attribute hrefAttribute = imageElement.getAttribute("href", OpenDocumentNamespaces.URI_XLINK); String defaultImageName = hrefAttribute.getValue(); if (frameName.contains(",")) { Attribute widthAttribute = frameElement.getAttribute("width", OpenDocumentNamespaces.URI_SVG); Attribute heightAttribute = frameElement.getAttribute("height", OpenDocumentNamespaces.URI_SVG); String maxSize = ",'" + widthAttribute.getValue().trim() + "','" + heightAttribute.getValue().trim() + "',"; String sizeParameters = frameName.replaceFirst(",", maxSize); widthAttribute.setValue("${" + sizeParameters.replace(IMAGE_NAME_PREFIX, IMAGE_WIDTH_PREFIX+"'"+defaultImageName+"',") + "}"); heightAttribute.setValue("${" + sizeParameters.replace(IMAGE_NAME_PREFIX, IMAGE_HEIGHT_PREFIX+"'"+defaultImageName+"',") + "}"); frameName = frameName.split(",")[0] + IMAGE_NAME_SUFFIX; } hrefAttribute.setValue("${" + frameName.replace(IMAGE_NAME_PREFIX, IMAGE_NAME_PREFIX+"'"+defaultImageName+"',") + "}"); } } } } ScriptTagFilter.java000066400000000000000000000201441152125033300341600ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/xmlfilters// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates.xmlfilters; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.jooreports.templates.DocumentTemplateException; import net.sf.jooreports.templates.xmlfilters.tags.InsertAfterTag; import net.sf.jooreports.templates.xmlfilters.tags.InsertAroundTag; import net.sf.jooreports.templates.xmlfilters.tags.InsertBeforeTag; import net.sf.jooreports.templates.xmlfilters.tags.JooScriptTag; import nu.xom.Attribute; import nu.xom.Builder; import nu.xom.Document; import nu.xom.Element; import nu.xom.Elements; import nu.xom.Nodes; import nu.xom.ParentNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * OpenDocument XML entry filter that replaces script elements with FreeMarker directives. *

* Scripts can contain FreeMarker directives to be placed at the location of the script itself, or * at some enclosing tag. For example a script inside a table cell can contain a * [#list items as item] directive to be inserted at the enclosing table row so that the * entire row will be repeated for each item in the list. */ public class ScriptTagFilter extends XmlEntryFilter { private static final Logger log = LoggerFactory.getLogger(ScriptTagFilter.class); private final Map/**/ tags; public ScriptTagFilter() { tags = new HashMap(); tags.put("insert-after", new InsertAfterTag()); tags.put("insert-around", new InsertAroundTag()); tags.put("insert-before", new InsertBeforeTag()); } public void doFilter(Document document) throws DocumentTemplateException { // bloody xpath... no easier way to do a case-insentive match than translate() Nodes scriptNodes = document.query("//text:script[translate(@script:language, 'CIJOPRST', 'cijoprst')='jooscript']", XPATH_CONTEXT); for (int nodeIndex = 0; nodeIndex < scriptNodes.size(); nodeIndex++) { Element scriptElement = (Element) scriptNodes.get(nodeIndex); if (scriptElement.getValue().toLowerCase().startsWith("")) { Elements scriptTags = parseScriptText(scriptElement.getValue()); for (int tagIndex = 0; tagIndex < scriptTags.size(); tagIndex++) { Element tagElement = scriptTags.get(tagIndex); String tagName = tagElement.getLocalName(); if (tags.containsKey(tagName)) { JooScriptTag tag = (JooScriptTag) tags.get(tagName); tag.process(scriptElement, tagElement); } else { log.error("unknown script tag: " + tagName + "; ignoring"); } } scriptElement.detach(); } else { try { String script = addScriptDirectives(scriptElement); scriptElement.getParent().replaceChild(scriptElement, newNode(script)); } catch (IOException ioException) { log.error("unable to parse script: '"+scriptElement.getValue()+"'; ignoring", ioException); scriptElement.detach(); } } } } private Elements parseScriptText(String scriptText) throws DocumentTemplateException { new StringReader(scriptText); Builder builder = new Builder(); StringReader reader = new StringReader(scriptText); Document document; try { document = builder.build(reader); } catch (Exception exception) { throw new DocumentTemplateException("invalid script: " + scriptText, exception); } reader.close(); return document.getRootElement().getChildElements(); } private static class ScriptPart { private StringBuffer text = new StringBuffer(); private String location; private Boolean isEndTag; public ScriptPart() { // no location } public ScriptPart(String location, Boolean isEndTag) { this.location = location; this.isEndTag = isEndTag; } public void appendText(String line) { text.append(line + "\n"); } public String getText() { return text.toString().trim(); } public String getLocation() { return location; } public boolean afterEndTag(){ boolean afterEndTag = false; if (isEndTag != null && isEndTag == Boolean.TRUE) { afterEndTag = true; } return afterEndTag; } public boolean isTagAttribute(){ boolean insideTag = false; if (isEndTag != null && isEndTag == Boolean.FALSE) { insideTag = true; } return insideTag; } } /** * @param scriptElement * @return the text that should replace the input field * @throws DocumentTemplateException */ private static String addScriptDirectives(Element scriptElement) throws IOException, DocumentTemplateException { String scriptReplacement = ""; List scriptParts = parseScriptParts(scriptElement.getValue()); for (int index = 0; index < scriptParts.size(); index++) { ScriptPart scriptPart = (ScriptPart) scriptParts.get(index); if (scriptPart.getLocation() == null) { scriptReplacement = scriptPart.getText(); } else { Element enclosingElement = findEnclosingElement(scriptElement, scriptPart.getLocation()); if (scriptPart.isTagAttribute()) { String[] nameValue = scriptPart.getText().split("=", 2); if (nameValue.length != 2) { throw new DocumentTemplateException("script error: # attribute name=value not found"); } String attributeNamespace = enclosingElement.getNamespaceURI(); if (nameValue[0].contains(":")) { String prefix = nameValue[0].split(":")[0]; if (!prefix.equals(enclosingElement.getNamespacePrefix())) { attributeNamespace = XPATH_CONTEXT.lookup(prefix); if (attributeNamespace==null) { throw new DocumentTemplateException("unsupported attribute namespace: " + prefix); } } } enclosingElement.addAttribute(new Attribute(nameValue[0], attributeNamespace, nameValue[1])); } else { ParentNode parent = enclosingElement.getParent(); int parentIndex = parent.indexOf(enclosingElement); if (scriptPart.afterEndTag()) { parentIndex++; } parent.insertChild(newNode(scriptPart.getText()), parentIndex); } } } return scriptReplacement; } private static List/**/ parseScriptParts(String scriptText) throws IOException, DocumentTemplateException { List scriptParts = new ArrayList(); BufferedReader stringReader = new BufferedReader(new StringReader(scriptText)); ScriptPart scriptPart = new ScriptPart(); scriptParts.add(scriptPart); for (String line; (line = stringReader.readLine()) != null;) { line = line.trim(); if (line.startsWith("@")) { String location = line.substring(1); if (location.startsWith("/")) { scriptPart = new ScriptPart(location.substring(1), Boolean.TRUE); } else if (location.startsWith("#")) { scriptPart = new ScriptPart(location.substring(1), Boolean.FALSE); } else { scriptPart = new ScriptPart(location, null); } scriptParts.add(scriptPart); } else { scriptPart.appendText(line.replaceFirst("^\\[#--", "[#comment]").replaceFirst("--\\]$", "[/#comment]")); } } return scriptParts; } private static Element findEnclosingElement(Element element, String enclosingTagName) throws DocumentTemplateException { Nodes ancestors = element.query("ancestor::" + enclosingTagName, XPATH_CONTEXT); if (ancestors.size() == 0) { ancestors = element.query("preceding::" + enclosingTagName, XPATH_CONTEXT); if (ancestors.size() == 0) { throw new DocumentTemplateException("script error: no such enclosing tag named '" + enclosingTagName +"'"); } } return (Element) ancestors.get(ancestors.size() - 1); } } TextInputTagFilter.java000066400000000000000000000050551152125033300346640ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/xmlfilters// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates.xmlfilters; import nu.xom.Document; import nu.xom.Element; import nu.xom.Nodes; import nu.xom.ParentNode; import nu.xom.Text; /** * OpenDocument XML file filter that replaces text-input elements with FreeMarker expressions.

* For example:

* <text:text-input text-description="JOOScript">$user.name</text:text-input> * becomes ${user.name}.

* <text:text-input text-description="JOOScript">[#assign title='Mr.']</text:text-input> * becomes [#assign title='Mr.']. */ public class TextInputTagFilter extends XmlEntryFilter { private boolean processJooScriptOnly = true; public void doFilter(Document document) { Nodes textInputNodes = document.query("//text:text-input", XPATH_CONTEXT); for (int nodeIndex = 0; nodeIndex < textInputNodes.size(); nodeIndex++) { Element textInputElement = (Element) textInputNodes.get(nodeIndex); String expression = textInputElement.getAttributeValue("description", textInputElement.getNamespaceURI()).trim(); if (expression.equalsIgnoreCase("jooscript")) { String value = textInputElement.getValue(); if (value.startsWith("${")) { textInputElement.getParent().replaceChild(textInputElement, new Text(value)); } else { ParentNode childNode = textInputElement; while (childNode.getParent().getChildCount()==1) { childNode = childNode.getParent(); } childNode.getParent().replaceChild(childNode, newNode(value)); } } else if (!processJooScriptOnly) { if (expression.length()>0 && !expression.startsWith("${")) { expression = "${" + expression + "}"; } textInputElement.getParent().replaceChild(textInputElement, new Text(expression)); } } } public void setProcessJooScriptOnly(boolean processJooScriptOnly) { this.processJooScriptOnly = processJooScriptOnly; } } jodreports-2.4.0/jodreports/src/main/java/net/sf/jooreports/templates/xmlfilters/XmlEntryFilter.java000066400000000000000000000047421152125033300341270ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates.xmlfilters; import net.sf.jooreports.templates.DocumentTemplateException; import net.sf.jooreports.templates.TemplateFreemarkerNamespace; import nu.xom.Comment; import nu.xom.Document; import nu.xom.Node; import nu.xom.XPathContext; /** * Abstract class for filters that operate on an OpenDocument XML entry * (e.g. content.xml). *

* XML manipulations use the XOM API. */ public abstract class XmlEntryFilter { protected static final String DRAW_NAMESPACE = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"; protected static final String SCRIPT_NAMESPACE = "urn:oasis:names:tc:opendocument:xmlns:script:1.0"; protected static final String TABLE_NAMESPACE = "urn:oasis:names:tc:opendocument:xmlns:table:1.0"; protected static final String TEXT_NAMESPACE = "urn:oasis:names:tc:opendocument:xmlns:text:1.0"; protected static final String STYLE_NAMESPACE = "urn:oasis:names:tc:opendocument:xmlns:style:1.0"; protected static final String XLINK_NAMESPACE = "http://www.w3.org/1999/xlink"; protected static final XPathContext XPATH_CONTEXT = new XPathContext(); static { XPATH_CONTEXT.addNamespace("draw", DRAW_NAMESPACE); XPATH_CONTEXT.addNamespace("script", SCRIPT_NAMESPACE); XPATH_CONTEXT.addNamespace("table", TABLE_NAMESPACE); XPATH_CONTEXT.addNamespace("text", TEXT_NAMESPACE); XPATH_CONTEXT.addNamespace("style", STYLE_NAMESPACE); XPATH_CONTEXT.addNamespace("xlink", XLINK_NAMESPACE); } public abstract void doFilter(Document document) throws DocumentTemplateException; protected static Node newNode(String script){ return new Comment(" ${"+TemplateFreemarkerNamespace.NAME+".doubleHyphen}>" + script.replace("--", "\\x002d\\x002d") + " 0); ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(documentFile)); ZipEntry firstEntry = zipInputStream.getNextEntry(); assertNotNull("zip file has no entries", firstEntry); assertEquals("first entry not 'mimetype' as required by OpenDocument", "mimetype", firstEntry.getName()); assertEquals("first entry compressed", ZipEntry.STORED, firstEntry.getMethod()); // Added by NetForce1 to verify crc-correctness String mimetype = IOUtils.toString(zipInputStream); assertEquals("mimetype content", "application/x-test", mimetype); zipInputStream.close(); documentFile.delete(); } } jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/000077500000000000000000000000001152125033300261675ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/AbstractTemplateTest.java000066400000000000000000000034361152125033300331370ustar00rootroot00000000000000package net.sf.jooreports.templates; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Locale; import java.util.Map; import junit.framework.TestCase; import org.xml.sax.SAXException; public abstract class AbstractTemplateTest extends TestCase { private DocumentTemplateFactory documentTemplateFactory; protected void setUp() throws Exception { documentTemplateFactory = new DocumentTemplateFactory(); documentTemplateFactory.getFreemarkerConfiguration().setLocale(Locale.US); } protected File getTestFile(String fileName) { return new File("src/test/resources", fileName); } protected static File createTempFile(String extension) throws IOException { File tempFile = File.createTempFile("document", "."+ extension); tempFile.deleteOnExit(); return tempFile; } protected static void assertFileCreated(File file) { assertTrue("file created", file.isFile() && file.length() > 0); } protected String extractTextContent(File openDocumentFile) throws IOException { try { return TextExtractor.extractTextAsString(openDocumentFile).trim(); } catch (SAXException saxException) { throw new RuntimeException(saxException); } } protected String processTemplate(File templateFile, Map model) throws IOException, DocumentTemplateException { File openDocumentFile = createTempFile("odt"); DocumentTemplate template = documentTemplateFactory.getTemplate(templateFile); Map configurations = template.getConfigurations(); configurations.put("process_jooscript_only", Boolean.FALSE); template.createDocument(model, new FileOutputStream(openDocumentFile)); assertFileCreated(openDocumentFile); return extractTextContent(openDocumentFile); } } jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/DocumentTestUtils.java000066400000000000000000000032761152125033300325010ustar00rootroot00000000000000// // JOOConverter - The Open Source Java/OpenOffice Document Converter // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringWriter; public class DocumentTestUtils { private static final int BYTE_ORDER_MARK_CHAR = 0xFEFF; public static String readContent(File file) throws IOException { char[] buffer = new char[2048]; InputStreamReader reader = new InputStreamReader(new FileInputStream(file), "UTF-8"); StringWriter writer = new StringWriter(); int length; while ((length = reader.read(buffer, 0, 2048)) != -1) { writer.write(buffer, 0, length); } String content = stripByteOrderMarkChar(writer.toString()); return content.trim(); } private static String stripByteOrderMarkChar(String content) { if (content.length() > 0 && content.charAt(0) == BYTE_ORDER_MARK_CHAR) { return content.substring(1).trim(); } return content; } } jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/DynamicImagesTest.java000066400000000000000000000212451152125033300324100ustar00rootroot00000000000000package net.sf.jooreports.templates; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.imageio.ImageIO; import net.sf.jooreports.templates.image.ClasspathImageSource; import net.sf.jooreports.templates.image.FileImageSource; import net.sf.jooreports.templates.image.ImageSource; import net.sf.jooreports.templates.image.RenderedImageSource; public class DynamicImagesTest extends AbstractTemplateTest { public void testOrderForm() throws Exception { File templateFile = getTestFile("order-with-images-template.odt"); ImageSource red = new RenderedImageSource(ImageIO.read(new File("src/test/resources/red.png"))); ImageSource blue = new FileImageSource("src/test/resources/blue.png"); ImageSource blue2 = new ClasspathImageSource("blue.png"); Map model = new HashMap(); List items = new ArrayList(); Map item1 = new HashMap(); item1.put("description", "First Item"); item1.put("quantity", "20"); item1.put("picture", red); items.add(item1); Map item2 = new HashMap(); item2.put("description", "Second Item"); item2.put("quantity", "15"); item2.put("picture", blue); items.add(item2); Map item3 = new HashMap(); item3.put("description", "Third Item"); item3.put("quantity", "50"); item3.put("picture", red); items.add(item3); Map item4 = new HashMap(); item4.put("description", "Fourth Item"); item4.put("quantity", "20"); item4.put("picture", blue2); items.add(item4); model.put("items", items); String content = processTemplate(templateFile, model); String expected = "Order Form\n" + "\n" + "Picture\n" + "Description\n" + "Quantity\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-1.png]\n" + "First Item\n" + "20\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-2.png]\n" + "Second Item\n" + "15\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-1.png]\n" + "Third Item\n" + "50\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-3.png]\n" + "Fourth Item\n" + "20"; assertEquals("incorrect output", expected, content); } public void testNewScriptOrderForm() throws Exception { File templateFile = getTestFile("order-with-images-template-2.odt"); ImageSource red = new RenderedImageSource(ImageIO.read(new File("src/test/resources/red.png"))); ImageSource blue = new FileImageSource("src/test/resources/blue.png"); ImageSource blue2 = new ClasspathImageSource("blue.png"); Map model = new HashMap(); List items = new ArrayList(); Map item1 = new HashMap(); item1.put("description", "First Item"); item1.put("quantity", "20"); item1.put("picture", red); items.add(item1); Map item2 = new HashMap(); item2.put("description", "Second Item"); item2.put("quantity", "15"); item2.put("picture", blue); items.add(item2); Map item3 = new HashMap(); item3.put("description", "Third Item"); item3.put("quantity", "50"); item3.put("picture", red); items.add(item3); Map item4 = new HashMap(); item4.put("description", "Fourth Item"); item4.put("quantity", "20"); item4.put("picture", blue2); items.add(item4); model.put("items", items); String content = processTemplate(templateFile, model); String expected = "Order Form\n" + "\n" + "Picture\n" + "Description\n" + "Quantity\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-1.png]\n" + "First Item\n" + "20\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-2.png]\n" + "Second Item\n" + "15\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-1.png]\n" + "Third Item\n" + "50\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-3.png]\n" + "Fourth Item\n" + "20"; assertEquals("incorrect output", expected, content); } public void testImageSourceWithFileName() throws Exception { File templateFile = getTestFile("order-with-images-template.odt"); ImageSource blue = new FileImageSource("src/test/resources/blue.png"); Map model = new HashMap(); List items = new ArrayList(); Map item1 = new HashMap(); item1.put("description", "First Item"); item1.put("quantity", "20"); item1.put("picture", blue); items.add(item1); Map item2 = new HashMap(); item2.put("description", "Second Item"); item2.put("quantity", "15"); item2.put("picture", "src/test/resources/red.png"); items.add(item2); Map item3 = new HashMap(); item3.put("description", "Third Item"); item3.put("quantity", "50"); item3.put("picture", ""); items.add(item3); Map item4 = new HashMap(); item4.put("description", "Fourth Item"); item4.put("quantity", "20"); item4.put("picture", null); items.add(item4); model.put("items", items); String content = processTemplate(templateFile, model); String expected = "Order Form\n" + "\n" + "Picture\n" + "Description\n" + "Quantity\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-1.png]\n" + "First Item\n" + "20\n" + "[frame:1.409cm,0.706cm][img:Pictures/dynamic-image-2.png]\n" + "Second Item\n" + "15\n" + "[frame:1.409cm,0.706cm][img:Pictures/1000000000000028000000145B20E0B1.png]\n" + "Third Item\n" + "50\n" + "[frame:1.409cm,0.706cm][img:Pictures/1000000000000028000000145B20E0B1.png]\n" + "Fourth Item\n" + "20"; assertEquals("incorrect output", expected, content); } public void testOrderFormWithImageResize() throws Exception { File templateFile = getTestFile("order-with-images-resize-template.odt"); ImageSource red = new RenderedImageSource(ImageIO.read(new File("src/test/resources/red.png"))); ImageSource blue = new FileImageSource("src/test/resources/blue.png"); ImageSource blue2 = new ClasspathImageSource("blue.png"); Map model = new HashMap(); List items = new ArrayList(); Map item1 = new HashMap(); item1.put("description", "First Item"); item1.put("quantity", "20"); item1.put("picture", red); items.add(item1); Map item2 = new HashMap(); item2.put("description", "Second Item"); item2.put("quantity", "15"); item2.put("picture", blue); items.add(item2); Map item3 = new HashMap(); item3.put("description", "Third Item"); item3.put("quantity", "50"); item3.put("picture", red); items.add(item3); Map item4 = new HashMap(); item4.put("description", "Fourth Item"); item4.put("quantity", "20"); item4.put("picture", blue2); items.add(item4); model.put("items", items); String content = processTemplate(templateFile, model); String expected = "Order Form\n" + "\n" + "Picture\n" + "Description\n" + "Quantity\n" + "[frame:8.999cm,4.5cm][img:Pictures/dynamic-image-1.png]\n" + "First Item\n" + "20\n" + "[frame:8.999cm,4.5cm][img:Pictures/dynamic-image-2.png]\n" + "Second Item\n" + "15\n" + "[frame:8.999cm,4.5cm][img:Pictures/dynamic-image-1.png]\n" + "Third Item\n" + "50\n" + "[frame:8.999cm,4.5cm][img:Pictures/dynamic-image-3.png]\n" + "Fourth Item\n" + "20"; assertEquals("incorrect output", expected, content); } public void testImageResize() throws Exception { File templateFile = getTestFile("images-resize-template.odt"); Map model = new HashMap(); model.put("coinsV", new FileImageSource("src/test/resources/coinsV.jpg")); model.put("coinsH", new FileImageSource("src/test/resources/coinsH.jpg")); model.put("earthV", new ClasspathImageSource("earthV.jpg")); model.put("earthH", new ClasspathImageSource("earthH.jpg")); String actual = processTemplate(templateFile, model); String expected = "Default\n" + "[frame:2.54cm,2.54cm][img:Pictures/dynamic-image-1.png]\n" + "[frame:2.54cm,2.54cm][img:Pictures/dynamic-image-2.png]\n" + "[frame:2.54cm,2.54cm][img:Pictures/dynamic-image-3.png]\n" + "[frame:2.54cm,2.54cm][img:Pictures/dynamic-image-4.png]\n" + "MaxWidth\n" + "[frame:2.54cm,1.57cm][img:Pictures/dynamic-image-1.png]\n" + "[frame:2.54cm,4.12cm][img:Pictures/dynamic-image-2.png]\n" + "[frame:2.54cm,1.9cm][img:Pictures/dynamic-image-3.png]\n" + "[frame:2.54cm,3.39cm][img:Pictures/dynamic-image-4.png]\n" + "MaxHeight\n" + "[frame:4.12cm,2.54cm][img:Pictures/dynamic-image-1.png]\n" + "[frame:1.57cm,2.54cm][img:Pictures/dynamic-image-2.png]\n" + "[frame:3.39cm,2.54cm][img:Pictures/dynamic-image-3.png]\n" + "[frame:1.9cm,2.54cm][img:Pictures/dynamic-image-4.png]\n" + "Fit\n" + "[frame:2.54cm,1.57cm][img:Pictures/dynamic-image-1.png]\n" + "[frame:1.57cm,2.54cm][img:Pictures/dynamic-image-2.png]\n" + "[frame:2.54cm,1.9cm][img:Pictures/dynamic-image-3.png]\n" + "[frame:1.9cm,2.54cm][img:Pictures/dynamic-image-4.png]"; assertEquals("output content", expected, actual); } } jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/TemplateTest.java000066400000000000000000000127311152125033300314510ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Locale; import java.util.Map; import net.sf.jooreports.templates.DocumentTemplate.ContentWrapper; import freemarker.template.Configuration; import freemarker.template.TemplateException; public class TemplateTest extends AbstractTemplateTest { public void testZipped() throws IOException, DocumentTemplateException { File templateFile = getTestFile("hello-template.odt"); Map model = new HashMap(); model.put("name", "Mirko"); String actual = processTemplate(templateFile, model); assertEquals("output content", "Hello Mirko!", actual); } public void testUnzipped() throws IOException, DocumentTemplateException { File templateDir = getTestFile("hello-template"); Map model = new HashMap(); model.put("name", "Mirko"); String actual = processTemplate(templateDir, model); assertEquals("output content", "Hello Mirko!", actual); } public void testXmlSpecialChars() throws IOException, DocumentTemplateException { File templateFile = getTestFile("hello-template.odt"); Map model = new HashMap(); model.put("name", "You&Me"); String actual = processTemplate(templateFile, model); assertEquals("output content", "Hello You&Me!", actual); } /** * Header/footer are in styles.xml * * @throws IOException * @throws TemplateException */ public void testStylesDotXml() throws IOException, DocumentTemplateException { File templateFile = getTestFile("header-template.odt"); Map model = new HashMap(); model.put("name", "Mirko"); try { processTemplate(templateFile, model); fail("undetected invalid reference to 'title' in styles.xml"); } catch (DocumentTemplateException expected) { } } public void testUtf8() throws Exception { File templateFile = getTestFile("hebrew-template.odt"); Map model = new HashMap(); model.put("Text", "שלום"); String actual = processTemplate(templateFile, model); assertEquals("output content", "A Hebrew Template\n\nטקסט עברי: שלום", actual); } public void testCustomFreemarkerConfiguration() throws Exception { File templateFile = getTestFile("number-template.odt"); DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory(); Configuration freemarkerConfiguration = documentTemplateFactory.getFreemarkerConfiguration(); freemarkerConfiguration.setLocale(Locale.US); freemarkerConfiguration.setNumberFormat("#,##0.00"); Map model = new HashMap(); model.put("number", new Integer(1000)); DocumentTemplate template = documentTemplateFactory.getTemplate(templateFile); File openDocumentFile = createTempFile("odt"); template.createDocument(model, new FileOutputStream(openDocumentFile)); assertFileCreated(openDocumentFile); String content = extractTextContent(openDocumentFile); assertEquals("output content", "Number: 1,000.00", content); } public void testLineBreaks() throws Exception { File templateFile = getTestFile("multiline-template.odt"); Map model = new HashMap(); model.put("text", "First line\nSecond line\nThird line"); String content = processTemplate(templateFile, model); String expected = "Multiline Text Test\n" +"\n" +"First line\n" +"Second line\n" +"Third line"; assertEquals("output content", expected, content); } public void testCustomContentWrapper() throws Exception { File templateFile = getTestFile("multiline-template.odt"); Map model = new HashMap(); model.put("text", "First line\nSecond line\nThird line"); File openDocumentFile = createTempFile(".odt"); DocumentTemplateFactory documentTemplateFactory = new DocumentTemplateFactory(); DocumentTemplate template = documentTemplateFactory.getTemplate(templateFile); // do not escape newline as line-break template.setContentWrapper(new ContentWrapper() { public String wrapContent(String content) { return "[#ftl]\n" + "[#escape any as any?xml]\n" + content + "[/#escape]"; } }); template.createDocument(model, new FileOutputStream(openDocumentFile)); assertFileCreated(openDocumentFile); String content = extractTextContent(openDocumentFile); String expected = "Multiline Text Test\n" +"\n" +"First line Second line Third line"; assertEquals("output content", expected, content); } } jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/TextExtractor.java000066400000000000000000000072311152125033300316550ustar00rootroot00000000000000package net.sf.jooreports.templates; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.io.Writer; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * Simple tool to extract text from an OpenDocument archive *

* Images are replaced with a placeholder text in the form [img:Pictures/image-path.png]. */ public class TextExtractor extends DefaultHandler { private static final char LF = '\n'; private static final char LS = '\u2028'; private static final String SPACE = " "; private final Writer writer; private StringBuffer paragraphText; private TextExtractor(Writer writer) { this.writer = writer; } public static String extractTextAsString(File openDocumentFile) throws IOException, SAXException { ZipFile zipFile = new ZipFile(openDocumentFile); ZipEntry contentEntry = zipFile.getEntry("content.xml"); InputStream inputStream = zipFile.getInputStream(contentEntry); StringWriter stringWriter = new StringWriter(); extractText(inputStream, stringWriter); inputStream.close(); return stringWriter.toString(); } private static void extractText(InputStream inputStream, Writer writer) throws IOException, SAXException { SAXParserFactory parserFactory = SAXParserFactory.newInstance(); SAXParser parser; try { parser = parserFactory.newSAXParser(); } catch (ParserConfigurationException parserConfigurationException) { throw new SAXException(parserConfigurationException); } DefaultHandler handler = new TextExtractor(writer); parser.parse(inputStream, handler); inputStream.close(); writer.flush(); } private void write(String text) throws SAXException { try { writer.write(text); } catch (IOException ioException) { throw new SAXException(ioException); } } private String collapseWhiteSpace(String text) { if (text == null) { return ""; } return text.replaceAll("\\s+", SPACE).trim().replace(LS, LF); } public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if ("text:p".equals(qName)) { paragraphText = new StringBuffer(); } else if ("draw:frame".equals(qName)) { String width = attributes.getValue("svg:width"); String height = attributes.getValue("svg:height"); if (width != null && height != null) { write("[frame:" + width + "," + height + "]"); } } else if ("draw:image".equals(qName)) { String href = attributes.getValue("xlink:href"); if (href != null) { write("[img:" + href + "]"); } } } public void endElement(String uri, String localName, String qName) throws SAXException { if ("text:p".equals(qName)) { if (paragraphText == null) { System.err.println("paragraphText is null!"); //FIXME this happens when we have nested text:p tags } else { write(collapseWhiteSpace(paragraphText.toString()) + LF); paragraphText = null; } } else if ("text:line-break".equals(qName)) { // HACK: line-breaks are first inserted as LS // and then replaced with LF *after* collapsing whitespace paragraphText.append(LS); } } public void characters(char[] characters, int start, int length) throws SAXException { if (paragraphText != null) { paragraphText.append(characters, start, length); } } public static void main(String[] args) throws Exception { System.out.println(extractTextAsString(new File("/home/mirko/tmp/line-breaks.odt"))); } } jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/TextInputTagTest.java000066400000000000000000000077401152125033300323020ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * test input field tags <text:text-input text-description="JOOScript">...</text:text-input> */ public class TextInputTagTest extends AbstractTemplateTest { /** * input field with content $name */ public void testVariable() throws IOException, DocumentTemplateException { File templateFile = getTestFile("textinput-variable-template.odt"); Map model = new HashMap(); model.put("name", "Mirko"); String actual = processTemplate(templateFile, model); assertEquals("output content", "Hello Mirko!", actual); } /** * input field with content [#assign title='Mr.'] */ public void testDirective() throws IOException, DocumentTemplateException { File templateFile = getTestFile("textinput-directive-template.odt"); Map model = new HashMap(); model.put("name", "Mirko"); String actual = processTemplate(templateFile, model); assertEquals("output content", "Hello Mr. Mirko!", actual); } /** * input fields for directive in one line

* [#if showname=='Yes']...[/#if] */ public void testDirectivesInOneLine() throws IOException, DocumentTemplateException { File templateFile = getTestFile("textinput-directives-oneline-template.odt"); Map model = new HashMap(); model.put("name", "Mirko"); model.put("showname", "Yes"); String actual = processTemplate(templateFile, model); assertEquals("output content", "Hello Mirko!", actual); } /** * input fields for directive in split lines

* [#if showname='Yes']
* ...
* [#else]
* ...
* [/#if]
*/ public void testDirectivesInSplitLine() throws IOException, DocumentTemplateException { File templateFile = getTestFile("textinput-directives-splitline-template.odt"); Map model = new HashMap(); model.put("name", "Mirko"); model.put("showname", "Yes"); String actual = processTemplate(templateFile, model); assertEquals("output content", "Hello Mirko!", actual); } /** * input field for directive contains "&"

* [#if (cond1=='pass' && cond2=='pass')] */ public void testDirectiveWithSpecialChars() throws IOException, DocumentTemplateException { File templateFile = getTestFile("textinput-directives-special-chars-template.odt"); Map model = new HashMap(); model.put("cond1", "pass"); model.put("cond2", "pass"); String actual = processTemplate(templateFile, model); assertEquals("output content", "All passed!", actual); } /** * input fields for directive "switch"

* [#switch option][#case '1']
* ...
* [#break]
* ...
* [/#switch]
*/ public void testDirectivesSwitch() throws IOException, DocumentTemplateException { File templateFile = getTestFile("textinput-directives-switch-template.odt"); Map model = new HashMap(); model.put("option", "2"); String actual = processTemplate(templateFile, model); assertEquals("output content", "Two", actual); } } jodreports-2.4.0/jodreports/src/test/java/net/sf/jooreports/templates/VisualTemplateTest.java000066400000000000000000000206321152125033300326340ustar00rootroot00000000000000// // JOOReports - The Open Source Java/OpenOffice Report Engine // Copyright (C) 2004-2006 - Mirko Nasato // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // http://www.gnu.org/copyleft/lesser.html // package net.sf.jooreports.templates; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class VisualTemplateTest extends AbstractTemplateTest { /** * template contains input fields: * [description:field1,content:field one] [description:field2,content:field two] * @deprecated use {@link TextInputTagTest#testVariable()} */ public void testVisualFields() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-fields-template.odt"); Map model = new HashMap(); model.put("field1", "First Value"); model.put("field2", "Second Value"); String actual = processTemplate(templateFile, model); String expected = "1: First Value\n"+ "2: Second Value"; assertEquals(expected, actual); } /** * template contains [#setting number_format="00.00"] */ public void testScriptWithSetting() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-script-setting-template.odt"); Map model = new HashMap(); model.put("value", new Double("7.5")); String actual = processTemplate(templateFile, model); assertEquals("Number: 07.50", actual); } /** * template contains [#setting number_format="00.00"] in new JOOScript style */ public void testNewScriptWithSetting() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-script-setting-template-2.odt"); Map model = new HashMap(); model.put("value", new Double("7.5")); String actual = processTemplate(templateFile, model); assertEquals("Number: 07.50", actual); } /** * template contains [#list items as item] */ public void testScriptForRepeatingTableRow() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-repeat-table-row-template.odt"); Map model = new HashMap(); List items = new ArrayList(); model.put("items", items); Map one = new HashMap(); one.put("value", new Integer(1)); one.put("description", "one"); items.add(one); Map two = new HashMap(); two.put("value", new Integer(2)); two.put("description", "two"); items.add(two); Map three = new HashMap(); three.put("value", new Integer(3)); three.put("description", "three"); items.add(three); String actual = processTemplate(templateFile, model); String expected = "one\n" + "1\n"+ "two\n" + "2\n"+ "three\n" + "3\n"+ "Total\n" + "6"; assertEquals(expected, actual); } /** * template contains [#list items as item] in new JOOScript style */ public void testNewScriptForRepeatingTableRow() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-repeat-table-row-template-2.odt"); Map model = new HashMap(); List items = new ArrayList(); model.put("items", items); Map one = new HashMap(); one.put("value", new Integer(1)); one.put("description", "one"); items.add(one); Map two = new HashMap(); two.put("value", new Integer(2)); two.put("description", "two"); items.add(two); Map three = new HashMap(); three.put("value", new Integer(3)); three.put("description", "three"); items.add(three); String actual = processTemplate(templateFile, model); String expected = "one\n" + "1\n"+ "two\n" + "2\n"+ "three\n" + "3\n"+ "Total\n" + "6"; assertEquals(expected, actual); } /** * template contains [#if (item.cond1=='yes' && item.cond2=='--')] in JooScript for directive condition */ public void testScriptWithSpecialCharsInDirective() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-script-special-chars-template.odt"); Map model = new HashMap(); List items = new ArrayList(); model.put("items", items); Map one = new HashMap(); one.put("value", new Integer(1)); one.put("description", "one"); one.put("cond1", "yes"); one.put("cond2", "no"); items.add(one); Map two = new HashMap(); two.put("value", new Integer(2)); two.put("description", "two"); two.put("cond1", "yes"); two.put("cond2", "--"); items.add(two); Map three = new HashMap(); three.put("value", new Integer(3)); three.put("description", "three"); three.put("cond1", "yes"); three.put("cond2", "no"); items.add(three); String actual = processTemplate(templateFile, model); String expected = "one\n" + "1\n"+ "two\n" + "2\n"+ "three\n" + "3\n"+ "Total\n" + "2"; assertEquals(expected, actual); } /** * template contains special characters in JooScript for output */ public void testScriptWithSpecialCharsForOutput() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-script-special-chars-output-template.odt"); Map model = new HashMap(); model.put("value", ""); model.put("JooScriptNullDevice", "fdsfdfs"); String actual = processTemplate(templateFile, model); assertEquals("Value: ", actual); } /** * template contains jooscript for changing tag attribute syntax: @#location \n attributeName=value */ public void testScriptForTableSpanRow() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-table-span-row-template.odt"); Map model = new HashMap(); List items = new ArrayList(); model.put("items", items); Map one = new HashMap(); one.put("col1", "cell 1a"); one.put("col2", "cell 1b"); one.put("rowspan", Integer.valueOf(2)); items.add(one); Map two = new HashMap(); two.put("col1", "cell 2a"); two.put("col2", "cell 2b"); two.put("rowspan", Integer.valueOf(0)); items.add(two); Map three = new HashMap(); three.put("col1", "cell 3a"); three.put("col2", "cell 3b"); three.put("rowspan", Integer.valueOf(1)); items.add(three); String actual = processTemplate(templateFile, model); String expected = "cell 1a\n"+ "cell 1b\n"+ "cell 2b\n"+ "cell 3a\n"+ "cell 3b"; assertEquals(expected, actual); } /** * template contains jooscript for inserting script in preceding element */ public void testScriptForTableDynamicColumn() throws IOException, DocumentTemplateException { File templateFile = getTestFile("visual-table-dynamic-column-template.odt"); Map model = new HashMap(); List headers = new ArrayList(); model.put("headers", headers); headers.add("header1"); headers.add("header2"); headers.add("header3"); List items = new ArrayList(); model.put("items", items); List item = new ArrayList(); item.add("a1"); item.add("a2"); item.add("a3"); items.add(item); item = new ArrayList(); item.add("b1"); item.add("b2"); item.add("b3"); items.add(item); String actual = processTemplate(templateFile, model); String expected = "header1\nheader2\nheader3\n"+ "a1\na2\na3\n"+ "b1\nb2\nb3"; assertEquals(expected, actual); } } jodreports-2.4.0/jodreports/src/test/resources/000077500000000000000000000000001152125033300216565ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/resources/blue.png000066400000000000000000000002571152125033300233170ustar00rootroot00000000000000PNG  IHDR(p$ pHYs  tIME  .FztEXtCommentCreated with The GIMPd%n%IDATHAgZ ɇX,{ .'E*IENDB`jodreports-2.4.0/jodreports/src/test/resources/coinsH.jpg000066400000000000000000000223111152125033300236020ustar00rootroot00000000000000JFIFdd&File written by Adobe Photoshop? 4.0C   C    o =!"1AQ#2Baq$3br%R/!1AQaq"2B3 ?VnCbz0 /D3Gn#؟=c䲫z"IU-`<c!?с` oKSrIHҰ7J#? =^cb>0˾lX Gy>rtb?yyo;=F~֖e)o{U{riOQݓ`>^)se: ɏ׉l^H㪹%apIF؏G:8t`+Ka;nqr͑%UWbVG{CTX+¨B-MԺ*mgsWsdnS"IvU cN*܆qױR=V;oT )lzٗ桓|n"(KVDTّH718w,S&m$6VK$5p֦sg}@[G=N{k[j*XXm9aOT.^{+IPݏy7W,TdVWn_ Z45)5{/12.$ ;;݁cˮij߱ 䓢u$60x} m}![iMUVu^Wűva  -QEΆv_r^ȪigL+@WF &xQk9rk||Y<5:_+vL䷫ߛˊ~'OJW#=sNB6=$ cEb7C~ץa@ m( ݁-\(GEtVWU/|ɚzJmDZX~y-ڼF!1U[ (NǐszPcoΔ1Q VgڃZ4cɛ)H $YFTج;! ? ?f^fSѨUYc .u쑩ZgBU7?nacڛ!fD2_fXEEq*ﲮ֭8دfJԣ˶꼐Ó 41zE)VB F6<]92iĬΚ݆Z3sGȚ4J#4`YBf ('Jsud̾ċy٤?)ɷ&']1{$h׫oUU{Xn?SO>Yvrzj(%lɲ79l_MM2iE wŐ+TV|:J+T<輛:uqU^(UeGu?۠::QLTi۬a~O#;2H#G_VϞRԸem$vJ1#Sڥ4cg%DLy5'DmLv|ª޼=|( Pػ~eS!N0?ġ'co*4+%:/SFXf-]\9!#s.ʀ۔:>B'..9NY"bv^KؐUðMf W%.>A]Uv,&eGø sr3%SP.gqX wP)+JrÏbb ܗeN[4/0GRdi_ZF1 xj K'-Rr{H 3>Ͼqx,AirSWm]MpZb}# 1F!科FyoА] +j .)Q G^qIsXmehHocFEo"a;yud18"uܫC's":?q+Z1y'~XT]u5c4#B(T @ۢċL+#`L0W % Hm:@ۖՖ܌}~Ab=)](YzS,ӹJGlwz?TO*#E]I! v'^dۀpw0~Coo/PGx<~4m7HJvxٸ#e ?ȁoM-UTNk{hR*:LѴ;`<$ǎL4Std0~AF"'KޢJZ*NL ."CܙAS,G/B+{V U`jS҈ҷD ܣg1X|NjveOI`W> mꛜߟ[mOXjQtyCŕ! c)'?4 ~l,O`D:4pÏ"!]m# _\IY =G)nnҜM)J~v&%;@&;W/9W3ZQ+گA3C'pyN]7jR`ڃ5-[CF٬o8)];~ vuh̐_OU;C7mJ[~-ŕufh Xs jXE֧^fkLSEj$:Gv1> uzSA==NV&Tc)ZWFi%);4xJz5?[o+(`GfNj-4*;W0R%܍e*^Je *<̒>|-GM&SW-Eb<氊@4>=0|5>n>.]>,kLr1 Fdh԰̜CJ6fs#ƀ;̏*e*wrS13UԖ'I"fŃJEy,a92tQw]guvaz?flpVXݣxCBeYParL*II=5x:: ~ijMjW]f<1@9$@mSnS~KP\՟O̜mfbTLE0H雄V.7 ^&msY)5~<O8tGj?VdczgE&y%sÄ"~*a oqݣ4b詣`Ia`[^d-AXJnX$ V<>:xun4Zl^:AZN:D]U &`ʺ@Sz4,6|U lf&(k+i׺e9*jLvP'EҳlF)Vm3}Ȩs%{U*%VZR~='5.ꮡ¾ʦ[riP;1V2DQ y&Bw${f#R0::/)W>W yI,~h(ن:ԭX27PB,rvd_z~|\gbqX1EYSAf5Dǔ=QŔ(9GӨfhd Ux=r]| >:uO03eFج} +GKT^lsdZtvx!5~\$Ra{kc[-rZML3Ku/k^M!DK ;,e:"fopSZ~z6y1~> ȳ;,q,ĢtLN_#UEc[Zz#~hlpX1Ի<DIdq?5,Si%3WlaI/3nw @:dp7 棫ݩ9o#%P,l\rWoY*7MbKYzS*{zyw1Yhb,Mؽ+O<)yYonhX]A|s'7r9H7_vzIpU'Sӏ*Qn:Bu6Y3GWodh#GjhZ#I/ēO.SU(9'>GQ@Ex;O+Jӿ^%h"iS%Xa; xsU)XmjD4M$XiˋՆW(LBE51,^Ys*QiZ2heAk%]# +/RnJU[M% EYī B V29<_KG\fa0!5UV(.[L'q*z?:H ~>z%GQH@EZ1ijىg:4SA  *;;m6&qgށ]ѶjrTI+…nH^U6w5s|yD{4LO 7nQt R,vݳ#zs: n,LlGe,.6]TN$hU *p8jB#U0yդٵ]DS,>ɚ6 eT%fIX;%#'pNdIj/qV(Y9*Q\`V@ωc_'z-]#fܳ2f,J!QUF4gn jQFի6c4QaX}6ŻpuJWU {Jz}/K*cqۂ]ݙgcؖmH9]٪Ӯ >?#f'0~@d+C&7**A ǞF7kܙ ɦy{5JrȇFr=Q|t;.IϚVDZ˨iBOn9 G`2f)35nR86J wbv*GA{VWXo׬+Y#!y*P<<}VQ֚U%[6kK&YlibE7@>G,dlmuPS_#Aq!i q67 n IbPͧm)7Y$tE8IRׂZ׭]V:E~U' j\jۥB(t0<>:yXǝ2?t#lj$m郂"LJI&5X,w;??6,uprÓ>I>d WaѐcoO~ p1o1XYzhza%@"`:#00Xjodreports-2.4.0/jodreports/src/test/resources/coinsV.jpg000066400000000000000000000215041152125033300236230ustar00rootroot00000000000000JFIFdd&File written by Adobe Photoshop? 4.0C   C    o ?!"12A#QaBRq$3%bScdr6 !1AaQ"q2BRb ?])@y=t~ơŋXٹEw3Q&qxLF]H:t`>OL(;t±^:`ˠנҀtmp7J0o8>D:J0tAwvo=#/f+",%pE;BPz˲"Ty}EZ&n=4oQ ld1;n&2M|n4PTSo}e2 h8lEn"upHp4ܗJ7S! uDɴGvf-0 zIn;ˠ;^zPnx#xa(ĮX=) 6Q +/m1ހ-8% [~|bͰn*3yVЮ'**?Ď չ#JٙjlD nڿ3W/ډ^uϿ0 9\-Lr?g./mEO$m$AЬHvU#N"$A  uΛ zs8hOayYY)R ZIKvȷ ! ټk3G1NG9{G ,ʦWwf ݼp%W\5a+r:*QIc3ݶp$ TGm^E]Z輁Lf^H{KHtyٗwu)!SA|fp >a,Ix= $iX2lٿONBF9=Qvtp㒰*}]g+Et0bYaha`=π:H&R"$lngX>[~nYdQܼ0#] tՙ؏fbGי?Nݿ;1'E~)%݇r(I|ɼ(_>DXuU%l/_m^O>Ʃ-}'_]rskI7 "ԆGFe`H`QZg+%$~1:$+t> ΔFf:񴒸4s쪣rOe"~~|QD9mMh1Z~܂S, sOaYu%*L )F˔B8l};7?-}'ԝUF9ĪyCm}]f  akJ:Hy1+ꈮ^H܆yoA~Yr:o5K(A pZeD{.'KNcf?BzLY^Mp"6ھC`3K ɿ̒JZ ,745/o9ؾjA~F kY$ x7 ؟=V)$#z5.zN'*W,>0dbR@Qnf:d-%Z*Y^RZ7u~;#K51 %I[-W),Xj 1\':n%XJQ*Gu#l}`-h✚"c<$#ӭ}E 9Z\ԙR2Y2Z+%gJI `ۻ?`~ Drk(lY\尳gbƽʩ3 ȟFm֨fA5 2j\ u%f#9KxGƀd60Yh#!KṔfCV  CoWTjШ1&SG[Ss*W0Z&QŹz>W.]Xh6"+n?JzG'~wSy*]˽=[k2-MAc^G ivo]Iz[`鵫W$ı^,"DFdV:Mq>|#HLԳZEtE",u0hMya)-yU "ەe^oDZz&MBSƪ^lO&-i($[jGNQ8M|ytZ,~,yN-e|u {A"}8򋌌e>=?^YUs*g##ikIee?#:;MU]̼Ukj+% )P*cYy`I帒Vn^ȁNwfKiZ9T-Y"V)8*&v |,{IcFü5ʠoУaD^: +?IǮR3FK 4c leplWmSNy-H!fzXD)<ͼbYi#{?[9+nCk*P'vܡthsekkd>[ XljKcFSU+dTwXNm}32qԓ^RXmAtj&{goߵ"ٍ-C1EPʹ<Շ8juUaj&k$9 ]Ylؔ-F8I 7N~mֈ U{f (ӒgDU@nȝ:+/pd1_Zv'«c'pw"HㅶJ!_k9"Ӯ: NB@T,# WVؖpHnz%«m%`=oE;cWRTPz <ijs5rie)_%gTxE`ŠZXDUE(犯݉$߯JT8mhX`rʄgt"d8abE*ﳣc#a`TJ*k+ZFYKYcgX`iRvx(J҅'gXޏKĩo_y23تE#y#v8+/놚uϞSGӞd5i,d2DܤX@<nяmo^E][{ѡB޹nK%i玳eۻmzO2|zwJ-[ծ%THXʱ&R@Jvn*綣߯_ ^Nyf/sm7?J tsPMNT;xl w@Xtƒٜr$ailKy2Oܯrv#B21kqB)W%}›(E:"S#$@˗ um3G"k'"ѫ®HAk8 yc8w$OLGʅZe>i&G֍.73jW~m EF;*օUY4pxN IF=75= kbE^~H َNz1)9;fɉ, 7z!`m[w>RrLoB ~OuD2C#7|W@f,I(úsX|~-9=4 ?4" &(?:1R4^*:!A#fMHc~6%! <ɊS0ZR?N03 ]x&L8 D}dmqT1;bg2WI0(QwH=OaOM.cDU~!Z>Բo>tD*X n;h 1ӬNGu qǞBe>-Ic}K`8aem$>4#o~QYL]iө1iӸ'Oۭ#(BirD(:L]dیka2DQ٢kXcJۦנpmt>>t(z_ۥa@ۥX_JOjodreports-2.4.0/jodreports/src/test/resources/earthH.jpg000066400000000000000000000071451152125033300236020ustar00rootroot00000000000000JFIFddC  !"$"$CdK8!1"AQa2qѡ$B#DR/!1A"Qa2q ?vZ+| h**Rxo Hp v N8"OSAyzVh^"&c \?禲K:\(xw (2m)`r1Ʀu/VV4dF$YHF9nc:RYWzuI.™rses^CEiOi^!,UiIP O#;kgrLMG/:AUp0 WBFGHSo+=4Ktn=p9ҞKEiDҶGJ~[_[N*h46~6rgCqGe~Y8=-m}Ci*z #)8Ζ'nVcŰSjRiLeSO)`0@N9$^4;P^ڂ2K̩ "2XG!'gNs%5/IP)iX x:\pG8ex;rJzP̬[T7198vߙm82&aswWK ȌUԂpAխ,*6':&#^r .{h\7q%Lʥ $*BX, Ok4M-?3L]z:}[qfj Fѵy;#ȁqsFW!hkfV~u Q(Qv ?Glb˟mk> e/\ YY+ߓ89P=游o@aԳ_=]]T$-bFପW88繒b|*Ke:H^iq}@W'ظwjރI&[TomrN'ڌYYy@EM"'6LCO 5$N,= U%z) Ēǵ؂gSq S3* ꢋ:Th"p<=sRCHN_?86޶G% R)հH u׎2#{ʓX[vL) ?TZ70^6*ΙGQ_RbM.APrn^!8NZxhژ|szj njW8,7|Dܑߎڪ/r*q*iy?BFʥAQg+E-7XNO:ϯ괍$QJ%ŎIuokczie I7=RRb9rvVtؚ['n~i_5)s 4,#<pq`UoEf}1 aOr8ru1H'89sGYh*6Q-9 V`ID"X~w.$yLRtJH4`XX F8?p*0rm(2"UsB\|갶6 .“+JrU|z,=9-p <_IKV)"Fpq7?nKWU՗]r;ly瓏OAQ;9N8TCg,{TF^Z| &_u'4겻,-X;4)'Qd.G:э܅49/El xrwzV{.kϊ=5Vu5Y fH-a䁅={,CcW]~{7\a oOŽM\4SD]7TqrF0xfױGnl~fT<0VJBDANu=چ 6*Ws@ qg}uϷ$>WʋkS'jyfyAdzy22k%s6z$ˎwp׺Z~+]i?-] scrГ-W~k)tT{̱T\5M;LJ_:G 0C[@%K|:hM8& PsN?|k&lxysv N;X%B/Wvt ;q8N~ԛZ()VD'9hN#<mЄXЄZЄ=4!Ƅ"Є4! Gt!! ք/:!hB/jodreports-2.4.0/jodreports/src/test/resources/earthV.jpg000066400000000000000000000070321152125033300236130ustar00rootroot00000000000000JFIFKKC  !"$"$CKd6!1"AQaq2B#CR2!1AQ"a2q3BRr ?QP[KKDb-ʺ $BO}xSdgvp(qoЅ:15CK[$_hP~1;JQEdx"@Yd vо V?FtmjѶTad "(Ps@iC1>'qۚąE/Ք 47*@(kEwIp$>1Bg9u8Z)O:sP1X->`hk!Ǖ<9RL+ZX3 !;wЄs΄)4tUT$.cj.phMj_<:Q,S() 6 mP 4~J3Tom[n* 02PS 0Kt*ƆKꮪ/u7C IK λj~p =XAA򵍲W:X|C[zyoUjj,PG#1IrBn qZחpZG%|8EPI$~b'#Lqg@^LytQPxSЌh7y%sΤeM\?Ir+K.%S:χ:h@5f"Vl,⡡2“$nC1&8ۑǨCSc[&[Tf@x }{uxw) P[}s80'mK_hC_lD^ "ۃ?ji =Q@IJf6?c6Zl-N't!JS5ež Ҭ`2q=\xBjyB @&s@a/S!NxJql0 {d= ;v[GNpSsJeweXxJ̢Vryt,No9,'H(PNno<&`[FmpRFHǻ`ۅq- H ~Pn5I6% iӎީeOď~dk&vW+XHG8a929R719Ʒǃxz #qXQ}G[iR\ƞǾID3YsOi9p~Hޤ[#!Xl#_λK40}~qOG"E+bZ5_K>,LF]<618Vn-8-rղ9!H$1K07ly'N/e)Ȋ2_2؎R?,D'MI/)@z_?,N)WGBzzԩC-DAH\],UUORVToP ('GNf߿t ~0snʢ$-KBS]Χfa1cMD6#\Jκh4T׽L:2(*8(򴾫1HNU>-͞QqEVQDQ̝ʨrA ~ mäh$(]#R!珟F-_f<5FBÂ9݀w9=|xNlT34dDu+8! G^G+Ϲi KtxnAyvpk6.ss7h@$b>k,}0bk}-F$$OR`T;Bi'=MEe3[w=$].[u,DBjc!MekmO]3l>|W kOO)0ׯ $NNy:ڵ !"+b1aNR Ĭ)BOz16&oҸ6~1(mLH~$0! d-vÂD=;wO*.9Di}U'ȇnpcb|Z \FjwD7 յ*(堒"=F;v`AbHic% px\IjZ5m*I>Αb }=hRnu[(X˘6_g?Bp?e9: A)T]2Sz< aŮRiUSxt懧jy?TÁfi걩Zii%sf9$u Ƅ&Є!-KBX}S)nyЅ BAsS<(ձJ7\ v $jIծNa!K,iG?&ֆ1\QKB}^M~jodreports-2.4.0/jodreports/src/test/resources/empty.odt000066400000000000000000000156551152125033300235400ustar00rootroot00000000000000PK$X5^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK$X5Configurations2/statusbar/PK$X5'Configurations2/accelerator/current.xmlPKPK$X5Configurations2/floater/PK$X5Configurations2/popupmenu/PK$X5Configurations2/progressbar/PK$X5Configurations2/menubar/PK$X5Configurations2/toolbar/PK$X5Configurations2/images/Bitmaps/PK$X5 content.xmlVr0+<^tg.t&ә΄.ӭdP+z`#ShvH{/>ÎlKR:ψ@S^>wj&"RbN)~g.tQPS] ȉ. *eMD*ct郅m,1ېI%; W=8fcTZUcz%S;͊JZy =bǨ57%mNۉTk0'z\(Qˆ t2Ss8%Q@ޮ;bmJ \f&w`ictSc9@*h7:K)T! O=ݾ o5DEp*Az%?'MEdڴo|'!܀`|zFLThStquk3HAtUZTĴd0% gWy BO6|cktBmsd_H}3Z'pg_ *#9BELE39uuK0# 7ٳSrLkCiE}=%h#$.N`FGi J{s4yv+d~TvGMRA8c]1t- .1 n S4g-T P&s9(FeB/^7P'&S3DWPCӂashxPK  PK$X5 styles.xmlZI6W*m3I8At&=4I-HʲH%KMm9xcE;()eATʲ7S.vp\ |y!RG3px3X|ׇĊlCh`O* &Jޛx{ob_6*-oXؽ4oTcZn_s^C6A |~;=,{)"cβG8jh΀`RVzbԖC∠DXMPࡈh%f2 &M-ѧGU`ߤ3zs.`Rю0"(PTlՕi3ևw%#䝶]<6GHv!,Ͽǵ,Jxp1`䱝-.Ҫ *d;F:jj ]( qJ&8%m$Qӛ ʌ$sAE  uqwyaDPj=aY&sT%&[B9Xɷ%i >4&ܲ4O@KEW_/1M+*(n z(Ls]vAÌDe-$xV;I)#*"t [h~cU¹5RPȠq=|\?nx|tҐy]a~@}`c*Z0.چ+ ЂZ6}ܖ{C1]|>^tH33NK|cW1@N6 L +ru<wƻgjOf)çWb l"m(}2ۇi@kZ16b#T}uұ$w:IyxRmkpS! . /^~߼w_}`d~_}G=qB4òVg}ODp+-:[띿xPK5@""PK$X5J TTmeta.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-9073 Mirko Nasato 2006-10-24T23:08:44 en-GB 1 PT0S PK$X5Thumbnails/thumbnail.png sb``p ҅@ HZ4G100vx8Ty{ 'w?YoTٕq_j5 I Z1 :YxeSBPKNhjPK$X5 settings.xmlYr:}W0~'@v&cH饥̽o^@7#l$sGO$GZ=g%~[EJsw^U@r9'W[g3@3 @chR7w^d)Yi& 75_nhٕ[7kryD55nnnjϏFB-} L vUe{|orӺl2I](Ol*e;;p/h}zW&{;f.ת#3(P/|88F|#xY092E2*qzp7P0cBQX\2yˉW ZgC{pg("ײt*ыy]]PSCk>pz]d58>l~@hA1P]B.P͎ eAu8x^*|OA@` *pT)!`vh If]H3䟧C؄_1 8!Iyձ- 1H" BDSP,$b8d搱l[2iߣج̝5%*r -zDOizu9Fms$$i!~0%H!(]ΐŠ,LPDڐj`6#Uqt=R<0 I?w/\2j'L=NG5b`.A2.֑B:H3)%^2l &uA"R'tIW_J4)JP>p,D)hqm}? ,p" H&2gmbA3@tmg(dG"]ى!p}~c{WbӿLe%{l0Aic_o;_>)bڨvY[1cLTKi{h:,6{Ŗz G;ZF@#\p6;-7i.[Dyj+XJPK$X5^2 ''mimetypePK$X5MConfigurations2/statusbar/PK$X5'Configurations2/accelerator/current.xmlPK$X5Configurations2/floater/PK$X5Configurations2/popupmenu/PK$X5JConfigurations2/progressbar/PK$X5Configurations2/menubar/PK$X5Configurations2/toolbar/PK$X5Configurations2/images/Bitmaps/PK$X5  -content.xmlPK$X55@"" )styles.xmlPK$X5J TT meta.xmlPK$X5NhjThumbnails/thumbnail.pngPK$X5t =settings.xmlPK$X55b9>J(META-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/empty/000077500000000000000000000000001152125033300230145ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/resources/empty/META-INF/000077500000000000000000000000001152125033300241545ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/resources/empty/META-INF/manifest.xml000066400000000000000000000035121152125033300265050ustar00rootroot00000000000000 jodreports-2.4.0/jodreports/src/test/resources/empty/Thumbnails/000077500000000000000000000000001152125033300251225ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/resources/empty/Thumbnails/thumbnail.png000066400000000000000000000007011152125033300276110ustar00rootroot00000000000000PNG  IHDRq;ZIDATx 09$gf:{&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&`b&p~Z IENDB`jodreports-2.4.0/jodreports/src/test/resources/empty/content.xml000066400000000000000000000054021152125033300252110ustar00rootroot00000000000000 jodreports-2.4.0/jodreports/src/test/resources/empty/meta.xml000066400000000000000000000021241152125033300244630ustar00rootroot00000000000000 OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-9073 Mirko Nasato 2006-10-24T23:08:44 en-GB 1 PT0S jodreports-2.4.0/jodreports/src/test/resources/empty/mimetype000066400000000000000000000000471152125033300245710ustar00rootroot00000000000000application/vnd.oasis.opendocument.textjodreports-2.4.0/jodreports/src/test/resources/empty/settings.xml000066400000000000000000000170271152125033300254050ustar00rootroot00000000000000 0 0 32651 15109 true false view2 3002 3002 0 0 32650 15108 0 100 false true false false 1 true false 0 false false false false true true true true false 0 false true true true true false false false true false false false false true false false true false false false true true 0 false false high-resolution false true true false jodreports-2.4.0/jodreports/src/test/resources/empty/styles.xml000066400000000000000000000210421152125033300250600ustar00rootroot00000000000000 jodreports-2.4.0/jodreports/src/test/resources/header-template.odt000066400000000000000000000143061152125033300254330ustar00rootroot00000000000000PK.2^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK.2Configurations2/PK.2 Pictures/PK.2 content.xmlVQo ~ioC%4mRJ0N0xDƭ% }G7R$; Wrgi$U9e]7* NY+ZLZD],Xie&d&4S+љv=tٖTd==\f*a!1PS{#P eE,b/LVM̚˙< =b& f|6dL簱$Yk'XfHjɽ^{ܒHMt95RE5&3cRzqXGExe:g\9b;צ}DlQ?n閕毃2ӎ ]% )78*`PrFKw$ajLV9}[ ͷ#׽s;kLT|z 6L2͡MK0R[pe9EW19<ϼwߕ' TiHm9P!xf iD> f7۷yɌ{Hi*?xnvjzw:joT- Eb搱oBjPdV{+Wsx[g < T_ÍωW&TD>Bqvz. ??PK嘖 PK.2 styles.xmlY[o6~0-I;Kҷa0%JIYNdJ0|nΕc"!ɖdAx. ɇ?Mի{Q4'BmMFJ?11V-5Q[oECxP[{XcsխpQU6] FbQ1T PJf]-4K-rM+*0bSi [31$;"gk|UuϮBh ٵa)uk 9٤/Zܳ Tl7t/נzMH{VTϊ}E=4R@`4Y2[aJ&Ts 3Ž+pM5NPHA)bsKjAlB2n|~9l'I!{}z1,!`nG-c>%n* )#fmU !8FjyiЍA9NT I?YჁB?̵z&:aӇrQ"`m9AœC "(fM՗ðW @83nP sqg ]4O/N*q&I.{AI)D^_Zsl((I{d_Wj5 b\]ԘrdVPb3UHfNܚԿ).P% 7Tׁ&`uԓ i{+!>;"8$BbV B s?\]@}h?aea`o$ر PTpۜ~j}Lٛ%F$W:{ S"|q !v<0t0| Ʊ磦4a%ۘK055|s kyw rP\h`%ݷ{2P )?2ջĠXa셯\~ŗ0i &4'S']qgx7r#"MsΜ&Søx/M5#Ek0uPOPK6W4PK.2meta.xml OpenOffice.org/1.9.104$Linux OpenOffice.org_project/680m104$Build-8913 Mirko Nasato 2005-05-03T14:23:39 Mirko Nasato 2005-05-29T00:01:27 en-US 3 PT41S PK.2Thumbnails/thumbnail.png sb``p ҅@ HZ4G100tq #!G{O]Z4dN8}<7WpY …`Hyyⷜ[N*ʸqd5ùᯒދyyno|U|J+ԘZ9D:G$3l^֨aSOW?uN MPK+PK.2 settings.xmlY[s:~`x=^1$J17a-F<CYېI3'貟|JY,~஠]{y[Ç 1z.TpC>Q5QU5,WQr⃪j*iշ Zڲ`,εREBJJOپPPBWxBlYJba|SPX{bl*\PҏO;jwYDѫbk;>sl +G/.֬Ҷ,T2=]|<;xg.P$4@mL`@xex]H0%Lq@"^D LCʕHb-{9s{Zbli;#*_3 j;Y!{.~VОA w&!BNlI\-nV.-WmJl8N z6:sJ0k 歃]J1lJD.A8qc=1"m*݁8æcc (ѻd~McHL T\dfĜJ=Ք %id 75IT?M'N:mb^YDm)4HDOu,XzLjC-RvԒ@>;?%_ì6sggf՝߇lV_Jm|+^i{ugkĬnjdNUkE6֞kƜ< =$xO|Zr6X=k|*4Ab>HhkGc]gƁ[["0(" 6q{|ɘ<6w'҅_pЛ"(Ӭ0@8mFRXk)T4} HGy&E3/[L0#F$J }qyvVM[jPK$a PK.2META-INF/manifest.xml1o0 {Se T0ttK\A P6~ݓn2WƔ?M[,S^g>My^J- ޼O\5DݖR.u-3_r1EUkoB]WdTڄ oƘޱ3(l@nuBRY) w{Ep.i4mS.("Xaj,lRn5Ђօ"c8 uu1 H: ˶FmԗrlQ\SyPKbi42PK.2^2 ''mimetypePK.2MConfigurations2/PK.2 {Pictures/PK.2嘖 content.xmlPK.26W4 styles.xmlPK.2 meta.xmlPK.2+Thumbnails/thumbnail.pngPK.2$a  settings.xmlPK.2bi42$META-INF/manifest.xmlPK jodreports-2.4.0/jodreports/src/test/resources/hebrew-template.odt000066400000000000000000000150061152125033300254550ustar00rootroot00000000000000PKѪ2^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKѪ2Configurations2/PKѪ2 Pictures/PKѪ2 content.xmlVOo0)qvXX;MB6h'6;N !#\l7i-]I\OV)Ti&0€ "&jr OF/lI ) :a+KN eFEŊmּ3݁lCW+bwxݳ7ىEWBQ c(ttL L|i;mqYC%QNm<¦)Xl3~S:|wz9(AC`dU;nm:L\o%(bSve; e&_@Y?hUA_#@{bI]qѥzm!t aŘ,h`88bB,le6ig Q-f(ѱZwax`\ip9 2p&ۻ@/ S'x!mM9O7`@>%њ9y|4*6Uv׺`Z? FsF"g c 1 ^"S RIQ|*à3>yl K29׆֑-s5\ a?(#3u7ؓ)IM ֛Af*O+Ն#/Xs ԾCu,c(< }wr^Sv=*N =ĆndL8hvO o3^~~ZG; G;Z.ݣPKUB PKѪ2 styles.xmlYKs6WpioE"3dzHz2 Jh@_ŋ$RdZ]hocOe1=ME ؎D}~cSQMե{'i!?}Ai|@RۓVEOsD.Ik"Oȵs{Mɡϔ(Is*ltˑ1Zſ hh]8GP>[[ſv55Q9$ v|VB ;E'n@u7'̰ H4j)_R[7%j;dgFzKcwR bNܢ ȗX%ϫx>˲EF J1]AID(^l D-::~XaQp%jT&z2 eIFqJ[(+xcZ`ǖTz)h*؂Dꁰ놧ЙU\"*qJ8!弖`#o! L(9E#*Ho`ivQ+F4hK3 yÔ͛@;GKpqB<-dt҆H̜W5#R;}b4ewu_ U I d8J)k+8}~4o/# {3;pn1ʻQ2v)g5&$է+lʼnrX9׉z֥PXDn-a>//k^ښ+lZFEbfg ^wUefffD[kW];64(DON#Q>4keA{fQsPoDF*RA-t"?:s”,aZL6[Hb<[.O? tA|Cvkv\k4uWa 30Mcޱ:9fNQ̛o(\ǩ; ,.9M5jk/<,본o~w,۳{:Z+,YI60KΕ%j:hp=Lj.2/LJGL}g[$ :f 6Ћ-Rc,}aƊ[;VI@q\a]ˋ?d<|B%wl,tTCiIY3?խ;l7'b.\P`u#/5,rc-Bϝ?z..^  w0HõC ].@n }|*6}qKۻ ,C)~mp4t6X<q9Bd'H?u/PK+4PKѪ2"  meta.xml OpenOffice.org/1.9.79$Win32 OpenOffice.org_project/680m79$Build-8876$CWS-ooo20beta2005-07-15T00:20:312005-07-15T00:22:331PT0SPKѪ2Thumbnails/thumbnail.png sb``p 5@ H{񊁁񋧋cHŜ7Og08\mW7\^w>c[ r:66g{m-b?W:ojԟ5rd]yo/<yrbE_j(q=O7//nAzv_W7gxVx-ON=m\e 3^ OQm4i)00xsJhPKk-PKѪ2 settings.xmlZ[w8~_kO IH8 =B%ɶ0.8ߑ ݤowY|34S=y^N>6jG{Uڗ_l6lvC#Nv}U9m3yQDmaYHjZ{st;˞<]\Bz=IGIժ63}/T6z12aRFYڵLYa~r }{6GR@=V˛z#N𘅵Uxǣi\w9kDl=G~:?k+y'g嘏,#Q瘺$ )ң gID!aأy"ή+qg%j$8n#RyyuQmA7?eyO()Cu(>d6mZaB(JzwƂ1p9m!=id܋F' A8yE8A̱ w"8C+Bl#0OU>Y$}]HKv*< xlyJP>!g87򼍂#xZ"A\2˼2H̯@=iNZꍛ➡\'J뛃(Fl6݉?'@CI{tMVmeca NnTh珖)D$3t]5=Z)%J}vJ\w ;}[Tޚo1)3>6Ӿ{-h{0I3BӕP*]9_AЦ=7Oa2jv~5lU!tM\EAm&2GDZOIA at ztGԝbKBV/hܐug%^5oC޷Ho#+[uI;YÚ=oZ.Jc~6SFzBWYj;_Z7,WyD&Dd}rەlAF\!z@hgM]t˾Y|!V=m@9) m)7^s168N!JHoW>α0y]^v,=5į X=)Q%k$"\ߩ?dUo골¾| kTo(0q$Uw$X8d+=~1`-[$G,Ng%^U ٭* {Б7:3E`< z9|jH`^SyUZy@XNY($vKsϮb}̂_y6RY`cy^ptXUnp Q7rc,vUjCv8$b~,e*āEx IL,eC;~q9`Re—D.ԋPK :"PKѪ2META-INF/manifest.xml1o0 {Se T0ttK\A P6~ݓn2WƔ?M[,S^g>My^J- ޼O\5DݖR.u-3_r1EUkoB]WdTڄ oƘޱ3(l@nuBRY) w{Ep.i4mS.("Xaj,lRn5Ђօ"c8 uu1 H: ˶FmԗrlQ\SyPKbi42PKѪ2^2 ''mimetypePKѪ2MConfigurations2/PKѪ2 {Pictures/PKѪ2UB content.xmlPKѪ2+4 styles.xmlPKѪ2"   meta.xmlPKѪ2k-Thumbnails/thumbnail.pngPKѪ2 :" settings.xmlPKѪ2bi42dMETA-INF/manifest.xmlPK jodreports-2.4.0/jodreports/src/test/resources/hello-template-2.odt000066400000000000000000000134431152125033300254460ustar00rootroot00000000000000PK oL2 Pictures/UT ~BBUxPK m2 Thumbnails/UT =BBUxPKoL2suThumbnails/thumbnail.pngUT ~B^BUx sb``p ҅@ HZ4G100ntq #!@*sb~޺^=x]x 02#1v|o\] ?s&c#)U{`M(Lƻ{*?HOW?uN MPK0m2`[  content.xmlUT {B{BUxVMs Wj7LrtڙƝ#d3E@Ytˇ$J4^$]@CŒ=Q J4!* |6[%#Iď l)ʒb`}'uV<HSqT IxbtUml2݃c!3.L1PJvX^f6D>Rq`Z;cda4j..nnnqbU`Hq4\VĠ6jC TU﷓;bI !57WլҊ$ |U$U^UӪoGWSe||i͵bBΊJRL{C=Pl[(!+P2![L VOUX->֞X; +$*]Z[}!~u]bm_q#tEh{2kf_-gڐO|y%;_*t~:;q(sg6@&B0 ܪi8-^"V (C8 Hxs ~[oD ̆CʕHpнwZ/ymsιlOW>Z 7RI~~Za,DE{ ;&񴐻\[ڔpvl!+Hڮ1JvYC$yls(mIKĈQt4:vqK/D5}N7 J"1A6DJPIrJ+ b7#V橦H dl(N 0tlNi:80t?Iicʪ&jKQhwD" |ȥU.dkv6Bxʑ Tp% 泥IU*"U0Sцx 7N=X![+@@?0y &ԝ01!juߓXkK!ގ4Lq3vBʙ#)s ܑ|"ޖ4dcR9CZ8H+FT&Y:p͘OAvaOioPK+'xSźH?G j8ukkVEP!V&1nps3/qDNwz^d fH2Yhk-JQ0ivu=ϤȟѮ$+sǺ:C4xZͥEqk+ڿPK oL2^2 ''mimetypeUT ~B^BUxapplication/vnd.oasis.opendocument.textPKoL2iaq styles.xmlUT ~B^BUxYr6)47K[OMM h@.@P ElNG9dFؿ éӆ+dU`2W}W,yζۚIK},Z>&[E 7[Ikf6ߪ`._q;ڲk[)օǹƨ IK5d)UPG(N˯IemM<-ާfIzM* L-4ҹP7$zPK/jٌ8쯤& <,]1wEl[S[]}빱Pw\f6vlꡢ?zzߑYH=V="3ꩤ^aiZȠo]TСJ3R\, vKT Ȥ,:_SOL;]K9gjY볞%HTTL5$(&׼L5mA yFp:%ɖ7 Y@j'_0**C<AIյ?1XcviVS. Lb 5HPKoL2ameta.xmlUT ~B^BUx0y zT Jn͞+lӤo_ۀh?3cnmfJs)Y1A$.ӗ?TQϜ0D%[&L2#[+4Re+$\#[!HvLL%hN#iPn e|1C\RE|vB) \׫S0AB0n{r|$)ehahne;0q4.8jMlmSHU=Y˧K)vqߢeW#|>d{Psh77 Q's.XhZ# vb*>q_~;Q^KΕSp8 {g6X=YDA #3jwuBj7Ni>^d(5S eg..UgIn&ݜ T6 K)c{هkړ\]H4k:qNZ>jbib|sńpPK m2 META-INF/UT =BBUxPKoL2bi42META-INF/manifest.xmlUT ~B^BUx1o0 {Se T0ttK\A P6~ݓn2WƔ?M[,S^g>My^J- ޼O\5DݖR.u-3_r1EUkoB]WdTڄ oƘޱ3(l@nuBRY) w{Ep.i4mS.("Xaj,lRn5Ђօ"c8 uu1 H: ˶FmԗrlQ\SyPK oL2Configurations2/UT ~BBUxPK oL2 APictures/UT~BUxPK m2 A<Thumbnails/UT=BUxPKoL2su zThumbnails/thumbnail.pngUT~BUxPK0m2`[  lcontent.xmlUT{BUxPKoL2r ysettings.xmlUT~BUxPK oL2^2 ''  mimetypeUT~BUxPKoL2iaq  styles.xmlUT~BUxPKoL2a meta.xmlUT~BUxPK m2 AMETA-INF/UT=BUxPKoL2bi42 :META-INF/manifest.xmlUT~BUxPK oL2 AConfigurations2/UT~BUxPK jodreports-2.4.0/jodreports/src/test/resources/hello-template.odt000066400000000000000000000134171152125033300253100ustar00rootroot00000000000000PK oL2 Pictures/UT ~BNMBUxPK m2 Thumbnails/UT =BNMBUxPKoL2suThumbnails/thumbnail.pngUT ~BLBUx sb``p ҅@ HZ4G100ntq #!@*sb~޺^=x]x 02#1v|o\] ?s&c#)U{`M(Lƻ{*?HOW?uN MPK2 content.xmlUT =MB=MBUxVQo ~ϯioC%4mRJ0N0xDƭ% }GR${ Wr.i$U9UNo׳R,K&-JZN.M2SpIR2YɎ ;dlv*a\كcvI3찐՘^P"?Rq\Z;k i\-^`oWZxTN13x1_[2KsX ӓSC,yRUNv$5tGaycnIn& aW1_)KupAˋ8#t,2pJ3sIkӾ]"s6w鎕/2ӎ ]ϒnlm0@QA(C9€%Y;[v\d>Qrq 'r-J9K57p&τyG*e><…AG[&Px{^K-"+ΘgчlJғ4tUa|˴Q"qCZ@Bqv~. ?PKoL2r settings.xmlUT ~BLBUxY[s:~`z&Ő0 CBJsnd#1_6dR.-C0'-~/-Vx|/G*ug_o.t{P‹L8Fp>WլҊ$ |U$U^UӪoGWSe||i͵bBΊJRL{C=Pl[(!+P2![L VOUX->֞X; +$*]Z[}!~u]bm_q#tEh{2kf_-gڐO|y%;_*t~:;q(sg6@&B0 ܪi8-^"V (C8 Hxs ~[oD ̆CʕHpнwZ/ymsιlOW>Z 7RI~~Za,DE{ ;&񴐻\[ڔpvl!+Hڮ1JvYC$yls(mIKĈQt4:vqK/D5}N7 J"1A6DJPIrJ+ b7#V橦H dl(N 0tlNi:80t?Iicʪ&jKQhwD" |ȥU.dkv6Bxʑ Tp% 泥IU*"U0Sцx 7N=X![+@@?0y &ԝ01!juߓXkK!ގ4Lq3vBʙ#)s ܑ|"ޖ4dcR9CZ8H+FT&Y:p͘OAvaOioPK+'xSźH?G j8ukkVEP!V&1nps3/qDNwz^d fH2Yhk-JQ0ivu=ϤȟѮ$+sǺ:C4xZͥEqk+ڿPK oL2^2 ''mimetypeUT ~BLBUxapplication/vnd.oasis.opendocument.textPKoL2iaq styles.xmlUT ~BLBUxYr6)47K[OMM h@.@P ElNG9dFؿ éӆ+dU`2W}W,yζۚIK},Z>&[E 7[Ikf6ߪ`._q;ڲk[)օǹƨ IK5d)UPG(N˯IemM<-ާfIzM* L-4ҹP7$zPK/jٌ8쯤& <,]1wEl[S[]}빱Pw\f6vlꡢ?zzߑYH=V="3ꩤ^aiZȠo]TСJ3R\, vKT Ȥ,:_SOL;]K9gjY볞%HTTL5$(&׼L5mA yFp:%ɖ7 Y@j'_0**C<AIյ?1XcviVS. Lb 5HPKoL2ameta.xmlUT ~BLBUx0y zT Jn͞+lӤo_ۀh?3cnmfJs)Y1A$.ӗ?TQϜ0D%[&L2#[+4Re+$\#[!HvLL%hN#iPn e|1C\RE|vB) \׫S0AB0n{r|$)ehahne;0q4.8jMlmSHU=Y˧K)vqߢeW#|>d{Psh77 Q's.XhZ# vb*>q_~;Q^KΕSp8 {g6X=YDA #3jwuBj7Ni>^d(5S eg..UgIn&ݜ T6 K)c{هkړ\]H4k:qNZ>jbib|sńpPK m2 META-INF/UT =BNMBUxPKoL2bi42META-INF/manifest.xmlUT ~BLBUx1o0 {Se T0ttK\A P6~ݓn2WƔ?M[,S^g>My^J- ޼O\5DݖR.u-3_r1EUkoB]WdTڄ oƘޱ3(l@nuBRY) w{Ep.i4mS.("Xaj,lRn5Ђօ"c8 uu1 H: ˶FmԗrlQ\SyPK oL2Configurations2/UT ~BNMBUxPK oL2 APictures/UT~BUxPK m2 A<Thumbnails/UT=BUxPKoL2su zThumbnails/thumbnail.pngUT~BUxPK2 lcontent.xmlUT=MBUxPKoL2r esettings.xmlUT~BUxPK oL2^2 ''  mimetypeUT~BUxPKoL2iaq  styles.xmlUT~BUxPKoL2a meta.xmlUT~BUxPK m2 AMETA-INF/UT=BUxPKoL2bi42 &META-INF/manifest.xmlUT~BUxPK oL2 AConfigurations2/UT~BUxPK jodreports-2.4.0/jodreports/src/test/resources/hello-template/000077500000000000000000000000001152125033300245725ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/resources/hello-template/META-INF/000077500000000000000000000000001152125033300257325ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/resources/hello-template/META-INF/manifest.xml000066400000000000000000000020621152125033300302620ustar00rootroot00000000000000 jodreports-2.4.0/jodreports/src/test/resources/hello-template/Thumbnails/000077500000000000000000000000001152125033300267005ustar00rootroot00000000000000jodreports-2.4.0/jodreports/src/test/resources/hello-template/Thumbnails/thumbnail.png000066400000000000000000000007571152125033300314020ustar00rootroot00000000000000PNG  IHDRq;ZIDATxA 0Q# HQZޮO'6߶_/D 1@D 1@D q_7SpG1GXTOu&:D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@D 1@&x仏IENDB`jodreports-2.4.0/jodreports/src/test/resources/hello-template/content.xml000066400000000000000000000046741152125033300270010ustar00rootroot00000000000000 Hello ${name}! jodreports-2.4.0/jodreports/src/test/resources/hello-template/meta.xml000066400000000000000000000022551152125033300262460ustar00rootroot00000000000000 OpenOffice.org/1.9.104$Linux OpenOffice.org_project/680m104$Build-8913 Mirko Nasato 2005-05-03T14:23:39 Mirko Nasato 2005-05-29T10:35:30 en-US 4 PT53S jodreports-2.4.0/jodreports/src/test/resources/hello-template/mimetype000066400000000000000000000000471152125033300263470ustar00rootroot00000000000000application/vnd.oasis.opendocument.textjodreports-2.4.0/jodreports/src/test/resources/hello-template/settings.xml000066400000000000000000000160251152125033300271600ustar00rootroot00000000000000 0 0 23126 12543 true false view2 6297 3002 0 0 23125 12541 0 100 false true false 1 0 false false false false true true true true XgH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMApAAAAAAA//8BAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCnNjYWxlPTEwMAptYXJnaW5kYWp1c3RtZW50PTAsMCwwLDAKY29sb3JkZXB0aD0yNApwc2xldmVsPTAKY29sb3JkZXZpY2U9MApQUERDb250ZXhEYXRhClBhZ2VTaXplOkE0AAA= 0 false true true true true false false false true Generic Printer false true false false true false false true true 0 false disabled false true true false jodreports-2.4.0/jodreports/src/test/resources/hello-template/styles.xml000066400000000000000000000145611152125033300266460ustar00rootroot00000000000000 jodreports-2.4.0/jodreports/src/test/resources/images-resize-template.odt000077500000000000000000000227661152125033300267630ustar00rootroot00000000000000PKQ;^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKQ;"0-Pictures/100000000000002800000014B2D956EB.pngPNG  IHDR(p$ pHYs  tIME  CStEXtCommentCreated with The GIMPd%n$IDATHc00aQG-xQG-xX 0'蚚IENDB`PKQ; content.xml[o6BP*˲bI.aXǷ($j$_#)ɔĞm4x{x$^ő5lV-4 ɰgӶaH| ?q"&~[ ct)wc~8ɥ&wW.QeqlJ <U%oIU׬M逡iUa A5CZUx#'8E,Y1HO v]w:֦eCt:- t".T]9oj5MJfCZAO3b2XPexAux)#1ڀI۽Iqa ,KB3VvSsT) Tۨ\=6O>"4^4\pDi2|@36.퇏hLfvHJa\SD h5 -A 5kjG *] LW(2(OL?)"@N!8 Ҵk,PX<{ҊEBgFCjnA 9!`?KdK%=X_(-6r֘DJ)iOmw8 Yނ#%‡ FdϰMhA9}j>%?Y8s.prwVOQ 2rIЗ٩KBja&Sػ:Ml)lH'!TmLdd8S%tGBRj&3}ZۡuE8YrAW=Cw09vngngws?>0@\omrSАtOA>cDs~_E pv|2悄sC4A!8EVPF'~ 3QFRy5p1 mxMce~DQ}t+ےo0]h$6& 1!81wؔ8KW7V(kNqёד$FC 61_#V`.w9_/dq_%ZFhбH&5q% 觉I} O[|"K ˀ. ԵgDsFn. \[ϡzRK.[=>x;=q@KǀAzsޤlCWGPKi5^16PKQ; styles.xmlZI6W -3E.@mD=RhYh1-.M&<Gey_~'wމGlHYgjfLP,)S3D2'4gƔ1f_Z+t߲acI}0ŗN%d)H$Ҝjb U?W/R] O\i_[{U$y{ۗBT-Pd4o{{}+fcNG4*EC li%NSM(Y.YoPΤ/ie8h (hlBEyuܻNE4b$fQ 798x;mfRޱ<σ_h.ԯ >; T#?YI#:Pɱi~!7mZmR/6=~,}xr.ɘ-iK\z4_(poK9D ZXl WL< "𳅸o5t/͞it#:fEg Kr&v^DyΩ!KB~B -40n,$0* !׎ }KE $zq<4nr8'H\at]G)21Dev)GOǓ\f`ef E%×L1׭Bo@ؖFÛǩwﻝ#%YR\s7V(a=>V!8PzY1`fA )f3"tan Lbxb"1,7jS7*PKQ;Twiddmeta.xml 2009-08-01T14:17:192009-08-01T20:12:55PT00H15M31S5OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319PKQ;Thumbnails/thumbnail.pngUWg']LV:4g*%3х4JE)X^ P8' R*x,LK QHIP9;mu9}y_rlL=rV&/j#CCfݚޡuڒM}y~؊ KĝP:ϱlvenelxC-0L!A_l,nq= |H^~lAۅ`lmNotXvyŝW/{<4` #0[Jyx_[SI(LL.*a\E:%[.eibӆ*Ɋcea Ofx;L ܗϸe7i,N9/s7܍r#chqO>A3B9k9l/9{=L gfUɃO avwwI#PK;b-99xzOa?'s" ^_A)"YF Cܲ}˚KۉO+{GV&AkxD]? 'U 릛+1%J SW&)Dn㢂dzF)>Ehqvupr2o:]>;l% [m&]i!f4O!^DbdA3JC)aל)i ЊT&a+%LLNۮfc B5F&( =5ˌa†QHUMdݼ2 ,d&l^`zo?񇖶Uz(Zt0Ła輝 U=ȡ#K "]W뷷nir秪VWo̘TYVf\Z;?ߺ*~*@d}s}lMHesa5ؾI}l{c61(^vW=q>̌ /<4> |qFW#)Ǡ`rzOQ^˨ɶ•G !O }J !!PFx4]TXU}bq̱v+3A" h3 Wm.x d.QP2l &_5oIA"t7_l%~v.Wɧ$BJ?NE0Q@ہ~:nL. ) bʀ`1 (LEkd, ul-`QXl5fX~fC@vjVYN97S&՝5j_J4)$淌uG(=Q)#Ǿ~C(_d-/ؤ4DžߺD2:Rw[%'zO9D&q}璠ol0)[G#e t~J>MĶbBdI {Ϧ4<MA`Hx\Yq~c6 ?vDPjf 5T.茆yrE?P1W;!7[q8̲l|L9Rj q@,U6b&+I!d=o1]tYmlcC_Y<20V^쨹 faP4=eyiz˘sĈ"6Bh dZa):u][f ה 4PxvO ni {W݆08z%Dmow?r ʴQpj3 S>,rҫߪy_[PK2 PKQ;META-INF/manifest.xmln0 J.JHH;$1BIRpOӛ쨕%2=_U2 %vA(V{O'O?ߓexD7?;ҚHјTn46l z* styles.xmlPKQ;Twiddmeta.xmlPKQ;9sThumbnails/thumbnail.pngPKQ;'Configurations2/accelerator/current.xmlPKQ;Configurations2/progressbar/PKQ;QConfigurations2/floater/PKQ;Configurations2/popupmenu/PKQ;Configurations2/menubar/PKQ;Configurations2/toolbar/PKQ;+Configurations2/images/Bitmaps/PKQ;hConfigurations2/statusbar/PKQ;2 settings.xmlPKQ;Mhr*META-INF/manifest.xmlPKI!jodreports-2.4.0/jodreports/src/test/resources/multiline-template.odt000066400000000000000000000134061152125033300262050ustar00rootroot00000000000000PK2^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK2Configurations2/PK2 Pictures/PK2 content.xmlVn!+V7LlmRUФRX-^[Ux8b7oֳm# 7Vh5/j&j^~ʛL׵bv WQ|@WyUibitRtv2)%{i`H9AQ:2Q]x~ PssЩ\DZha -ϸ+Q.>,K2ܳ"l1a[IvHw.b$pB8E:UiOFC,?ҧ ħ܌YH FQ#e' _|Xk3%pnw|ȏcqv\>[PK PK2 styles.xmlY͎6) 퍖Mҵ=4}Z,6)weJw&Eqp}xJ>&r,U1/>yիU f`- V˭53[oUd0[˯8gs͝rlm5F݁-͏cB\cԅ楚k|2n#'Ǥ٦x\Jl٤N{iy`&͖Ytkf\|CmczvjU5lFWRWTS_޻">B߇\X;HUy3{^;WJPPwZNHQst?SWT@/KA4Yt-dз޽Z.U*P%)X. H`dcOR5M@Qs 9T@5v/{PDhO#=8ɞI9dUwG^MKHN VVtm>5m*c{n4J-`ۚH a.)Hh4h^:I4{U*F~ a ]jmEeTRa:j 5TS8G^6Va /T4UO?efo, 8W̅&v7`Fw @ᖃtM\l5 "I{I<<ÿlX&ܷtKL\jǯ?vKT Ȥ,:_SOL;]K9gjY볞%HTTL5$(&׼L5mA yFp:%ɖ7 Y@j'_0**C<AIյߌ1XcviVS. Lb 5H15yٜguNι\oiON4_0'`ilFӓy֫)*ΕgvdZ}튯Ք'@M5l`TWκҭ픵ejXk3fk>%*?G GlN&thiS*5Ws¯k8ȡo?"컕LU6}(&|ĜahMM*g]<8&PK@ӋqPK2meta.xml OpenOffice.org/1.9.113$Linux OpenOffice.org_project/680m113$Build-8930 Mirko Nasato 2005-07-18T20:50:56 Mirko Nasato 2005-07-18T20:52:45 en-GB 2 PT1M54S PK2Thumbnails/thumbnail.png sb``p ҅@ HZ4G100tq 'WA{OEx8!*.2{M:n|e; #``4\Ц80g#_}/ɋj>wV=w봤F%6_VϟZ%PW>TCBaA"kuM;5Q) PK]#MPK2 settings.xmlY]s:}ϯ`N&KK H;s߄neGl`->#ΞՊU$J/4GjU2y{Ug3bD MY14Fh~%}dk_oci~?˜دTռR{xxۡ ~ ; ;![L vS+oYߴJ[Ol@M%(suPilܹZ;:4M0=fSkUC Y82fq_|qt. $AwQ^˨.ˎ¥BŒ }D9bqVmC܉O2TqutOy!ec:h FyA[+/b4!{\*kZ@Spu` [g%!QP<7p08f'<"2O`< c@ח8dosyJP Q@%Apt>47#V橞H(PAY1d_S ؜Fp68pt?6錘N4RhHh_`4;\2*g,= vG1bډ]$(#u-%T婀j OB*_6[lS&uA:{E Μ%v s Bׁ1f/=++Pt I;ͽښ39Jd`4\q\$b #wP2Q)j R2z(B[MA9^? [h Hl2}pwMJol,vM~PKgPK2META-INF/manifest.xml1o0 {Se T0ttK\A P6~ݓn2WƔ?M[,S^g>My^J- ޼O\5DݖR.u-3_r1EUkoB]WdTڄ oƘޱ3(l@nuBRY) w{Ep.i4mS.("Xaj,lRn5Ђօ"c8 uu1 H: ˶FmԗrlQ\SyPKbi42PK2^2 ''mimetypePK2MConfigurations2/PK2 {Pictures/PK2 content.xmlPK2@Ӌq xstyles.xmlPK2; meta.xmlPK2]#MThumbnails/thumbnail.pngPK2g settings.xmlPK2bi42dMETA-INF/manifest.xmlPK jodreports-2.4.0/jodreports/src/test/resources/number-template.odt000066400000000000000000000162311152125033300254720ustar00rootroot00000000000000PK~5^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK~5Configurations2/statusbar/PK~5'Configurations2/accelerator/current.xmlPKPK~5Configurations2/floater/PK~5Configurations2/popupmenu/PK~5Configurations2/progressbar/PK~5Configurations2/menubar/PK~5Configurations2/toolbar/PK~5Configurations2/images/Bitmaps/PK~5 content.xmlVQo ~ﯰioC%4iRۇJ0N0xDƭ% GwR$; Wrgi$U9e+IV U,W.*i;4Y.ZLM&ILfi*&;V3,{-۩dpzzdٹ&TÂ1PS{#P@"d\Z[k ifL bo=b& f|6dLad], EUn3#viɽ^{ܒHMnt95W1_)էt./?ᰎͫFst)W\DkӾfp|χ'e%9`ĥD:eڑ6Ar(*e(gT$pzK֮lzC\"Ñ\qKvDs7Rw<&0I\xai׭׳[QY:Hmy_bsxy ~W6P#pB -\ `@p79$ؾqf|3GNVs۵6d_0~NGs֒JR!H,S&Dml ix^T꫃'9yzo\%T }'h\"PKޣ PK~5 styles.xmlY͎6) 퍖Mҵ=&yZ,6)weJwf90PT#SK*Z0ʌ.7r}x|A9O6iS1a6O% z눻Qb+z+h֤[Y3ᅶ!r'V\qJv2sw K-[P:S+PD?XP\[;HUx=;LK){WQ5uwZ}U0ϲLj*iAa-2[o~J&TNSF2(p1Q3-dEsT| g᚛*{8◵s(O.ebO;vS:}{_MOA$iSvc=(Z<ńXf%`F3CNhKh4"FË]F') Z"Y#^B?z:KM q]F9-u *jȑPHuϺW°`<;d"f?@Aww[.kݹ_?qZE`',% F50OrkcJ* = 0 ,#0]:4y^Ëd+{ΞZP'zifَ^$x &4˘"֫]$$} 3V7"5S2d2=|Hơ+IwɹYh!NH xe~/PĭPzD]3*X DJrApEZ_0Ս.F,v4= T{g@GIk}p:ů3nk\M;ɨʢZ8-Αq[N]Ȗ`M^/M ^%4w'VT( =N\s_8'nɷ[p-8-8y Nnndz9iD[Ģ'Z˥4{*,{i٠ݡ^/v eܧ*GQV^5Lُ)Khn_\bkv9S9ꔜsQt4.Re|4? oр^x_|5ZڃE;mO ?Wˍ g@2 =DEKen jYwV4D1_sfw$=Ѭ@tЎ=fRZ%ߒd |ˏ<*ࡹOFW} w}-x~C؇+/%lXQ&thEu*gw ](D>?PK)LaPK~5"ɧmeta.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-9073 Mirko Nasato 2005-05-03T14:23:39 Mirko Nasato 2006-11-30T23:00:48 en-US 5 PT55S PK~5Thumbnails/thumbnail.png sb``p ҅@ HZ4G100y8Ty{kDCAo;"fhݪ`=1 ܠε'x/ݬ`O}]2G^ߟl3nl/># .<FC{MUլs3c4+;;oޔ.,,47ӧO?˗;]}5Ʀg{;~xa}}:b߼c#PgO...6?_6n[o[[/} &Ņ g2F0޿LP ~.PK&C8wPK~5 settings.xmlY[s:~ϯ`x=bH)LBHCP&\d#ί?+K q4s@oW۟AHtNs]׭^H,^]wq7 k JL6wH'җFxlzu!FیwRa!Y._7_e|>MٹPկ8/@z01Xβf6ө!ئxYbgJnQ6׾@(K#nه鴴{[0Qg|E6s(2u*Cdn'l~\636xx pNtQ>J/%9el?ry9-ÒEֺaK7^З8zyWi'9}ye4lZs.X]̄&m(a YB')P7qclƸQNΉqF8\wҮcrtī0uX9i!]$2Q DUWɷCi}5C4U6h{';]J}>a*26g x*a>~h˗f.rxKErɔMH|luԟ 6]3k2opPEʂ,?t-fH|`pݖcv 6nj2!TNc +5$l2|&MwL,eLpLݼ$`U@\9uVEМn1ozZE[)FTG .CĸG}TC)_85>qs?oSÃ0H${jTtJ|5","$,L2rz.s-랗~"Ѿ/҆K^" 3[fP"b&xN\M8dD]W"q\;BsR;뗡PKk=F PK~5META-INF/manifest.xmlKj0@=VU1q-&fW6X; F#h[S0Oͣ)k7vc^aaӠHѵHS"Z^%ۯɴ|.Ax.25| h;7GWsh,.dLB%Mync Y'@,`(Uq:bbqW`<0RO G?Fr7=^ ޛbpmaD-*긓_PrS4I7ZOHNzbK|0Hc-2xd7!ɧa87|"sϩ]PK5b9>JPK~5^2 ''mimetypePK~5MConfigurations2/statusbar/PK~5'Configurations2/accelerator/current.xmlPK~5Configurations2/floater/PK~5Configurations2/popupmenu/PK~5JConfigurations2/progressbar/PK~5Configurations2/menubar/PK~5Configurations2/toolbar/PK~5Configurations2/images/Bitmaps/PK~5ޣ -content.xmlPK~5)La styles.xmlPK~5"ɧ meta.xmlPK~5&C8wThumbnails/thumbnail.pngPK~5k=F 0settings.xmlPK~55b9>JMETA-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/order-data.xml000066400000000000000000000021751152125033300244270ustar00rootroot00000000000000 Ubuntu 6.06 279.99 5 1,399.95 MySQL 5.0 5,399.11 1 5,399.11 OpenOffice.org 2.0 379.99 4 1,519.96 The GIMP 2.2 589.99 2 1,179.98 9,499.00 jodreports-2.4.0/jodreports/src/test/resources/order-with-images-resize-template.odt000077500000000000000000000237471152125033300310450ustar00rootroot00000000000000PKoQ;^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKoQ;X-Pictures/1000000000000028000000145B20E0B1.pngPNG  IHDR(p$ pHYs  tIME  p tEXtCommentCreated with The GIMPd%nIDATH1 Om ?x tyRqIENDB`PKoQ; content.xmlYmo6_!h՛tHu萠 `(f+*Iq$ӯQk>8xO_7%BRΆ~ƾG)eǷzgdr\sL,wW 8T*(<%a,EyYڊܪZvItک@Zg̃׋)6П(Uh6Ðqp[++G$'z2%a5Q+>-BbUqCDg ֢*1oq 97rx=L]ɖGW4W\E׹쒫eeZiWsB v8~ٱ#=)>T8/69 $2i&vܢЋ,V\]^ )B-P&b +=)PckgI3N24hr-DzgFZiiMZ mIՊ(i4B@y9p ,1Q>bеs Qs̕QK 2Iѩ"-ٳcd r߃b47hei$b2`bˎl90p l!9R.ITa(2SP k s*18%-hL8B .'qMvm)s &Vĸx-}<=12}{VC$uFcAs7yQQpm ׅF`2i.>S5ߠVKZDچqȬ&]a7<m,3vUY`D樗~%ɷ "DϐR*^2ehS jal 0wg>fvVŭmׅ{ 1M4nVϺ^n-m~&jn;}.VXF`j^ )td;sqbU D g >{w?pV);E;# P{)뽽-TL|W4j_81 M…=,mBU }5B,{quiM}WfprVצAGD :. DFIy/->OT֞E&'`' IH$g-<7nc\i)++U&z]#0- k\㇤aZ^#6 _?:Icu42 HLտ U\UKu=ߧ9>'ñBd4>3GKS)C^B9 RR-oі;GPKڠy0PKoQ; styles.xmlZK6W ڛ,˻Inv6E@m3Hȯ )J^mv: 漾 T^:dGbtL(OD6&xuK^.S9:TQ5ax/QL-9ɩZd) ʝ^Sv(+n}iMz0ȒxˆٗN%ُF^/c* "LD^Z(o2t5rŋ"2pR WD4hLE4oN5y}HWT Ѥj@h-s0nU:~{R_6'z;'7[ ޾irAcm!IɊnZn_^QCE[|6o{}/cOβ'$Kꈋ/hG瑤ߠ :J&TS!DAca%D(,Tkuҵ.& Sdzyb#WHL Cβ[ )E{T4c}*:_)r*l3N8 (Y(lN?;) !c0y;o-V  elnG2kRfՀ4W6[jHjK%؇_Qn*=cpP$7 ɾt!,a$]VZ;=:dǞmhG5ɔDȏ%!HJ-$K$+00V-׎="Lzuz3#(0qw)0pUc<AHyZF$X,$ZB:ۉ'(B&IW8J#|xՇFFkjWgMMNjfL!1& e{,d$x424Xn.`gsVSE]Z{ ~Cjܟt.Y”Aq4G󸩈Ӵ, M9|Exvr>6PKӓ坱YtuUN(Isx˪y(ն7w0dO {E[ Y]R"#}P}8J3Eņ-ށ3 $%2 +m^FxPMtJG' eXd6&חN5E6Tva405Q pm3^4b#< HM̌rqx½gFwNCovo zfyZqӳN!sJ&*ء;2ވRkh'NXJbf]\42!qZσJϜj2^X2d}$⺺P\zq~P\7kqvJr٦bRjbX w d%“imǼU2v,GRdzHdth&TJ(dt+=`5utnn#"֌o({Gl8–_g|@u B.LUQ, chf`C qͷA©јMgMc\Gx5p,$T*m&]ކ?6 o}RzG{-v5͵U먭U˜Q/[KsPKR#PKoQ;99meta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319Mirko Nasato2006-10-26T18:15:022009-08-01T20:11:3131PT03H20M41SPKoQ;Thumbnails/thumbnail.png; )!!Qu0T#' G1#fݘێKV溩~lX2^9z}y^rsRݱPuqvP:` m|Ȓ (O8^]8uA\D%ݢVu#΅SRA UV7/x(3yS7'c}e T LxhNkqnwj,\ L* g4v]Goh'3*}s ^g0ڭ"]'x nZhhnJ'qJ||~(lcў-WB>>K(+d20U4ǨH&$(Jf $~-+`A fBIt9%׈5_4X$5 k0bEl_KyJY %!|-ҳIewju&ZE$0ɬ٠^2qp.5EO[ܚNU=pz8f~,L6MZ%&>Hgz6-BǼTM(9A u"ڙZE,:ìIbCμ6`>4 BǭHU3ȟ0Bv>r44?}O@n/S^ا #*xpLҲ7Ԯv2aJv{ !ͣ#H5$rDcKN#0]+VA;L^9=Wps 䪻 L@D7 Nژ+'0R1_IxHe }meM1gMwnZK-㗅2ER\XS|ASc]d-Mk‘.RN6mDcu1o_NY|RWS0:MJ"fn H[{?<ǘ6uӁG;<3PҐ%SrB"^NZZ9 QSz pz\m$1nG(H4j)bh;T0 ƗOg{eXP*ԧLW,w{LsXyN"ISA___'y#SEsKR5Qh9;t<ޤtJCUEnW ?\U=%LR|Cݵ;PKPKoQ;'Configurations2/accelerator/current.xmlPKPKoQ;Configurations2/progressbar/PKoQ;Configurations2/floater/PKoQ;Configurations2/popupmenu/PKoQ;Configurations2/menubar/PKoQ;Configurations2/toolbar/PKoQ;Configurations2/images/Bitmaps/PKoQ;Configurations2/statusbar/PKoQ; settings.xmlZ[SJ~?eu n+oC@Ljf_zt={ؘ:IwO_z:'K2PT*ea8pNYA^S-_g._bj@ A֔Wjowe5 eaTT+WէO\̋jZLV_z͂oUq_RceRK1p5k*^_*H?N6*kV^+{p% xTxYQW(gBtQ|/xm)rǁ{W}f?-WI/s as;S PW"l:Z!JBpHPyӐDa {gO, 9-TDs=sR=.P|9dNjL)_++;,]npxxγ pPn-P£6Xٜ!ۭ鼤78ʭ!b峌ַd(x |G?G=bˡ-\߀f>QؚTD >x姞fhv 94.~wA? )F b0\tDk/SSA7뉄_#bS%Nц;m4e.gXmGulY:c9!~>M,Vf -h9)90 @h=tV?"ea5zQa}v۱rې0w0;f(A\EO0J<̦\`"+攙S4)z]*Ô c]9]LO#4,PZ nkoN7v,]W.1ޅ'8Z’ay*6-B__e;5`Ww&f0?arJƜO#a.H-MGdL9 h\$R+AVOe q7!N;3 z1c"Cl3tzХ+@oy2d2B`*ɭɻI#yM,׷̝ƖZ,WHT POJ*qru0hJqA粔zA@6*mt8Pa1 ɀJ=% x# &  KG6[g_fj3n?:a\8Χ!am`S59`'>kP=6 S Cyq{==f.x^ƌQ!h+Ė T $ZL7V6 Kz_BoPK!k!PKoQ;META-INF/manifest.xmln0 { ;&URCi04R8U ڲ 7vlϗ{%8/I$M#tWk:#\1-ZXI!(9>> [JqDr( -B}iY+"z)Uy=]-3$z׆^Na?[ 5ےatLqqՂ(ҲK‚i]}y U+ j(ώ|\PE#wc64K"ȵ.Ӷu Ad٭LH:azp@Tu: [W,B7L֠fu24h|"3#4J[rSA"!s:<`P^}L7tHҜ>re28 arrjHKF2_ r߃f4_4hyi$b2`f8dAjN0% [HΩK%U5]h|~C+R\pJ.OK i!)ɉΰX߀e<{bk:#iK|.aM&MF<%l0"%TJx8Ā4(Sj9ɔx Fj#8`+x,qVM CwW$$ar(g{rG@js* 02>*Qjq+.R"]-pI{?WL g%+^PJ`b/zƌؐ{?Eɬ\!?oMJ$Tr0A̾mZpxP=06TRlH%X~rI/!kk0(ޱ߭DVYi3.w& 35 Rt:bz0X< G>'T_l4=@m- SA%ůS/%FpP1P;Oj~#RI 9WyOQQpm s;ۤZ&-Д a u}JH92 YOjD['qEչv3N;lWee bJ$y͋(IUv\'zRYhJh'׺'-wy{G6{0+FgfoZiU}ٖ{ DCK6g`/3Vi)٪L +@ہ0vzِBgf{07 (V ]"U7ľ_'pgg޸Y3@uZ>NMmwAn 6GiPy-u@.jDwbz@Ӵn^~?D;T)ѽh6PKӓ坱YtuUN(Isx˪y(ն7w0dO {E[ Y]R"#}P}8J3Eņ-ށ3 $%2 +m^FxPMtJG' eXd6&חN5E6Tva405Q pm3^4b#< HM̌rqx½gFwNCovo zfyZqӳN!sJ&*ء;2ވRkh'NXJbf]\42!qZσJϜj2^X2d}$⺺P\zq~P\7kqvJr٦bRjbX w d%“imǼU2v,GRdzHdth&TJ(dt+=`5utnn#"֌o({Gl8–_g|@u B.LUQ, chf`C qͷA©јMgMc\Gx5p,$T*m&]ކ?6 o}RzG{-v5͵U먭U˜Q/[KsPKR#PKJQ;& meta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2006-10-26T18:15:02 2009-08-01T20:10:21 en-GB 26 PT03H17M29S PKJQ;Thumbnails/thumbnail.pngm4 ԍ㥮(S޺-6cՐHJ4!/-aޓjmMbˉEf^Fea^>/=s<}}<4Z'9:y!D>IƘ^OГ.wzZ:(o} /%w]81+'-#İ0mȞU]CQ=CvOPKySr'J|5I$zl?FnlRa#|SA>ޢݟ_h{"c%ߧZPhpӋYAuhcxr g y*WU2!)ꀅ !ZsW&Yn,~/M{VS=u]܄1kFnvWxD ^Zm(8(~{U_x 4Jt2doz^rus*NjΐXsqW6[TGVggg9nM~ϗ+d?ZGlդdW%UǔqFT+/qř{_FAah+'%q W!a|/nr " x^kiڟgcǕz\G+dE[lM9KVo:|wqΒ Jˆ `Gbe_ji=f<|tWm5a_>K1MZ#ܨ񖜴FuHIs}ѭnՍeoR|JE:p\lzg lzaBV⃁x?*]0)C: EBp0c:%!?zLteW'-lh!k1өE٪ f%Wd&Vwdh&~ǵ}9G˓ /AT!gΘ| Fr{_4 b tMִDv;/LE)X && 6ۚW7ɊGΛk4ry8E97nnnfibU  1Ve=F~p͹wioNƴ;T6,߽=?h/16o:7̻?8\lڅ(?8Nn\\7nIq9r s&f4L90kB9]ђT!I2_YRD+w?* >pTedmr|( sd آJԸ*+UE׊[ye[18Jv Ƹ>1dGQ1mi,k*-ķʊz/hmo\F!v$=s#jj7A*']u@,ّ@5XE0l:% 9 . ~e?f)NGMAUU#.Lk<+m*B* f=Sp}يk~J*_-ě"w bfo1~,q$rFQ1a&Y2W]ы(\]cxGu%: ٲ?W<8P1tVܟ8J(T/5T.>s<"pɩ;!7SpNXkH q+9ǥu16Xmk-̀FcL!Th6R?12ޒ4̨1f aPnڭ4Ɯ|22ϩk41"OM Bc&=(Vf`rkq wĊ2! Cg3a~G9f&17p<tCeoW?bRPpi613:* o;EPKb PKJQ;META-INF/manifest.xmln0 { ;&URCi04R8U ڲ 7vlϗ{%8/I$M#tWk:#\1-ZXI!META-INF/manifest.xmlPKI"jodreports-2.4.0/jodreports/src/test/resources/order-with-images-template.odt000077500000000000000000000234461152125033300275420ustar00rootroot00000000000000PK[Q;^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK[Q;X-Pictures/1000000000000028000000145B20E0B1.pngPNG  IHDR(p$ pHYs  tIME  p tEXtCommentCreated with The GIMPd%nIDATH1 Om ?x tyRqIENDB`PK[Q; content.xmlYmo6_!ӛmu萠 `(f+*Iv$ӯQ?8û񨜼wC $}0SCortp³b2H9 T9Sm&vtW 8T*(<%aE\V"6se 28 artbH+f2_ r߃b y[4E1l0͎lG1a@BrJ\BTa(27t69+Ms/7c)ͥ"C892<=ږUÑAq`촩l~&viMF<%l0"%Oiyxcl1ldPufFz#8`+|pV-C wW&{ga0S9 {0y9QL|\(8_5)3pI{ t<㌸b\)l9*?"O ='LA8<~vBHU3'YkۤD*';8܋?W.}J* SXP.I%dbm ;VE,*;muC@41a澳6*H=+X+?ڡ7Oc-F\H$'(1M BlS2Eĸ[z{=rq-w\ 40:\1* -ro[{T;H 4&pA`]߶R$6DEo5yW=pyչv3v7.ٮ%t)L6/$VAdfp]QJey+SFԂ`ms;py;4?lܾ83J6]齁&Zw+/VVI񶢡pzWUV,a#遚fC p,XU,~Ϟȝ_b jNf`;jzoo ;1U>0n 7/?pKPO뢁]Ԍ.6PKӓ坱YtuUN(Isx˪y(ն7w0dO {E[ Y]R"#}P}8J3Eņ-ށ3 $%2 +m^FxPMtJG' eXd6&חN5E6Tva405Q pm3^4b#< HM̌rqx½gFwNCovo zfyZqӳN!sJ&*ء;2ވRkh'NXJbf]\42!qZσJϜj2^X2d}$⺺P\zq~P\7kqvJr٦bRjbX w d%“imǼU2v,GRdzHdth&TJ(dt+=`5utnn#"֌o({Gl8–_g|@u B.LUQ, chf`C qͷA©јMgMc\Gx5p,$T*m&]ކ?6 o}RzG{-v5͵U먭U˜Q/[KsPKR#PK[Q;]׳Pmeta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2006-10-26T18:15:02 2009-08-01T20:10:53 en-GB 28 PT03H19M24S PK[Q;Thumbnails/thumbnail.pngm4 ԍ㥮(S޺-6cՐHJ4!/-aޓjmMbˉEf^Fea^>/=s<}}<4Z'9:y!D>IƘ^OГ.wzZ:(o} /%w]81+'-#İ0mȞU]CQ=CvOPKySr'J|5I$zl?FnlRa#|SA>ޢݟ_h{"c%ߧZPhpӋYAuhcxr g y*WU2!)ꀅ !ZsW&Yn,~/M{VS=u]܄1kFnvWxD ^Zm(8(~{U_x 4Jt2doz^rus*NjΐXsqW6[TGVggg9nM~ϗ+d?ZGlդdW%UǔqFT+/qř{_FAah+'%q W!a|/nr " x^kiڟgcǕz\G+dE[lM9KVo:|wqΒ Jˆ `Gbe_ji=f<|tWm5a_>K1MZ#ܨ񖜴FuHIs}ѭnՍeoR|JE:p\lzg lzaBV⃁x?*]0)C: EBp0c:%!?zLteW'-lh!k1өE٪ f%Wd&Vwdh&~ǵ}9G˓ /AT!gΘ| Fr{_4 b tMִDv;/LE)X && 6ۚW7ɊGΛk4ry8E97nnnfibU  1Ve=F~p͹wioNƴ;T6,߽=?h/16o:7̻?8\lڅ(?8Nn\\7nIq9r s&f4L90kB9]ђT!I2_YRD+w?* >pTedmr|( sd آJԸ*+UE׊[ye[18Jv Ƹ>1dGQ1mi,k*-ķʊz/hmo\F!v$=s#jj7A*']u@,ّ@5XE0l:% 9 . ~e?f)NGMAUU#.Lk<+m*B* f=Sp}يk~J*_-ě"w bfo1~,q$rFQ1a&Y2W]ы(\]cxGu%: ٲ?W<8P1tVܟ8J(T/5T.>s<"pɩ;!7SpNXkH q+9ǥu16Xmk-̀FcL!Th6R?12ޒ4̨1f aPnڭ4Ɯ|22ϩk41"OM Bc&=(Vf`rkq wĊ2! Cg3a~G9f&17p<tCeoW?bRPpi613:* o;EPKb PK[Q;META-INF/manifest.xmln0 { ;&URCi04R8U ڲ 7vlϗ{%8/I$M#tWk:#\1-ZXIwٙXł]z.ǒ'Ջv/=g"Su=/&Rm 9kH\Y)PASLdZlA vSUj4࣮fD6Ґ-VgÁƷ"r l=D+0,bl,IE+G]2j tgo_wZ1CUNIP\)DBwvL[!a9u6 ip„6XQ ER L>„nB,! yH,z@d"K9 (o:$ħ*fC2ˡPh,ӎ=I@7΃4'W+$"a;k"[i; E(ww~p  I<5.~w7{=>PQGSCCr4208?A'/db53n v7 Jrc֔m0kɳ^ސ|b1lw7` w(︌ư]Xsk f2KYx,iљ48Q_ In֝T'w}XS'ݗa eeԟWwIW֚mDdo/VjdqH9;֨Ubq\2jeē&e Y#zӎȗPKB< PKt^: styles.xmlYے6 }WxihYޛf7o}jN|-QJԐڛ/Di;Nf2c8T8b̔yL"&ovɗϿU,y6̻5h"r7NtH4fzclY61zc]klچTetk*#brA RJ˺8|}L*cMf..uj=ǵU) 4giЩSjzPCNU?&gBhɹa{SL?ޛ"֭.*B_\PT_= Ux;yK){ ]."x*<"#.뱠.KA3i@+EwbT'RNoPe(izn-Tb )VB*otQs]&OhIsF U@lٽ[,Vtp(wGe!a̞8h#ڣh7(;Ir0 %Oa}43' $q˰!K'Z^'u{uzNZ뤵NZu,60 HS]2_ݫIŠ <͹P/s8w4!<.y`̍ڷ@OGx+C+&Wk'DH6yN@`@!-^xnm%#JԱ/nb|W>Kd 8l(ݳ J0í[{ۘ 6.Q wyIjz跸Ôhs.Db ^B%-pX YF@4Zi%[WPM!:b_Go6Z<74yzAMuoҫC}9ݨŅ7PK ;PKt^:1Tmeta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2005-05-03T14:23:39 2009-07-27T21:51:41 en-US 10 PT00H10M00S PKt^:Thumbnails/thumbnail.png sb``p [8؀T=]C*漽m-|a+""GyȄ8|'>=B̬"gv{/᩟>kUVg,q{}@a+GM ]|e18v:)|˧;OM []mϿo>nV>tlfٵO=;;T~>ȭYl>%ouoe-:ˋi~|LKKSp|{kkڵ5O.xr)_uٛ5??Knzߧ\n7mjm ?BvH/kk(cWΞͻ땞mYl˓9Ņgzonֽ=@G^!QҶڛ#V}O*L:seqZ_3Jn,NxNj]oow}%אO(Hm7=o߾J,|2dcm9$aRM5U_Vl[c2`ccgQǮJn=@KabZ޸qm_w`X]%%/"DJx|pãOvez?ݝO}jhf}n+߾y-WǷwպoG#U+:y+IʼnjʽxyVߵ'M)''&ibMu㣣wϷr2qs~JZM)i(5ek??o/KϹaozP//_6>P./{)}}oYͿ Q(f9 S%s/* OW?uN MPK *^PKt^:'Configurations2/accelerator/current.xmlPKPKt^:Configurations2/progressbar/PKt^:Configurations2/floater/PKt^:Configurations2/popupmenu/PKt^:Configurations2/menubar/PKt^:Configurations2/toolbar/PKt^:Configurations2/images/Bitmaps/PKt^:Configurations2/statusbar/PKt^: settings.xmlZ[WH~_uC`\g(sB4b5I;9.:AEecMwW=Y!g'tA日=ZfILJP |z|YJs"CYg$YW~^^]OeO4dϗRq\^VV?q1/WjZ9]}s6 ǪvU9U_ȌIU-묜]:5R/o\ldHdXvYBeWwF@<.M+ya]ߋ8^lfʄq^ pov,<0Y6a9J %ȧ͚$tyG?H|wK\vLJ:Cy0|={R>[Vnce8P|b TwDtV>$ɕ E&ۂ !< Oiݚ.JzŠ_\+.^rZߖ}+\r[p9ū7M {i=D0#1W*-"Bgkf3`?zHJ{춁#sr VEA2:uWUĩ؛DY3dDlJ}g 4mȸ;SQn/Vh?c9\۝ yhz-zk5YW%ӦG4 Zp}גިySˉ~Rvxy.G?VNcV+[vǴ^AB?Qu2^ޮ1X+6 \{u}7ll2!Z#Kۈ# 6 gP?)…(VC T4mlIL}M!eş }ãXd'u\@OM t@c =9{~L|<ˀ-jQ ~:#a`;-avP"oq,a]z<0ri"̺$(%S(zm*Ü gaw8 kR?6 S Cyq{?=&f.x޾ƌQ!h^-Ė T $ZCm@@#?RE)/h PK B"PKt^:META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPKt^:^2 ''mimetypePKt^:B< Mcontent.xmlPKt^: ; styles.xmlPKt^:1T meta.xmlPKt^: *^Thumbnails/thumbnail.pngPKt^:'Configurations2/accelerator/current.xmlPKt^:0Configurations2/progressbar/PKt^:jConfigurations2/floater/PKt^:Configurations2/popupmenu/PKt^:Configurations2/menubar/PKt^:Configurations2/toolbar/PKt^:DConfigurations2/images/Bitmaps/PKt^:Configurations2/statusbar/PKt^: B" settings.xmlPKt^:`3fEaMETA-INF/manifest.xmlPKhjodreports-2.4.0/jodreports/src/test/resources/textinput-directives-oneline-template.odt000077500000000000000000000201221152125033300320310ustar00rootroot00000000000000PK^:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK^: content.xmlV]o0}W z@B  xp58vsm'n.[P_{ц*ͤXyQAdj{\ٳ, FhKRTHa;Щ.ZTbt*pIujH*+*:VG.fG6tkƒ-#;p+܌%[,O/XVP†SLZkci&D^]]!g IUD94NÖ,/I咪ѥuUoV'b( Yc5z6^}nz'~T96(VNӣ|)ej :Wȯ{Qx' $T\ pSn옆7oɚxfO&b_e0kh% )_ЭY88%X}ȞLd)gaXm|b9tΖ\$ Uspxr{0- {}j6 xp-#J^Ka-:Dgؓ+f V1z5$O>'@=<Ɋ {T*Gkn #>Xp`. FaI!}̆f)y~ O,tlB=}h Kjw fB97#3]qKdm౤ k/bGgyRX'9ZwۛSK\هVy+|≷pXqr.#t#DUV֝RU}?cEײq(|j{벬8ccܓT@Czj?~?PK5 PK^: styles.xmlYے6 }WxihYޛf7o}jN|-QJԐڛ/Di;Nf2c8T8b̔yL"&ovɗϿU,y6̻5h"r7NtH4fzclY61zc]klچTetk*#brA RJ˺8|}L*cMf..uj=ǵU) 4giЩSjzPCNU?&gBhɹa{SL?ޛ"֭.*B_\PT_= Ux;yK){ ]."x*<"#.뱠.KA3i@+EwbT'RNoPe(izn-Tb )VB*otQs]&OhIsF U@lٽ[,Vtp(wGe!a̞8h#ڣh7(;Ir0 %Oa}43' $q˰!K'Z^'u{uzNZ뤵NZu,60 HS]2_ݫIŠ <͹P/s8w4!<.y`̍ڷ@OGx+C+&Wk'DH6yN@`@!-^xnm%#JԱ/nb|W>Kd 8l(ݳ J0í[{ۘ 6.Q wyIjz跸Ôhs.Db ^B%-pX YF@4Zi%[WPM!:b_Go6Z<74yzAMuoҫC}9ݨŅ7PK ;PK^:8>+meta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2005-05-03T14:23:39 2009-07-27T21:55:43 en-US 10 PT00H33M19S PK^:Thumbnails/thumbnail.png sb``p [8؀ظ<]C*漽}z_6Sw`2V]tRmRgϓ%=<=ptNbtSLU(yZ7wמ{8'~wGe,q{<×Y+:u̲XGȮM梧jT׹鷎gRߟi@///zq{>˷3./7Ͼ͵7%???yj:OmϿjGSK<'ۛr^;|}ݝǟN)5h;^Ν͟\E}~~饥Kw\[}ߡ_SٲSL겛{*-K_\[]'?}|?ښȥx7UpSKFEONou_X}Z3;eS3ĭ''O>-O_׿Y|IϺ)}g&6Z~94Я ~p*2SX}аim= Gn`I91ۚ/zۙőR<{5u[2)}2oxxAq ooo.r˝V5Qt~ܞ#й2A>7kW^y>b^jrlΏU~sH*ZY9t5kƋ^߸*>NC6*V^+{p- x\zYQW(gRú(q̔ 0P畳~|yY>_y` lrGÔs J$OG5_II*4d!x !6ǹ*u.W`}R_JlYB񵒊-SX&WG/'Gl .ԇC6aoox|7$(T \>dd}жsh`# +f? @T.Xaz0_j^q8V bo g͐)5͟e+h!|xsOGZ;߷mk_pmw2mZ\oij&5:J&oMяhF'w-2%Qs3o4/OkD4]~ ZY:Wiu#{N[d]"c2Vm>zKAnrdtC4<FuG*m4)a˩92~BS5 Q6-; iؒj$Bn?N8G O>-h99( 0Azs[xO[5&ulmGw[>8qE)>Y(x`DuI(;Q%j{!۶1&f3U9ApxwSD$hl棵n.ݤ<քh`2D]b OvqD-Cz Ub 43qwj;(VL Aiad}~╤ e+% ́m"U8Pq]Bȳz@@OKGL@,їl& hϢ5i>A(up$P#‚=)ڔf(jrN}֤֩m5Fc~zM<\}-oNCT)/Z-A&H,̵Dۀ,>G~*~R~_ CPK."PK^:META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPK^:^2 ''mimetypePK^:5 Mcontent.xmlPK^: ; styles.xmlPK^:8>+ meta.xmlPK^:L#CThumbnails/thumbnail.pngPK^:'Configurations2/accelerator/current.xmlPK^:Configurations2/progressbar/PK^:PConfigurations2/floater/PK^:Configurations2/popupmenu/PK^:Configurations2/menubar/PK^:Configurations2/toolbar/PK^:*Configurations2/images/Bitmaps/PK^:gConfigurations2/statusbar/PK^:." settings.xmlPK^:`3fEaMETA-INF/manifest.xmlPKNjodreports-2.4.0/jodreports/src/test/resources/textinput-directives-special-chars-template.odt000077500000000000000000000213221152125033300331210ustar00rootroot00000000000000PKY:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKY: content.xmlW]k0}߯\(ۃ&ݠu 2c$'dI8#QN]űsǹW3>_T,E: H`ʧESvO^EYRDr,P]n2$es"TVDBfmt}m7݃lC/agnM_ZQR%/4JaU$4^ F"#s4`xzz j E(a9`85"a!%4UiO;A3zo/1ns+hf59v?./6vK*f@B# aB7;።#PT\TfqC`6qhF*ӧ@QF"tf("2Qi5^p o!sDm  v%l1ȕDQGVI.pi2o>Tblu! A(- dN8HoL b([6dI wug~ 0mi!BÅ-M }VvXX3i x+28R? N&~ S-\f6!-_|fFwef~VF>W[5(^, vGڬ~"ɏZ&oEh o!$2zys:t'%C{ni+ѻJ`?F ){Hl,o/PK{|w PKY: styles.xmlYے6 }WxihYޛf7o}jN|-QJԐڛ/Di;Nf2c8T8b̔yL"&ovɗϿU,y6̻5h"r7NtH4fzclY61zc]klچTetk*#brA RJ˺8|}L*cMf..uj=ǵU) 4giЩSjzPCNU?&gBhɹa{SL?ޛ"֭.*B_\PT_= Ux;yK){ ]."x*<"#.뱠.KA3i@+EwbT'RNoPe(izn-Tb )VB*otQs]&OhIsF U@lٽ[,Vtp(wGe!a̞8h#ڣh7(;Ir0 %Oa}43' $q˰!K'Z^'u{uzNZ뤵NZu,60 HS]2_ݫIŠ <͹P/s8w4!<.y`̍ڷ@OGx+C+&Wk'DH6yN@`@!-^xnm%#JԱ/nb|W>Kd 8l(ݳ J0í[{ۘ 6.Q wyIjz跸Ôhs.Db ^B%-pX YF@4Zi%[WPM!:b_Go6Z<74yzAMuoҫC}9ݨŅ7PK ;PKY:Fmeta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2005-05-03T14:23:39 2009-07-27T21:14:39 en-US 7 PT00H17M57S PKY:Thumbnails/thumbnail.pngVS~al*1O֣Q7APALBQQMj[AĘDA"D^1VD@AE~fޛy޼߼{Ds<EGE\[.ص)]o Ur(ޥhHq r [;<2}FG'{>M|wE#P)#fd:5L'O|O$_ݺmso ?*-hN1mVoξVߏ5Z| '=fu(cm;15:%߹aNxucܜ؈FOܲX݅F4㯬-g{^ n-M L\~uI@<$~~Ӳx$x-YX`=; 5k/0L)ͺ|z&s3w]]!AC/~x⇝NҘX9Id=jo]8vzePKVJzoYT+nh!nyܲa542 B69x"nYrj7]RWpo1Ļ/΄ W줟 뒊iJv\F+Sm!!hJM:=lNpIY+؅7C5=E%Wχ>VSĆ hE8Vl26D< D.: Gj:Eڸc_#%v/ 3u?/CW#q椧Wo/A^$-^yF~]r!*?1OaW p,.V!.ÊOXDt6t?L}N8ݽ7^bsPRDI. +ؘ[A6$\_ɂه ֕(JvyF߭ o=b99Ntxzq< cK3ltttl`w \*T$ HPe~Y?jnx;fZJ&geJC"eˣ%'HK&u40c) B$&:/d<_PrzB_ Hڱq`%/PKz7ӇPKY:'Configurations2/accelerator/current.xmlPKPKY:Configurations2/progressbar/PKY:Configurations2/floater/PKY:Configurations2/popupmenu/PKY:Configurations2/menubar/PKY:Configurations2/toolbar/PKY:Configurations2/images/Bitmaps/PKY:Configurations2/statusbar/PKY: settings.xmlZr8}߯H0@%L'&$s&<%$sߖM2Y.,XUKnioˈAȐBU8 dB_IC5~S- _g-_PV@V_1תwWSeٓ% uaT\-ŧO\LJRLW߶M顪Uq2cRee˺(fF~pMP{kWky Ҿ9[?֦]Peuk] o+j lZYWmmD; 5)s\9MnE8_x`3#l rCØs jJ$p& >!T,<"yXB !Vl*u.+}NT\^x2SȿXRv*[#:Iv+ţ8#Σ̶$@jOi͢Kzܪz/.m/YGZߔ]+\0}Ïoy X7`sM&hކr:HJ{l#sr VyB6ڏv<+*TPAz"E=dD }g 8Ȱ=cQj/Vh;Cn9\ulݨz zK_f+eU#ʉ*>] +IgP[ DsAZ:QiGA<GL*m)a˩I2~BS5 QV-; iؒj$CJo?8G O.=h9ك( 0Azsv[ݘxO[%&XO뎄xqLW} (]2Avʥ0PvxTfNѠ|LFHmcLfs# IazrF2'H0;DGk! *\Jy !d 8w]%g' Ovq@5-C: Ub 42qwjwP_<pq{@p͋)0S57fmprJEBlBչ@ba<%J`E?-Jq7PKAwf"PKY:META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPKY:^2 ''mimetypePKY:{|w Mcontent.xmlPKY: ; styles.xmlPKY:F meta.xmlPKY:z7ӇqThumbnails/thumbnail.pngPKY:'>Configurations2/accelerator/current.xmlPKY:Configurations2/progressbar/PKY:Configurations2/floater/PKY:Configurations2/popupmenu/PKY:=Configurations2/menubar/PKY:sConfigurations2/toolbar/PKY:Configurations2/images/Bitmaps/PKY:Configurations2/statusbar/PKY:Awf" settings.xmlPKY:`3fEaFMETA-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/textinput-directives-splitline-template.odt000077500000000000000000000204201152125033300324040ustar00rootroot00000000000000PKY:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKY: content.xmlW]o0}W z@š 9Nkp`;M'Nd[LϹkwgےG4bgqD9e]reNeQ0B\$D #` e\+JN.N IeEEJ;t ݚdptg 7S 酜JjT/+lح(xmL"4ͬ9IBNC$Zq ZggsaKj,k&K SUYMjDjro8G}nz&T9՗"U>_JB?.+=t(f^8eyh#@$tc44BGM8$kZ= N2a4HJ*)_PE89 %:_} N&iCb9TJ.*c>bh{qֽ>s5 BI MrJN-#,+p[t\1C`|7X1{Ӑ>&=>^J7p~s̍j ڀH0yn̸#ERAݨ2 2)PZC_K 'tlBvM=MXSk3Aʙ8Idm౤ k/chGwyRd+Ӭ<[>Z)N/˱⚃6w)*ξ"k83~R|oªDr.V XoO/|)$?DPA졑PK&>` PKY: styles.xmlYM6W -uC6hs@KņZ{;]i '@s<ݡ'4CɌչ,x{H>w?-ٺy[m3pVkI5VLM :Fm*7bMu۰#_قcBTgBMc|Ђl%ePOX>$1:M|5jfv״JXTL0Ll[1CClLn SKC =[UHiڰ*/UVԔ#kJ߃^ Go&Oӡc)eGtu~G↩ϩȻjhR@2 h|*He:" [ڥm8B;!E77.I,F'Zʊ&3Pz@T\\7>6;Ō&J{~@Oї}=t';k%fQE_mɚbL %lyXQ7mUuBÊ̞@:FT};-lM8Krp<77wƽU X^aGc'Z^&ˤu}n.eҺLZˤuazwwYg Ji=DE`pԤ^cw}68 :F "=4w%.m|*җA6^~v}z/.x%<'OpK,)dtrX͗wW=vd|W<d> 8L z=*va7#8d [؛&|p$=tS\kI4kB8W|,a' rX _ ր 1Í+>'? -tW(4l4xeL9nN§7PKyE-5PKY:-meta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2005-05-03T14:23:39 2009-07-27T21:15:32 en-US 10 PT00H21M48S PKY:Thumbnails/thumbnail.png3V%f-wdTZ4xhDͦjWY0!V!Q"<9I#^WBm`MGǭ,wV׾˩TˆB̐~b {pՐGWHpW;KQeznh;Ҩ#99rHWfnZdiC-;t!NZ(X4/ZJ׫aʕi\vbdPb L'bn;4{0K-Y,/ :A 4 0Mh7T>8E*%*Ip]uRGMŲ$j)mP][[+KgrI˯Nia±~xoK,PSbƷ lX4 GFsMr{ZEe,\̯\ ]0T}(2b0Ytҁi v-P?M=,NAǼ|MU24T:f Gs {Nk828zݲgi=(퉰S$aBӬs8>eH-8Ӟmj܏t$%Ȱ#^t&2K{xܱ﬍;G,s<۰'8Hi"JL#PCK8&^Ǔy8#1`b P-S_<􉐪"'hM6Y];IiYFƜ/gpvl{U7E̘TYٲ߅\S.Զ~vQ}\ "훋cmMUV!,߼V?~[]QW(gBͺ.~qL 0P󽂯>ʕC87l]&7K1p@hpNBMNdu:k`iq.o;J%BlCy0J+3*urVpB!bI^کT` ,uӄ9(j7\Eudm]*IwX_[DO AZ9QiGA<<AD'v֭-v}R^-{niư<-+׃~CByи{4\6> CKۈ9G*m)a˩I2~BS5 wQֆ-; iؒj$@Jo?8G Oh9ه( 0Azsv[x>O["LxqL (=avaDuI(;Q!vs#۶1&f3U9$0=92'H0DGk! *\Ny !d 8w]%g'ZkGD [uTi8c}=.Ԝ[=|01xv:d9n3AlV(w:)[doa@-!J LӔT @C ɏy"?'.}XF(6D8aSMJLP loj,C c ,h4⟷҄} Q7ZlSHT POJ2uu0hJR@粕zI@!*u(T6a uՀJ=zy# &  #I 35sMo@wJA. Ԉ`p6`359a>S6 S1Cyqs?=:f&x޾ƌ7Q?NCT)Z-@:H,̵Nm@ @_#ϩߢ?B?pPKssN"PKY:META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPKY:^2 ''mimetypePKY:&>` Mcontent.xmlPKY:yE-5 styles.xmlPKY:-) meta.xmlPKY::XfThumbnails/thumbnail.pngPKY:'}Configurations2/accelerator/current.xmlPKY:Configurations2/progressbar/PKY:Configurations2/floater/PKY:DConfigurations2/popupmenu/PKY:|Configurations2/menubar/PKY:Configurations2/toolbar/PKY:Configurations2/images/Bitmaps/PKY:%Configurations2/statusbar/PKY:ssN" ]settings.xmlPKY:`3fEaMETA-INF/manifest.xmlPK jodreports-2.4.0/jodreports/src/test/resources/textinput-directives-switch-template.odt000077500000000000000000000213441152125033300317100ustar00rootroot00000000000000PK0Z:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK0Z: content.xmlW]o0}߯Rio6̀T&2iRc;ձ3!^B}ν^0ؔ,Yt88M‘/,}X$\gHpmasiZK 9,5EE#J?tٚlt_qfX¦/b1}ŲB jHņQ~?MWZW9M @%7j #@`-}Yl,@ TU;b_1_1%ԫk3>v ˾,v*$i{A% NO?FRMdG2sDFֶMC[#Tat+ ZepFҐ+ $i5 YpCT!D+r:m O6!3 \*c14tˍ.Q:>s"aM)nL9\ [asZl%eĎ\Q]CI홟B;i&&GX %lIq;( tюZ0ʼn \^8R=Lb!6 ɘ٠lBi7j {TvE1_rotWn*OqgxcN %N[0;uNw;-ݞV?nAEFCkbnU}5_HڜG7hވwmlٽ[,Vtp(wGe!a̞8h#ڣh7(;Ir0 %Oa}43' $q˰!K'Z^'u{uzNZ뤵NZu,60 HS]2_ݫIŠ <͹P/s8w4!<.y`̍ڷ@OGx+C+&Wk'DH6yN@`@!-^xnm%#JԱ/nb|W>Kd 8l(ݳ J0í[{ۘ 6.Q wyIjz跸Ôhs.Db ^B%-pX YF@4Zi%[WPM!:b_Go6Z<74yzAMuoҫC}9ݨŅ7PK ;PK0Z:$#!ymeta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2005-05-03T14:23:39 2009-07-27T21:16:52 en-US 12 PT00H58M32S PK0Z:Thumbnails/thumbnail.pngViSDYQ $ EhT((E/фEHb"Xޢ(*HdRT"B^1^b67!7_~3ss,3<N8Scc f &Lf`0ߧ~>|.rbT`uԬmǻુG烋[-roiqoxOd[O4؅]cG!]:O=$uUX@aܿ'<)ir)#FM {:@,6R&5|"UJVzZ-T.H3b0W[Jޘn,4dr7:C&Agϳd,sT2a)NLGfbK2r\#Njb2gc [Do!Q)"j8QvJZcjν_QW߶CY-F$t;/VCdL/l@j]mɾc}E\3莌,\CBjQ{{3 *L)2<3eED㚚WB@w ч>[n ,eSv*-#9[ꬵ @tPC/H/z~;PNӨh)b[E鶨mO@j|%zS,bIE\-{|9ӕ}N#/4j~5]ˡM۾HxmC]dV*\mH]z]שx0Q~lc[jQ4FĝL@%X9+^-qɌ>ˆg!@C$Ar'e$/kk|S1̍}{bShj&Zί<$R>~=מ.q;f:}f>^- yjzJ55UY++u7)Gz;琿~iPל.-t9!QyTq`BT['` _ScٮS C`n]9BK;d*oI1}Ezֿ|sU2&m^_I騀/3Tt{ރ@/(VIX(5 ]ޯBظSvT ęBDhR .nj۳fh} z+ GF,KVހ:-?Xn$,+lds Hu)VH ô?8l{ UWӁ^V.-flmYӏ;Bf~Yjh(y!O.<ٵזw %W.hp=.ߩ[=01xv:d9nsAlN(w:-;d a@!J\ zLSSq80$?vgN~ AO\ VcPlNq&*1Ay$<`.|Sc2#E0^eAKפ&&[fhzbBbzRWې;@W>3N:.7jTlC%ǡZt Km T=.aa0hD_:4ܢ>>S3t ‘p@ hSn ;YYN֘>L@p͋940sv0fzn8 9FSk!\ 0bo:8-Jݿ)GoPKdNY"PK0Z:META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPK0Z:^2 ''mimetypePK0Z:Z9/ Mcontent.xmlPK0Z: ; styles.xmlPK0Z:$#!y meta.xmlPK0Z:o1ɘpThumbnails/thumbnail.pngPK0Z:'NConfigurations2/accelerator/current.xmlPK0Z:Configurations2/progressbar/PK0Z:Configurations2/floater/PK0Z:Configurations2/popupmenu/PK0Z:MConfigurations2/menubar/PK0Z:Configurations2/toolbar/PK0Z:Configurations2/images/Bitmaps/PK0Z:Configurations2/statusbar/PK0Z:dNY" .settings.xmlPK0Z:`3fEaXMETA-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/textinput-variable-template.odt000077500000000000000000000171571152125033300300440ustar00rootroot00000000000000PK}Z:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK}Z: content.xmlV]o0}Wxsv m^i WvZci:!;Hd[H}iesǹvWg; bggyF*q\W嫥*iA$nj*,RX90EFB"L!PMMaq!VG!V1OpmN%{쀋#pM4j=։ڧWr*yo8SVȲY9WZU@ض=IK)ap<SlؚZ45?$zMdiEjvیHHOLo9skd#=7~n멱lٽ[,Vtp(wGe!a̞8h#ڣh7(;Ir0 %Oa}43' $q˰!K'Z^'u{uzNZ뤵NZu,60 HS]2_ݫIŠ <͹P/s8w4!<.y`̍ڷ@OGx+C+&Wk'DH6yN@`@!-^xnm%#JԱ/nb|W>Kd 8l(ݳ J0í[{ۘ 6.Q wyIjz跸Ôhs.Db ^B%-pX YF@4Zi%[WPM!:b_Go6Z<74yzAMuoҫC}9ݨŅ7PK ;PK}Z:c~meta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2005-05-03T14:23:39 2009-07-27T21:19:58 en-US 7 PT00H21M38S PK}Z:Thumbnails/thumbnail.png sb``p [8؀X=]C*漽1K4ᡰcKGSdho|M sݲ麓ԩ*bNZ jBO`+cÇߵwfZy7x;W3/RscLd"߾'M- w:-u~6g2]QDTիܒ}S~|vvv{{ |]ߜ~?ՏnoW+e_G"lgϵ[UjS:ͅ??=wV,JS,''gVzLﯫS=/fwYn4cNc=[(/+|t6Fv5? +֯]{ܾM޾mfc9*e#'/}ѣV?S!/o?[/_~X\ =[~񽙈$_pNW-~Y KOW?uN MPK%V2PK}Z:'Configurations2/accelerator/current.xmlPKPK}Z:Configurations2/progressbar/PK}Z:Configurations2/floater/PK}Z:Configurations2/popupmenu/PK}Z:Configurations2/menubar/PK}Z:Configurations2/toolbar/PK}Z:Configurations2/images/Bitmaps/PK}Z:Configurations2/statusbar/PK}Z: settings.xmlZ[WH~_uCdف 6$dttw:EecMwWW=Y!gOVσ.K{NCj:n':lVDHm_]KeOV4dϗRq\^.?q1+Urs6 gǪvU9U_ȌIU,뼜]:5R}i Ҿ9<֦]Pemk}!>Kqr6+խ{NjmT; 5+Y17ͮXo|A9Μ )V+@>-|)pHPyӈħ! `{gO, >`TDs?s˗rgm '/TlᥝJֈ>$1QEfۜ !@j5Oiݢ.Jzª_\+.~f崾%{@W0}÷rhyX7`sVet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPK}Z:^2 ''mimetypePK}Z:3  Mcontent.xmlPK}Z: ; styles.xmlPK}Z:c~ meta.xmlPK}Z:%V2cThumbnails/thumbnail.pngPK}Z:'Configurations2/accelerator/current.xmlPK}Z:2Configurations2/progressbar/PK}Z:lConfigurations2/floater/PK}Z:Configurations2/popupmenu/PK}Z:Configurations2/menubar/PK}Z:Configurations2/toolbar/PK}Z:FConfigurations2/images/Bitmaps/PK}Z:Configurations2/statusbar/PK}Z:p" settings.xmlPK}Z:`3fEaMETA-INF/manifest.xmlPKkjodreports-2.4.0/jodreports/src/test/resources/visual-fields-template.odt000066400000000000000000000164421152125033300267550ustar00rootroot00000000000000PK4^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK4Configurations2/statusbar/PK4'Configurations2/accelerator/current.xmlPKPK4Configurations2/floater/PK4Configurations2/popupmenu/PK4Configurations2/progressbar/PK4Configurations2/menubar/PK4Configurations2/toolbar/PK4Configurations2/images/Bitmaps/PK4 content.xmlW WX>u**UTUw[J0Nh1;潙1 dpyJ3)a< *L.o/wf!9&"R.t˰T"X3SȂs3dlCf*x3=Tj*Ƃ>=SͣLy ; w BUUͪT[#k&( iLxSWcDo, 6]oG!;&׆.wͱٍ;X?jASc؞TDb2K)Tk;6[z^)fU8t|H4e~-!̑3w`~z&;]GLhELztumI7A2LhR5X;%pz/o$3~<3)!Ί. /JR񀗓uE|UUX { ߟdOTPŠU(!p^ =dPCkl+O k)DŽ0DGmh~eZ=5d' W'@g=4Pj%B6XŮ5Dk "*M~Dv ᭤WNGek va-]&{{SdpA04(@jQ.Sښsgl.YAK`R , <}hn;kvyhB]TWӣ{tb15]Qꂚ\IcUDQ&.6{e;6NU3S\9rކ4"ds܍]wA?PK5%NFH PK4 styles.xmlZK6W.m˻InE&nk@Kń"#CR(Y 'g}hKߍl<"< 囻/^܊dH#j\-n\HXQ8#j Bː{imle5†!W-[P:x7TBPC*W EcM[^_Ʃr:vD4Z,SK+r%0bi47#."[984X㣬f0")aJ* e3ӞLƂ̆2PŒ惷Cy!DpjݝfS;ޝdI 1fqqu )p 50[_|Z Pk)n*6?h,J2-bĠE)G󫤸˄[?/_4 suhT}{#2;s~iF ?N$TR_͑SC1l1l th#o^RO4;-F&} xE& |2ݑwǩp"<فio-*w#HlBָ`l m$S.Qk(ЗtsJ/UC` ƳU .w-" %H8Bү $ָBCgQ"7A1Se}r,R#G22Z; X1SXWV`PhO1DŽ/ 3 bN/3mZ?0AEJ8Zą4V/aFp)܎湶k M7D]E|-#K*xzh>>3#XgE4ƪhbpG ' zu7j#<օS2L@y,zBUrc$_Fu4њCX H 0̃y}?Zz΢jBTdr;yd͏B-'ׁ'6jpWɕSО y\@R:܀V)~!$GZlN͔ͭ0B(,qooieX)p1q,O+4ik qؐ>a M gfFZ H_'AzʦiO!CWP+ٙۙ>!'Fy]>16Z`# q-==fT>"]pn38-7Z {sKCFfI֌*0õc[yjpʆ^yd|Vٌ?cG%ktFЪ8G- ?4-#)vΣp$֬ʼnCxS *EvIZgdKX9S9D((-2d^`1_Ki|5PlrusN/ɫKp|y N''o.%8W/[ Ņ& 4BgQE@崴B]Y=0o1+T(j>g2&su'}>n &4]z@8o/ERI FֺQ6>JX}dzi*R=nnny݊uǰMlp{MjW'v[`j$$]2BUq2sj-x-ҥkC$ڍyIicťHu&覶Klhuെws˾Ä[P>/)3o ѕ0)!h\Y̮!0;p!aU Y'_]nEDPKGv$PK4g:Ometa.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680m7$Build-9044 Mirko Nasato 2006-07-20T18:19:54 Mirko Nasato 2006-07-20T18:32:01 en-GB 6 PT12M8S PK4Thumbnails/thumbnail.png sb``p ҅@ HZ4G100tq !a2?-ܱǜe,Q5kF% FLűuE}}?,=!GreWfdv0t82 쒳c`1xsJhPKPK4 settings.xmlYMs8WPLM)CY&LLj&.Ie*Hl~^KD(+W`{w߼ͳ[Ny$i1BKny dd \?x;eW˗;onLܨլvqssSKﮇ(|v(T6-"ndRzUIM:trd?Un bکݑ>{a?dٖ0t}NYUQ$v^s|`-&/6Lw[Q3/VNsmok;-7v>6PKEPK4META-INF/manifest.xmlKj0@=VU1q-&fW6X; F#h[S0Oͣ)k7vc^aaӠHѵHS"Z^%ۯɴ|.Ax.25| h;7GWsh,.dLB%Mync Y'@,`(Uq:bbqW`<0RO G?Fr7=^ ޛbpmaD-*긓_PrS4I7ZOHNzbK|0Hc-2xd7!ɧa87|"sϩ]PK5b9>JPK4^2 ''mimetypePK4MConfigurations2/statusbar/PK4'Configurations2/accelerator/current.xmlPK4Configurations2/floater/PK4Configurations2/popupmenu/PK4JConfigurations2/progressbar/PK4Configurations2/menubar/PK4Configurations2/toolbar/PK4Configurations2/images/Bitmaps/PK45%NFH -content.xmlPK4Gv$ styles.xmlPK4g:O meta.xmlPK4Thumbnails/thumbnail.pngPK4E settings.xmlPK45b9>JMETA-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/visual-repeat-table-row-template-2.odt000066400000000000000000000176011152125033300310160ustar00rootroot00000000000000PK85^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK85Configurations2/statusbar/PK85'Configurations2/accelerator/current.xmlPKPK85Configurations2/floater/PK85Configurations2/popupmenu/PK85Configurations2/progressbar/PK85Configurations2/menubar/PK85Configurations2/toolbar/PK85Configurations2/images/Bitmaps/PK85 content.xmlXQo6~ϯT dZN"Y1`CHZ hE$e~GR%[v8ٺ#})eޒHEa{G"<~ ggWb>"Su sN;s+Du4ոD5lnukMtWcmY-nKjlպ\t5~R, zaMX<1 1BժLP8V YT!ˆL3:%3";kUL:W2heڰfzqmbONޣ;Pdu,m*4*o%N$Bi_Z,_uLՌ\bfЊi)8c_m.<yVm}o&⵵- [Ǿjp(~fGt81S6FeЙcIFΝ*=z٪(*cx\Ý@5- DNb;cX ^ uLJ͹hWu<}t2h_4Q>cEd;%ˍ}-YJn9 ps,'^gz0*\8Yk,Yw#w%,ğI崐d|oh2O75:8mj*ta `.ec 碄l`uɵnh{ s!2,L-F1h./8j ˞+pI~s ︈D-x2i/=] &lM~ F|cZ#TC%[Ȓ2&W1@[Bɓ@aD4JGR=ˆU!} zarM (;iʩKZ'x¤Si~ eڬ 0x &HėU\$ 6Y9ʃi#v=3ǝ0ļڕht6 <*eal Mb1('awiL.#{F&pk[d-íq2T7!Sj~)ǧH&6q%ח%|u 7rq %mU(! PĚo eFTy-]z>Ӵ@|ՠI.57s}$"hpL$}y7`tGJezx*#_lm*h C$1ENi{8FgQZݵ OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-9073 Mirko Nasato 2006-07-20T18:40:33 Mirko Nasato 2006-12-01T19:57:48 en-GB 9 PT20M28S PK85Thumbnails/thumbnail.png sb``p ҅@ HZ4G100ix8Ty{cG"ztHZqPCЁ?ֈZn9}{Į>?}VCB!e1ſn@u-x|3,rmE?֕ط?.;iXYOG#!9[3?Od`_//}I^g6ŭxΘ#5_t1YtK5wE8 C3?~usGNv}S0b!s&gw@&F%p>NW.4L \p?ok>HţVِ^D7ܙ65-ݯr'~d0 ^g {悗ōv (W+q9'ǶwK{uPKnvPK85META-INF/manifest.xmlKj0@=VU1q-&fW6X; F#h[S0Oͣ)k7vc^aaӠHѵHS"Z^%ۯɴ|.Ax.25| h;7GWsh,.dLB%Mync Y'@,`(Uq:bbqW`<0RO G?Fr7=^ ޛbpmaD-*긓_PrS4I7ZOHNzbK|0Hc-2xd7!ɧa87|"sϩ]PK5b9>JPK85^2 ''mimetypePK85MConfigurations2/statusbar/PK85'Configurations2/accelerator/current.xmlPK85Configurations2/floater/PK85Configurations2/popupmenu/PK85JConfigurations2/progressbar/PK85Configurations2/menubar/PK85Configurations2/toolbar/PK85Configurations2/images/Bitmaps/PK85Ąt -content.xmlPK85N8& Qstyles.xmlPK85өmeta.xmlPK85 ]6aThumbnails/thumbnail.pngPK85nv settings.xmlPK855b9>JMETA-INF/manifest.xmlPK}jodreports-2.4.0/jodreports/src/test/resources/visual-repeat-table-row-template.odt000077500000000000000000000176351152125033300306710ustar00rootroot00000000000000PK3 <^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK3 < content.xmlXmo6 _a>lp8^5kw8`Cn0ŖmIr^(v'iL>)2 I8N0yBt9?/nyf*9Sk&V; I" eXU<9fE/+jE[kR5 [4iـ]DE[c)ok4H9D=ˑ"[,GL|Ţw`mM8qy!A%q)d aX+ CɪO[W|xD0'mԬ!'7#(úD֗n*$oMv95Um`uB A<>l_ .Ӻu dAZu I<><35I:2B'qW9L يj/Ij7B /wPP\֕F0ʺ&Y ՙ 2 l|X)-S*a-Hc)q=سϚȿQ߃]2BW<(w Rn rbx!KO/{=iC9?:+8Li%D`Xߖ#aaP+6Ul)Gz'q`֩K|np}Kj%Qs++p°P n םA0߳DZĔ ǘtrImQ]f$&h`  OzT:뛛CTөOqcJa{vH鄋TM0OrJk\ g+ptm@7ǫQm _;A4Tj *k'_ן,1r+Z,dXE8ĚzxYvv66R1ɪ~[\=3PS<µ:ETkeC#Md<ȘZ ֽrWQBdN*C1DVm3Tp =W}Uً| il +۩ŞaZvF4\ _l{qjrQF5:v 4Bv0YǑc-)C/[[9es<ٔc r֧M 4|ddV>/DRoOq}%Ryک4_^.Լ~{_;46JhD*3.ַѧ^Պlɴ*0D]^8mT)Ts`za҅,B{aMle 7cwO.[̡tv0OC+|s$EI ?@qsm1\vnϦR&p-W,ghL4=o yCH*Lv 5U}wפFeY6>gY([Pu\PX[ȻTr6w(/l+P w>w=ʾU0GSe4Kb s+XR*YoPyc%[ p@P 5X 1&u ;rv?vu6$ںlzƔTh[6rHRfSb?2Jr @C q:|C 42/ڒ#'ޑԤBe>?oxf?'eg<̗aF)VP.>қ''gaRR*t"軐9-5S %ac$FukРP!UY4X>x9AuK(ai9&!y$,4nT*f2굥4o D,JOً2&'vdh;}=m=^[}`B*:ޟ5d$ͨzG_8U_H5La؄!Y2@,eLM*uoXscz^sT]}c KGo{F!3hش{}@u{:Rl׿#v~Pw}B?tx@չ8k(cRiW;xx8}ߜ뜓Y8xN>xo#n:p7ị3F[}qG9u?0ځfw݄DAuBa7^=tK.JxNx3gcCps Һ!g+SӸH l-sXpw[Y$Qj)[\OWgj zO&k+DCZ[*sМܥ)AlIOG./IA-^1fЬ꜋`]%_dV2\0\yh3.9ܺ2m/~l_׃W3/ jkS?pbWQ ՍZ> J@}^oPKE 1dY/&PK3 OpenOffice.org/3.1$Unix OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2006-07-20T18:40:33 2010-06-02T11:25:38 en-GB 12 PT00H30M57S PK3 <Thumbnails/thumbnail.png sb``p [8؀=]C*漽q!Wkpf$O9m9Uˆjt|;?e߾'M-_y1K&prVm2zœJ~·u 0Vc{WaBukS@?f;;z#|x;u&=k2?O o_|'Nc I:mTpTZ+wk<]\9%4PK\PK3 <'Configurations2/accelerator/current.xmlPKPK3 <Configurations2/progressbar/PK3 <Configurations2/floater/PK3 <Configurations2/popupmenu/PK3 <Configurations2/menubar/PK3 <Configurations2/toolbar/PK3 <Configurations2/images/Bitmaps/PK3 <Configurations2/statusbar/PK3 < settings.xmlYs8 ~w ݝi t.- ܾDNÅ!%YIrnqJswA0r~̌/<6/)' |fs9.GSAw)&Q ; 1CgLָa'CP\o6/ʇ`5W=fYVSՃʼnN F'1U9 ζ*s!3E%rUI V]XdP\^D➢%L#z]T/L1C!QTOa2mЅqlF,('hp4d^*?v #Rb<m>ui̾r ^"ڛLL2CwݷMQ&0}$5kOǕ64DY<ȧ,k?xTTG9nL>()DŽ $)eH:$oSY&( \HE2&uGX>au 1{T<]G-$L̓) 2q_XZVC)8N<\3J,Qz;SE$OCNQZ_-U=v}8g t3(%bwv“E"Ԝa&#sI76Qߩ) ǭ#\$;`iw9dcPSb\tdY tM9PKɅQPK3 <META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPK3 <^2 ''mimetypePK3 <1S: Mcontent.xmlPK3 Q"<ޅl*b:Ăk [gA!y$*(#*895+j#(efk-E͎%*-dMOD_ba"LֳiD#,XkGe9,/Bp|uu\^HP1Lp klF4bےxѳSUwElk${׆w"q!>p&pagqeTaIޯmj A < /%D(#l_ n "$Ds X]].dh/CʕFfiA:?)W&0&)cS=YVR`Jdm}"4F q5egʅZKN$5eJTSMlܣ/XZ5 P.ԤUm&ىZ)<.dA9^="` - 8t:ֽFen5i\ObƘi1e:ܨ)3 ;W0wVS3 EwL6 ̨tfJKJ*ԉvg{+o<KLx(>JC`icd+!n O ܇On/ !TOLgF-:\sTzWhma Քh8U 펚: nc^YD b|47U|zSPKL- PK瞁5 styles.xmlZK6W*m˻In>Ц@rJk@Kń"#CR(YjiǙ!o9TT(Σ H)E>n7_ M*IGFZ9]TJXQ8'j(FP{er#XsZkrcnlCTXc A 7bA1(y580ʿEj6T,^.3+'^QJfdF1Yv. U"i1zN;BP;b>߁^RMdUO0Kꈋ/h@i4RH+o~1Yj# CmpBPJ@2u%.UR̢ +^weBS0WqF:•ϋ N$=UQP wldSN>~…P:n<$" g݁kxu~sF:ѽe"#iJ$".`sZ/d$Պ't  EOR8LO/水Z@X'L 6U0̓]ɾ 5jQ5 K*IrL92 gD(UQy97#!=%j-g Å2}H} ůH-љ6B88>)i42s8N]~ϋHi5P<8+ vԏ86&XBA™ь֦/@Ԋ|Kp,*I+^/ίf990Jy2>IM>9Ƀ=i+>0wPngv]0Y%,FG;{늕ƌ 65eLn̼xx+U`Z^M@. @{lSN!Jn8~3Ȏ;f6Ne{ھtPwSxAtp}C0rq .%|y _]ȟ/%\^xH; M6Rګ"ow:޺GfW zC 3Kh㊴y1眪Ix:c f0ip4hc{QZ.wUNX0ѕ 1~4Pn~ijQ)mъQh;&^'4yvD9>ԫ1q)Ot43#oN<{tFK} 7. xcpfQeogý6SG-6n z|ᡧhU*g5n}] W0u,:S㝿x/PK;D"PK瞁5֬meta.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680m5$Build-9073 Mirko Nasato 2006-07-20T18:34:31 Mirko Nasato 2006-12-01T19:55:14 en-GB 6 PT15M41S PK瞁5Thumbnails/thumbnail.png sb``p ҅@ HZ4G100)x8Ty{UoDCŃ_䦊8nb:8`܂Ifk&*q6ijjDm}/?_w= I JlhBܵ_}~?VL?z޿u;vyg_{7s*+%9 .>xVO-(//_oٳo}?w̱so?AfQ:EFI&OW?uN MPK|h YPK瞁5 settings.xmlYMs8WPǦ6T”!,&P@&{vj$۲ N$Oj~%}[FJsyݫ 0rv=;?oͳ;Ny$i1BKn{ dd \?x?eW{onLܨլvq{{[Kﮇ(|v(T6="ndRzUI~M:trd?Un =mqXlRg}s_cULw4^~Wۍp\L/<4}.o.(/_\\]0b!s&g@&F%p:NW.4L \p7o9 Qla/n\E?0z;ұ j|h'c:`TTeAosTecCwX`P~Q/G 0v]8M *lu\0RC7|(.$c]Sl̈/VO bکݑ>{a?dٖ0t}NYUQ$v^s|`-&/6Lw[Q3VNsOmj;-7v>6PKKFPK瞁5META-INF/manifest.xmlKj0@=VU1q-&fW6X; F#h[S0Oͣ)k7vc^aaӠHѵHS"Z^%ۯɴ|.Ax.25| h;7GWsh,.dLB%Mync Y'@,`(Uq:bbqW`<0RO G?Fr7=^ ޛbpmaD-*긓_PrS4I7ZOHNzbK|0Hc-2xd7!ɧa87|"sϩ]PK5b9>JPK瞁5^2 ''mimetypePK瞁5MConfigurations2/statusbar/PK瞁5'Configurations2/accelerator/current.xmlPK瞁5Configurations2/floater/PK瞁5Configurations2/popupmenu/PK瞁5JConfigurations2/progressbar/PK瞁5Configurations2/menubar/PK瞁5Configurations2/toolbar/PK瞁5Configurations2/images/Bitmaps/PK瞁5L- -content.xmlPK瞁5;D" styles.xmlPK瞁5֬j meta.xmlPK瞁5|h Y:Thumbnails/thumbnail.pngPK瞁5KF settings.xmlPK瞁55b9>JMETA-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/visual-script-setting-template.odt000077500000000000000000000170741152125033300304730ustar00rootroot00000000000000PKQ:^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKQ:Configurations2/statusbar/PKQ:'Configurations2/accelerator/current.xmlPKPKQ:Configurations2/floater/PKQ:Configurations2/popupmenu/PKQ:Configurations2/progressbar/PKQ:Configurations2/menubar/PKQ:Configurations2/toolbar/PKQ:Configurations2/images/Bitmaps/PKQ: content.xmlVo0~_eho-[;&$:Bsؙ;gI]t*^ܝ/ZyM3I ) -t꽣R"X3 \PʒmV3݁CKӕl[\=LEWBQCz.'%6KįQ<3LZ,iO)#mWV;TF&h[PP:z><iKi γ=ͺ4 6[p?7YPE\U*X5=:K);_#{ UISqY* 1mBȻZC-̞'LhŦ26M EKLS„n ,Y4=!D+DrLF:?]T1Kv.)4%tSiófa<~4j 9|1dp='1G<`׀UmG7aXsq\]!ju!z)P>w`Zo!Jf,9.,r_ӟKM̧Np)EVMAembv\ 띑 fAf^5UŽpHa}k!Y 8MERȌnH.>VpAk4=5FΔ1]rJde@b8kJb؝~ߵ\3۫VzkbVY\ p[,Z29 OnluXSc k/??l?! PKQ: styles.xmlZ[o6~߯0Tlo,'bI h{-hJ@RRhKr܇}<7yzg-.`ŠX$?In?52qBS.JKAW˂L-u%+^Sv(+n}iz0xˆٗN$ݍF^/c*#kAbT_Trn bj8nJf+C14h7gŇ>WLv մU݌Έf5qJ0JƇ*esӁ܆h{G%/GorB* 5puh=YI=>,n<.>_a[LS-qӃoBJ!ud=Aw捕dM3FAAcb%("ԍkuҵ.1# 3uV@<߈.UrHtǐo'TBE=*ZCz>/a¯v\# dKA!javDK~xyHYLκxNj8=sC[QLؚVY= 85eߤPCRs(\&bG@b*= QC'p1JÁKR!WN3dߞe" >VkGg :%vYLy.C, @˷KN?wӄ, 88wJ',|sOWEu!%2Z*L&RNI}a$ZlN%aߠP I0X.xU AuO+(ai9&>y$,4OS <d][ Jg4RIJ}gs;_sRfR(̤@=zi:m3?^G6(1:oxJ@+Cs=Gw;-M~âmH,lSm( ˙}1jC1{=63d20 1l+=wzFzmft{ cύ΁|ZuӢq?0fl˲݂Rӻkx=uKqJ^QzygϐBq]_( Bq|n/BqE1G[/Śo*i.@q->Q}w-*DU/:AEJ6A—$X>#hJZ/dlk\{Tl/x<& D oe=L'#xgӅ݉#oR|nXL_cm\B` s4<0),:4uk3t/5bSg1΢ֈ9bsÏ<,k cJinv]B0ؾ*3/6G[*jSk5!XQ^ʟ`?PK-up!PKQ:rmeta.xml OpenOffice.org/3.1$Win32 OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2006-07-20T18:34:31 Teddy Liang 2009-07-04T20:15:03.72 en-GB 7 PT00H16M17S PKQ:Thumbnails/thumbnail.png sb``p [8؀?x8Ty{}J$C!yDf̸p$C&fOVaW^a7ɚexB׽D}lprl \|V4\~I,YEϝ{qnǎ;|cv[n]߿#bccܽ5߾7ܻR_O֭[#>}Zojμyz>r22gbbdҮ߻{׷0nΜ9<߿|ٜjYyӧOϏ>|0^~ys}kiWUE}3-~׮]{T3{[˦O_|ϼ}oGȾmhggwko;x_4nOxo|]7w*lTpTd aw fOW?uN MPKF%)PKQ: settings.xmlYs8~"w $$t )= \߄YdȤ{'[_[*4Gy?Ԃ \qW-N4~}uuC)=grzGQAӨ Nѕ-K C)h񕄥.cXAPYq;j(sO(WON[P%Wɶj>Pz8e״:,*[{gn1^4?1Iͳ9֘6,\⢴zޏKEa EN0RzUPK<2 abcFEAQՂjc*Ж4o.p#r@7 7(fHRA{PU42P;O>So@!ܦzL&;`]PV03'n#53^CAL<u(`r)LDpW‡RqÉC(^l]A8meE-G^GbA3߱g+|W-Ph6VW&7WCh]@j |a(LR WjN?ixM(#m_-UvGۙRtL6-0f*ÚJXQLLt\R)WlٟR qKmzx!8:KgcPcX:R "xdb_ @Yt}~~?Çfd7yah>(KhN'/:%KW^%Nm&#,Υ;o6|e_?21R~Z ^ay'X9˔c[z|6l},s׳.Efm:-J\̠ŢLa& oe9BOA7ZX`6g;ާjGPKTPKQ:META-INF/manifest.xmlKn @9fUYq"ROృO%/m,xoɘ:HڷL0P )ozH.;R` O}*8<'7^RF*~nz 7Pj2`Qǃm'T Jzbt2c-l]! -content.xmlPKQ:-up! styles.xmlPKQ:r meta.xmlPKQ:F%)`Thumbnails/thumbnail.pngPKQ:T |settings.xmlPKQ:eHDaMETA-INF/manifest.xmlPK8jodreports-2.4.0/jodreports/src/test/resources/visual-script-special-chars-output-template.odt000077500000000000000000000163371152125033300330730ustar00rootroot00000000000000PKA <^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKA < content.xmlVQo0~߯2ěi k' isvVnR]P˺}ݗWR$ Wrgi$U9qH''W(8eYh]2iUoli"LLUL,Fg>W-[ھd⒧=8f4} EK^ U/+b_*tnma4͠9(=K콝`Z )fdCbKfI_}KutKu,f'b1S:'lxv{=cnI|OO.8,o.*ռRTG9B7N)*w pC nLw0{#{C9+_#.%rS횰Mb*mW„n,yA449GdbG9&3юu'r-+#:Jo TUcN/E2;C_ TPΨ0p;sq^s"v (Xv||[SC'Us͘^}þ::&2"L02h*wWtv(f&vm'U9E>N4O*_uM?/ C  Ϊ93|&Qrֺ! Z1񦜛JR CVpl;(;?{hw\ 7囹jU&@>ω#5˒̒S9 ޖN"%d4Kv}VUCH4a֬=PK- PKA < styles.xmlZI6W -˳y]HC^Z,&)>D[I @|ǷovE>!)gA4bP~>~-7?iJcLx\)$>'rL.-![r,\2\T񒗄9Ͻ4Q6V0ҊXa{ W-f_:x;VXO}ż(G(v9e_LrvrPqWV"7\Ihc2Qx X|ׇĪbEh`;Qج\gX |ޫd|x_*"|D߻m.b-{Xr6-/9oj[|6ǽ=ɾT'cǍy4B@dq A7 %oPyc%Iqc8h@Z5B-*ԍkuҔCMqLPB\>,O"(΃ $c(hwiUL,1QzN1֧¡e5 #BJyQRCl0Bў;&5.p]8 i/)^I~_(3ރ!z8ʄi!.3F@ɥp·K!MhQ]N#H8ce\Я[F{xGivTe3)Υ l|{ʒ4?•M8/3 +A0 RAn<\ :H8# Gs^J1ðvJp5cs#IE$W@Ker^af!S_vn̜tZ&,&GO9 hl] .;1%88,l_fq qlA#sX*p d8$aߐ% J(TFfM[yY7zxFxq;8R_TZˏC%IO8)0eH. R\?)mmŅtEw!%r\J/5BH_됮s}6SC$X$`XJJW>xwPeAм~>s=x ɌʫV\)};Mg+'Z?_'^Wz^n<>C/it{{sfMVii[q:3M^'(ctT񜐞XU>͉oԝlC'桗kyh^; es293쩹9x.5-c psҶb#<qgfFow0;Շ1+eo7c)cN6$-xQjwU zk6^e_zV^T#w  k~.eºLX 2a-.eŠf;CqE$*,J{!L9WwTtpJD%Tg|Q?Vh} K~NHnPMo>ZZ7$U5 ۡbl :i%k7Cx" zfWCD඘o2BיG4=x`:dm6ps4UAwN[]]vX?EX-ɂ94kxlQߘ jIJκF]ZqVa '+lʸ=}i2sf_+˼?BbWQ Z5|1{‘)PKM!PKA <meta.xml OpenOffice.org/3.1$Unix OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2006-07-20T18:34:31 2010-06-02T11:26:03 en-GB 10 PT00H18M37S PKA <Thumbnails/thumbnail.png sb``p [8؀{8Ty{ݐ밁Aڅ̳vO_r^"5+O:fNV*r[qRdgڭ׶K3v%'8^pi>׈`9*8*HE埤iZL ~.PK=PKA <'Configurations2/accelerator/current.xmlPKPKA <Configurations2/progressbar/PKA <Configurations2/floater/PKA <Configurations2/popupmenu/PKA <Configurations2/menubar/PKA <Configurations2/toolbar/PKA <Configurations2/images/Bitmaps/PKA <Configurations2/statusbar/PKA < settings.xmlYms8 ~r;-Ӳ.- ~3_+c;NxB!%YHr>qJsy#8a>xtk7w81FY4CKm2%4MM51OV`aLڬחռ~q{{[wo7K#3>?VU*D|Wd78eu=F~peas] qYؚvׂ} YF]}Wb03>, P(/~/??>^r1tLAoi" `2hA9=V1>cB-e +w?Z^e6[g\,ʃwssqCHj4JK|*z8#I$m4.''b2!Qɶ@eN>[cf:(Dnc*m@. K@U{~$C ڿj4)f6:$3C*L`mV0];ȶ KrG`.?aD*^GCEMVUާf9W7<+$TP{it撩uP?CPu(`Ub"ʄf)uƞG%MO>e\ST: 7*/qc:o8AI9&,N I)|Eb!yk2AG!>B(,>7/< Ƣ T5fXȇ>l!a`T~NUҺJJqQ}dɜ*"!xw eDBhꊵs|A>S)Eq(cT|=(L3W KtNMy9n;&VO3.'C煚z[报 ݓ}g*,>;sxOh:,5Ŗ?z m+NnʼSOJ $ ࣟ0qG WDzr*:+R΋vE篯tWh P⡯mԉw@T14{e4c菱eچJpxd2czPiQ & HDCݔ[?iX=eRwx"~AĈ"6U0@ɴ]jN>h纶`ѫp/A(" i06wsha 3yz?=9ƶCrYo Ӈ>%_qw!}]oPKu߰PKA <META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPKA <^2 ''mimetypePKA <- Mcontent.xmlPKA 0"5%iler3:b9Q!&\y<pY!/:i:$,@޾8ՋNjՋ]x7SDM L0ñmw;UhYȘȀD[MrO Fck8I'SrI]EYhm:oԽZ<^MMlS fvmR3,DlZ*@`^Ԣ5~Mj3/7eȜ> y 7, Pcc*"^VcVWd+.pN0S6FeHcI2vV䟜UzVS1 Da0%P/3 SX2pbe_?my"lwG6yY4mb_3-Z#8M)+{bj\,'^fpQ\4 ,E8 gکI!_YȈs֏? vl^13'9_?~2q#g_α2?ou@ƨҞq<쏧3rN;%nq~79VƏf/U'hQ{6- ew\fZ˸>:j_PK-MPK< styles.xmlZI6W -˳]HC^Zm)x_HQ-, &>Լ~{_;46JhD*3.ַѧ^Պlɴ*0D]^8mT)Ts`za҅,B{aMle 7cwO.[̡tv0OC+|s$EI ?@qsm1\vnϦR&p-W,ghL4=o yCH*Lv 5U}wפFeY6>gY([Pu\PX[ȻTr6w(/l+P w>w=ʾU0GSe4Kb s+XR*YoPyc%[ p@P 5X 1&u ;rv?vu6$ںlzƔTh[6rHRfSb?2Jr @C q:|C 42/ڒ#'ޑԤBe>?oxf?'eg<̗aF)VP.>қ''gaRR*t"軐9-5S %ac$FukРP!UY4X>x9AuK(ai9&!y$,4nT*f2굥4o D,JOً2&'vdh;}=m=^[}`B*:ޟ5d$ͨzG_8U_H5La؄!Y2@,eLM*uoXscz^sT]}c KGo{F!3hش{}@u{:Rl׿#v~Pw}B?tx@չ8k(cRiW;xx8}ߜ뜓Y8xN>xo#n:p7ị3F[}qG9u?0ځfw݄DAuBa7^=tK.JxNx3gcCps Һ!g+SӸH l-sXpw[Y$Qj)[\OWgj zO&k+DCZ[*sМܥ)AlIOG./IA-^1fЬ꜋`]%_dV2\0\yh3.9ܺ2m/~l_׃W3/ jkS?pbWQ ՍZ> J@}^oPKE 1dY/&PK OpenOffice.org/3.1$Unix OpenOffice.org_project/310m11$Build-9399 Mirko Nasato 2006-07-20T18:40:33 2010-06-02T11:06:34 en-GB 21 PT01H39M02S PK<Thumbnails/thumbnail.png sb``p [8؀=]C*漽q!Wkpf$O9m9Uˆjt|;?e߾'M-_y1K&prVm2zœJ~·u 0Vc{WaBukS@?f;;z#|x;u&=k2?O o_|'Nc I:mTpTZ+wk<]\9%4PK\PK<'Configurations2/accelerator/current.xmlPKPK<Configurations2/progressbar/PK<Configurations2/floater/PK<Configurations2/popupmenu/PK<Configurations2/menubar/PK<Configurations2/toolbar/PK<Configurations2/images/Bitmaps/PK<Configurations2/statusbar/PK< settings.xmlYs8 ~w ݝi t.- ܾDNÅ!%YIrnqJswA0r~̌/<6/)' |fs9.GSAw)&Q ; 1CgLָa'CP\o6/ʇ`5W=fYVSՃʼnN F'1U9 ζ*s!3E%rUI V]XdP\^D➢%L#z]T/L1C!QTOa2mЅqlF,('hp4d^*?v #Rb<m>ui̾r ^"ڛLL2CwݷMQ&0}$5kOǕ64DY<ȧ,k?xTTG9nL>()DŽ $)eH:$oSY&( \HE2&uGX>au 1{T<]G-$L̓) 2q_XZVC)8N<\3J,Qz;SE$OCNQZ_-U=v}8g t3(%bwv“E"Ԝa&#sI76Qߩ) ǭ#\$;`iw9dcPSb\tdY tM9PKɅQPK<META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPK<^2 ''mimetypePK<-M Mcontent.xmlPKMETA-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/visual-table-dynamic-column-template.odt000066400000000000000000000202641152125033300315100ustar00rootroot00000000000000PKF\=^2 ''mimetypeapplication/vnd.oasis.opendocument.textPKF\= content.xmlXo6~_!(dΆ6ZX1`C>$ C͖5 {$%%G;tx͛m.5Sb&8bEuFf',T9+LBda z"TJN 3ʒUSh86lk[l?_فCkfBPCL5jd[/xeL"l&TK4FN&-p(J.l2C 6gg!ʟlQVz9"ˁАVkÁ齢{EC@N^{P}-|Z QM-Uk;N@=@oN789 'X62 f [2m B̑W`M]q@V,{0B\#lw#Rʴ7Lּ]f]z<$Эz@d"krVg)d>ۖLqkdΆ\ 6 e81otm\H}|j 2 PF]G2Y"Y4]#G*)ָг{s~b}.v$KV@ ׺(!dl={^E1q)O NSis8;=/J0h箎*H28Iou9k׫$n[RcpkS{)^,`i\&њ%‟Ӭ!PB,@rdɗUA-G sQP%Vb(1t2vfRQ;l:'y4s%oK7>?g'[S|3K,>Ico}ThԊ'IwF;{ .M'2,ee 2 $%eȸo =ȉ(ץDVr\3;'W!* f_sx<{25׌oݘ\vcZwA4t'5Prs ~BbٕA*Ώ?ͧ~ͺd~qg)[|?+[oodzXV[o><>GKsa]?uÃ0f=9pǰ>X<T^eIE~DY0ay,$7^ՊlX jawA)󅠊EN3:^Nhs/)b7̾f;=VydreK'n #/_; y .`uv;^M\mh5+J$YИ i:ތi:2[295TNTztF<\o0W^%lFf &7; ޽mrAfcm!bɋ۴ܾ@ lv(VrͤeiYӀ/ LS-qӃ_Bj|k+ɊfSMƖ!JQE0\+]tEcFzyb#λWiL Cӽ[ -cPEshc}*:_)dr&9_mR1Y(S`=B؅JL玺ۢxx#zԄsC[QL؊i5 8ņǁ~BB Iacr64[dw̦W1![D =Lj*h .ɿt"(ˆPcvX{tVnIa[7Ď0+*/x%!?h'LXV K(JCȵ`FlH@6RXS:khm\vP3c qp4Y-}a9LF"')M&r"Ȝ*<֥U2oHI璅$J/G#p$8Lٔr 9znN2'ӷ;cN檾PegUSQM7w0O {E[ Y]R"=0b2+XAX3;)þA@*`]Rhj?g";Q("{pL|IXH?\թQ <dY[ Jg4RIl%Ǿ3^ϯN)3)fRթn|Q]7 zǃ+:St?+)qọU-JmN)6X^cL- RTTң[_akX03<%G–ǕШ!wPh6z{3M<РaӒX>虫C1IfOy6~F7tx@8k(\*W{qxx{^N ouN(:%ُ2uQx'Ocύ7ߣH_K Z-x; }|ͧPֵWXDn8@iгMTCG_( u}^^(/׫ usn/W4I>\h|W|]J6 :WBh<<⁦%"P\ԗ$>w4!˓!Si<>r{ۼyRx!e+]xK OYF[ @'#d Ѧ{7"k([_̣lU3!lq~~;}58P!9Vh<0'GEYzo}&G2wʊA©MgMcUY2عGh\zYhw1lv]B y6 ^̿|N D>z]EMu3"dT:jk"j:8c2KϹPK|vbN&PKF\=㘩meta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2006-07-20T18:40:33 2010-08-22T21:34:12 en-GB 24 PT01H02M41S PKF\=Thumbnails/thumbnail.png sb``p [8؀X*<]C*漽m)ܤA"gSoRbRfjX }kw#S+CcAeݤ7%[=2!si{5nAʓY2\|V4\)7jK G\}u}||ᏏJ?>WV?~}}ɏonN6gSi$g[ŻE[fBkGG?#д޸{]/UsGWݽq痳mv4y=~yu=n~|hu߿ YEVVgVWWYn׺>~I d+sfYύv;t 68Ȯɉ,yw[y%)vÇ?tog__[\ߙ边sッˍ[gSd_b jfwmim2g.ʻUgQog5;Mru:¤} OlQ7aǕ56Da9C7uM`Q) PKnzPKF\='Configurations2/accelerator/current.xmlPKPKF\=Configurations2/progressbar/PKF\=Configurations2/floater/PKF\=Configurations2/popupmenu/PKF\=Configurations2/menubar/PKF\=Configurations2/toolbar/PKF\=Configurations2/images/Bitmaps/PKF\=Configurations2/statusbar/PKF\= settings.xmlYs8 ~w ݽ+ӲǖvnL"W?BĐؒ,$9w_6X׼lx  \{/^K;y$ij%K^{-dd Zmk}\JeO6˷{oiLܪբ޼owKs8UU*D|Wd7dƤʮz߻ȍ+\AS"뛋5#׼c)F\x]Pb07., n^ݞ'Oq>Yz !tL.@i! `k@9}Q!I3O_X\2 :`ڞ~g6[g\*k^7>_[fYTTlN 1bX#Q!?1l[2gҀm11]I$A][e>Kqۛž%L?# *A(̌X 0IAXE0sp>' sXb1'+?~)#Rqb<}u/q̱r^":LLm }vo=MA"R`ʛQl?;X+miDYs m?xTXG1u܄ ;\PR KSbEuDޚ,L1.p!]_7XבO9cQa{&48 VT<]E-$̒) 1XZwV})ѤX\3J{,SzSE$}NQ Z_-U=M~q&JQ-J,'{O)לQ" I71P_)[Ǹ~p$ rF?탳BM=- p9hxg4]Dbo=qPgŁmAMac^^ j\Cph0w+W=9SwRΉvy箯L)/⛉.A_)SQ'e2QAƠs(;Cw=цϷ6T ́J;}+bV&  AtWnݤa6,cmKkƂ%F#TIDChdxd%JwSu l;)rCOPH0\@Pʺ<t_(AEJ3Lq9(I|}oPKv\F PKF\=META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPKF\=^2 ''mimetypePKF\=v Mcontent.xmlPKF\=|vbN& styles.xmlPKF\=㘩 meta.xmlPKF\=nzLThumbnails/thumbnail.pngPKF\=' Configurations2/accelerator/current.xmlPKF\=cConfigurations2/progressbar/PKF\=Configurations2/floater/PKF\=Configurations2/popupmenu/PKF\= Configurations2/menubar/PKF\=AConfigurations2/toolbar/PKF\=wConfigurations2/images/Bitmaps/PKF\=Configurations2/statusbar/PKF\=v\F settings.xmlPKF\=`3fEa(META-INF/manifest.xmlPKjodreports-2.4.0/jodreports/src/test/resources/visual-table-span-row-template.odt000077500000000000000000000203171152125033300303410ustar00rootroot00000000000000PK [<^2 ''mimetypeapplication/vnd.oasis.opendocument.textPK [< content.xmlXn6}WJ2-n8-CҢ"X0esK*IbCR%"#]t𜙣-WTi&$0Ȅ$}w%Ӕ:N$)2*LD0l~tJ%LΨ29kD],of;6ti-/#;p(JXHjʮQ*!Y PL5 gcE1K5Er`RBqJ`U،U6%"{sj[Ui玘O̰.(^Qf=zAx_ʺƲVby&_JYK?A` |'sRg\f"sۦuD=!5X'{]pHf4k0{1 ([_zͥ2ub &TkXGIR\;%XMLd)'u1ʫE2Y"P9rPPʖoX7tmlH}|jTR؅%p}}Wwd*ybQ2W&%Xc.֣qv5v$R )L"g"3WG$uNQ/·??Ww ލzo*SSg*9N~\8y`|**45n`), N_t8!m;_1v' L?/w** Y/V|MAyXL <}Xδ s`~ND!&, fs՞f 4]Mp6 ڶ7y /jh_PK },"PK [< styles.xmlZIo8ϯ0ThYNډ=MY0 bmZmDb~#Eb+qZ>T^gIE~DY0ay,on$7^lX҇ jiA)󥠊eN3:^Nhs/)b7̾f{=VydjeK' #/_{ y >`u n7]M܄b |E)SÕ!KSa4BǛ1MC^R^f+&GjډߌΈ̀k-s0*ޫėͨ&|D߻M.l-=rU,y1zۗBPQ;ͮCޝdI1M"sE!pvi%nzPPBH]YoPym%Y p@P5X !&UN& e{(,H$I$1Xn\@d3^SEǺ w@ q>\ChėQSiY3rxDxa;:G/)Tdvygl3p<]r\շJja*Jm\淟Iah+!11BJP&RZaUr_+x’:g7h3=HBe V ^JxPMt}J$' eX@O4 :ע2*Ǡ̰4k+5^ @jx}3x=钭w|>W>z=)e&L 4у:ۍ/tAt[xzeؠPCcp1?&ypEI5Ŧ7kaØ csc|4X4 Tzt1>]W{M_ fDŽDRT]}3 FooFI 4lZ<=sP4`(&{;o]/:;||޲K@p;<ϝnUp/ic͹)C9W.=0q#<: ?a{oc]7k)Aќo:ʺ Kh-[ (z6xH\g~^>S\))gkLqEͅf Η|74a@q-}ȳ)iZ"j *RŵhL}{N*s)qG<:AS~1#E>JIㅔuEy,͟6`O>em,|<& D ܊, zZ#x 0Mv'b+#BMZ[HZF/ueiEf >5,+ zc6E7Wsd`yYCpe lmu |)x13V_@ݦpE#w-v5͵QU먭UQ/[?PK>~sL&PK [<<meta.xml OpenOffice.org/3.0$Unix OpenOffice.org_project/300m21$Build-9319 Mirko Nasato 2006-07-20T18:40:33 2010-06-02T21:25:00 en-GB 15 PT00H44M04S PK [<Thumbnails/thumbnail.png sb``p [8؀X<]C*漽m+ܪà˾ lW iQFb.zʐ}Ignr(;Ϲ$L|}y;}5?濱(|t$)]ѓ??ww~zGc.q*}/?;*Ɲ;wuu׮] V|~vӷWWWooo~{s35xj,ͷg[Rϣ:qyyw*zz&L*WOOO?b\6/ӓEe.tnpUiVǎϼ:foSAFUcYVVvr߾}E/دm+u_\\ϭ|}mm?+}1⪾gf?>:_˾n\\el;/U%"O8;FG)6EeSBPK2/sPK [<'Configurations2/accelerator/current.xmlPKPK [<Configurations2/progressbar/PK [<Configurations2/floater/PK [<Configurations2/popupmenu/PK [<Configurations2/menubar/PK [<Configurations2/toolbar/PK [<Configurations2/images/Bitmaps/PK [<Configurations2/statusbar/PK [< settings.xmlYms8 ~iǖvnD^Ip!Đؒ,y$9_֑8[_6q\NxcY09a(Iިɶ•' H }Z!!wK48SQ:EP^rrl4J|*zb+v*uTe x]NOhBvmʜDH}tP$uUۈoz/]Tmo6JZc0ÏR:' 8_NbC03d1h &a̵ٌl+,('hHaiȜTTlu2'Hʼnh(vɪ ԍ!3'x" `3 \2Gp\ eLirw6QLH*oF8J`]eIӓI4Lv*yPbqc:8uAI&,N )\Eb!yk2B: \t}]SX$}`o_^G>yE͉Xl^4fX~dS@vja0~b0K*7&pC~c`iYDrbq( >pDReN<;E2 k!|UTu&s\A.S(Eq(cLTl=(Gb _s& L %Q`PWnOL&L7*9;j.aYpD4mu9س؏Y-M nM(kS%} L+ݥfdrN],x 5eB?A! frm:\a" o*~󨗮ӑcl;^V#L* 1vvѧ&^PK+Eb PK [<META-INF/manifest.xmln @{5I(qR$0%f[kn fzpC$Փ(o |/uX9<(uHi#R+2Tr@5_;c㱸ʠ5cFъ<䪦zs-]#w0 䰑44ƀ9G 4;a]r[Tƒ 3}DK GS]Y!>Vet+\P)~$g;fz fةYĊ#wߧcqVTz_6f`Kk^? PK`3fEaPK [<^2 ''mimetypePK [< }," Mcontent.xmlPK [<>~sL& Bstyles.xmlPK [<< meta.xmlPK [<2/snThumbnails/thumbnail.pngPK [<''Configurations2/accelerator/current.xmlPK [<~Configurations2/progressbar/PK [<Configurations2/floater/PK [<Configurations2/popupmenu/PK [<&Configurations2/menubar/PK [<\Configurations2/toolbar/PK [<Configurations2/images/Bitmaps/PK [<Configurations2/statusbar/PK [<+Eb settings.xmlPK [<`3fEaCMETA-INF/manifest.xmlPK